轻松点亮LED:STM32F103C8T6入门
【STM32F103C8T6入门教程】摘要:本文详细介绍了基于标准库开发STM32F103C8T6的完整流程。首先概述了该MCU的特性及开发板硬件配置,随后分步讲解开发环境搭建、Keil工程创建、时钟与外设配置方法。重点演示了通过PC13控制LED的编程实现,包括GPIO初始化、LED驱动逻辑及简单延时设计,并提供了程序下载调试的具体操作步骤。最后总结了常见问题解决方案及后续学习建议,为初学者建立
一、STM32F103C8T6简介
STM32F103C8T6是ST公司推出的基于ARM Cortex-M3内核的32位微控制器,属于STM32F1系列中的"中等容量"产品。由于其性价比高、外设丰富,在嵌入式开发领域广受欢迎,常被用于工业控制、智能家居、物联网设备等场景。

1.1 主要特性
-
内核:72MHz Cortex-M3
-
Flash:64KB
-
SRAM:20KB
-
GPIO:37个(分为PA、PB、PC、PD等端口)
-
外设:定时器、ADC、USART、SPI、I2C等
-
封装:LQFP48
1.2 开发板介绍

常见的STM32F103C8T6最小系统板(俗称"Blue Pill")具有以下特点:
-
板载8MHz晶振
-
32.768kHz RTC晶振
-
复位按钮
-
用户LED连接在PC13引脚
-
BOOT0/BOOT1选择开关
-
SWD调试接口
二、开发环境搭建
2.1 硬件准备
-
STM32F103C8T6开发板
-
ST-Link V2调试器(或USB-TTL)
-
杜邦线若干
-
微型USB数据线
2.2 软件准备
-
Keil MDK-ARM:
-
官网下载安装包
-
安装时选择"STM32F1 Series"支持包
-
-
标准外设库:
-
从ST官网下载STM32F10x标准外设库
-
解压后包含Libraries、Project、Utilities等目录
-
-
驱动安装:
-
ST-Link驱动(STSW-LINK009)
-
USB转串口驱动(如CH340)
-
三、工程创建与配置
3.1 新建Keil工程
-
打开Keil uVision5
-
Project → New μVision Project
-
选择存储路径并命名
-
设备选择:STM32F103C8
3.2 添加必要文件
-
从标准库复制以下文件到工程目录:
-
Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup_stm32f10x_md.s(启动文件)
-
Libraries/STM32F10x_StdPeriph_Driver/src/*.c(所需外设驱动)
-
Libraries/CMSIS/CM3/CoreSupport/core_cm3.c
-
Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c
-
-
在Keil中添加分组:
-
Startup:添加启动文件
-
CMSIS:添加core_cm3.c和system_stm32f10x.c
-
StdPeriph_Driver:添加stm32f10x_gpio.c和stm32f10x_rcc.c
-
3.3 配置工程选项
-
Target选项卡:
-
勾选"Use MicroLIB"(简化版C库)
-
-
Output选项卡:
-
勾选"Create HEX File"
-
-
C/C++选项卡:
-
Define:添加USE_STDPERIPH_DRIVER
-
Include Paths:添加标准库头文件路径
-
四、LED控制程序设计
4.1 硬件连接分析
开发板上的用户LED通常通过PC13引脚控制:
-
LED阳极接3.3V
-
阴极接PC13
-
当PC13输出低电平时LED点亮
-
当PC13输出高电平时LED熄灭
4.2 主程序代码
c
复制
下载
#include "stm32f10x.h"
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--);
}
int main(void)
{
/* 1. 初始化系统时钟 */
SystemInit();
/* 2. 开启GPIOC时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
/* 3. 配置PC13为推挽输出 */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/* 4. 主循环 */
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // LED亮
Delay(5000000);
GPIO_SetBits(GPIOC, GPIO_Pin_13); // LED灭
Delay(5000000);
}
}
4.3 代码解析
-
时钟配置:
-
SystemInit()函数初始化系统时钟为72MHz -
RCC_APB2PeriphClockCmd()使能GPIOC时钟
-
-
GPIO配置:
-
使用
GPIO_InitTypeDef结构体配置引脚参数 -
GPIO_Mode_Out_PP设置为推挽输出模式 -
GPIO_Speed_50MHz设置输出速度
-
-
LED控制:
-
GPIO_ResetBits()输出低电平点亮LED -
GPIO_SetBits()输出高电平熄灭LED -
简单延时函数实现闪烁效果
-
五、程序下载与调试
5.1 硬件连接
使用ST-Link V2连接开发板:
| ST-Link | STM32 |
|---|---|
| SWDIO | PA13 |
| SWCLK | PA14 |
| GND | GND |
| 3.3V | 3.3V |
5.2 下载配置
-
在Keil中点击"Options for Target"
-
Debug选项卡选择ST-Link Debugger
-
点击Settings确认SWD模式
-
Flash Download中勾选"Reset and Run"
5.3 下载程序
-
点击"Load"按钮或按F8
-
观察输出窗口的下载进度
-
开发板自动复位后运行程序
六、常见问题解决
6.1 程序无法下载
-
检查ST-Link驱动是否安装
-
确认BOOT0跳线帽接在GND
-
检查SWD接口连接是否正确
6.2 LED不亮
-
检查LED极性是否正确
-
测量PC13引脚电压变化
-
确认GPIO初始化代码无误
6.3 程序运行不稳定
-
检查电源供电是否稳定
-
确认系统时钟配置正确
-
检查复位电路是否正常
七、进阶学习建议
-
使用定时器实现精准延时
-
学习中断编程
-
掌握USART通信
-
了解ADC采集
-
尝试PWM控制
通过本实验,您已经掌握了STM32开发的基本流程。后续可以继续学习更复杂的外设应用,逐步提升STM32开发能力。
更多推荐



所有评论(0)