STM32F103 点亮LED灯

1. 项目概述

在本项目中,我们将使用 STM32F103C8T6 开发板,通过 HAL(Hardware Abstraction Layer)库 控制 PC13 引脚 让 LED 以 1 秒间隔闪烁。

2. 硬件设计

2.1 硬件需求

  1. STM32F103C8T6 最小系统开发板
  2. USB 转串口模块(用于烧录程序)

2.2 硬件连接

PC13 通常连接到开发板上的 板载 LED,如果要使用外部 LED,请按照以下方式连接:

  1. PC13 → LED 正极
  2. LED 负极 → 220Ω 电阻 → GND

3. 软件设计

3.1 STM32 HAL 库简介

HAL 库是 ST 官方提供的 硬件抽象库,封装了底层寄存器操作,使开发更加简单。

3.2 工程创建步骤(基于 STM32CubeMX)

  1. 打开 STM32CubeMX,创建新工程,选择 STM32F103C8T6
  2. 配置 PC13 作为 GPIO 输出模式,找到 "PC13",设置为 GPIO_Output
  3. 配置时钟(默认 72MHz,无需修改)。
  4. 生成代码,选择 IDE 为 STM32CubeIDE 或 Keil

4. 代码实现

在生成的 HAL 工程基础上,我们修改 main.c 实现 LED 闪烁。

4.1 main.c 代码

#include "main.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

/**
  * @brief GPIO 配置初始化
  */
static void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    __HAL_RCC_GPIOC_CLK_ENABLE();                           // 使能 GPIOC 时钟
    GPIO_InitStruct.Pin = GPIO_PIN_13;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;             // 推挽输出
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);                 // 初始化 GPIOC

    HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);    // 默认关闭 LED
}

int main(void)
{
    HAL_Init();            // 1.初始化 HAL 库
    SystemClock_Config();  // 2.配置系统时钟
    MX_GPIO_Init();        // 3.初始化 GPIO

    while (1)              // 4.循环闪亮 LED
    {
        HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);  // 切换 PC13 状态
        HAL_Delay(1000);  // 延时 1000ms
    }
}


4.2 代码解析

  1. HAL_Init():初始化 HAL 库。
  2. SystemClock_Config():配置时钟。
  3. MX_GPIO_Init():初始化 PC13推挽输出模式
  4. HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13):每次调用 翻转 LED 状态
  5. HAL_Delay(1000):延时 1 秒,实现 LED 闪烁。

5. 烧录与测试

5.1 烧录步骤

stlink

  1. 连接 USB 转串口模块
    • RX → A9,TX → A10,GND → GND
  2. 进入 Bootloader 模式
    • BOOT0 拉高(接 VCC),RESET 按一下
  3. 使用 STM32CubeProgrammer 或 Flash Loader 烧录代码。
  4. 烧录完成后,BOOT0 复位(接 GND),按下 RESET 运行程序

6. 总结

本教程介绍了 STM32F103C8T6 通过 HAL 库 控制 PC13 LED 闪烁 的详细过程,包括 硬件设计、软件配置、代码编写、烧录步骤。希望能帮助你快速入门 STM32 开发!

posted @ 2025-02-07 11:20  jeikerxiao  阅读(1347)  评论(1)    收藏  举报