一、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 软件准备

  1. Keil MDK-ARM

    • 官网下载安装包

    • 安装时选择"STM32F1 Series"支持包

  2. 标准外设库

    • 从ST官网下载STM32F10x标准外设库

    • 解压后包含Libraries、Project、Utilities等目录

  3. 驱动安装

    • ST-Link驱动(STSW-LINK009)

    • USB转串口驱动(如CH340)

三、工程创建与配置

3.1 新建Keil工程

  1. 打开Keil uVision5

  2. Project → New μVision Project

  3. 选择存储路径并命名

  4. 设备选择:STM32F103C8

3.2 添加必要文件

  1. 从标准库复制以下文件到工程目录:

    • 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

  2. 在Keil中添加分组:

    • Startup:添加启动文件

    • CMSIS:添加core_cm3.c和system_stm32f10x.c

    • StdPeriph_Driver:添加stm32f10x_gpio.c和stm32f10x_rcc.c

3.3 配置工程选项

  1. Target选项卡:

    • 勾选"Use MicroLIB"(简化版C库)

  2. Output选项卡:

    • 勾选"Create HEX File"

  3. 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 代码解析

  1. 时钟配置

    • SystemInit()函数初始化系统时钟为72MHz

    • RCC_APB2PeriphClockCmd()使能GPIOC时钟

  2. GPIO配置

    • 使用GPIO_InitTypeDef结构体配置引脚参数

    • GPIO_Mode_Out_PP设置为推挽输出模式

    • GPIO_Speed_50MHz设置输出速度

  3. 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 下载配置

  1. 在Keil中点击"Options for Target"

  2. Debug选项卡选择ST-Link Debugger

  3. 点击Settings确认SWD模式

  4. Flash Download中勾选"Reset and Run"

5.3 下载程序

  1. 点击"Load"按钮或按F8

  2. 观察输出窗口的下载进度

  3. 开发板自动复位后运行程序

六、常见问题解决

6.1 程序无法下载

  • 检查ST-Link驱动是否安装

  • 确认BOOT0跳线帽接在GND

  • 检查SWD接口连接是否正确

6.2 LED不亮

  • 检查LED极性是否正确

  • 测量PC13引脚电压变化

  • 确认GPIO初始化代码无误

6.3 程序运行不稳定

  • 检查电源供电是否稳定

  • 确认系统时钟配置正确

  • 检查复位电路是否正常

七、进阶学习建议

  1. 使用定时器实现精准延时

  2. 学习中断编程

  3. 掌握USART通信

  4. 了解ADC采集

  5. 尝试PWM控制

通过本实验,您已经掌握了STM32开发的基本流程。后续可以继续学习更复杂的外设应用,逐步提升STM32开发能力。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐