☰
基于寄存器和固件库的stm32的LED流水灯
2026/9/30 7:38:51 网站建设 项目流程

一、工程搭建步骤

  1. 新建Keil工程,芯片选择STM32F103C8T6。
  2. 在工程中新建分组,添加STM32标准库文件:stm32f10x_gpio.c、stm32f10x_rcc.c等。
  3. 添加头文件路径,在C/C++选项配置宏定义STM32F10X_MD,USE_STDPERIPH_DRIVER。
  4. 魔术棒Debug选项,选择Use Simulator软件仿真,配置DLL参数,用于逻辑分析仪波形采集。
  5. 新建main.c文件,编写主程序代码。

二、实验代码 main.c
代码说明

  1. 头文件包含:stm32f10x.h是标准库总头文件,stm32f10x_gpio.h与stm32f10x_rcc.h分别提供 GPIO 和时钟控制相关的函数声明与结构体定义。

  2. 延时函数:Delay()使用空循环实现粗略延时。由于循环次数固定,每次调用约延时 1ms 左右,但实际时长受编译器优化等级和仿真环境影响,精度不高。

  3. GPIO 初始化:
    先调用RCC_APB2PeriphClockCmd使能 GPIOA 的时钟。STM32 外设默认时钟关闭,必须先开启时钟才能操作寄存器。
    配置GPIO_InitStructure结构体,将 PA0、PA1、PA2 设置为推挽输出模式,最大翻转速度 50MHz。
    调用GPIO_Init将配置写入寄存器。

  4. 流水灯逻辑:主循环中依次将 PA0、PA1、PA2 置为高电平,其余两路置为低电平,每次切换后调用Delay()延时约 1 秒,形成三路 LED 轮流点亮的流水效果。


三、软件仿真(逻辑分析仪)

  1. 编译工程无报错,进入 Debug 调试模式。
  2. 打开逻辑分析仪Logic Analyzer,点击 Setup,添加引脚信号:PORTA.0、PORTA.1、PORTA.2。
  3. 运行仿真,等待 15s 后停止仿真。
  4. 使用 Zoom Out 横向拉宽时间轴,观察三路引脚方波时序,截图保存波形。

四、硬件接线

LED 负极接 PA0、PA1、PA2;LED 正极接 3.3V 电源。

五、实验现象

  1. 仿真波形:逻辑分析仪采集得到三路方波,PA0、PA1、PA2 电平依次翻转,间隔约 1 秒。
  2. 实物现象:下载程序到开发板后,PA0、PA1、PA2 外接 LED 轮流点亮,循环往复。

六、实验遇到的问题及解决

  1. 逻辑分析仪看不到波形
    解决:确认添加 PORTA.0/PORTA.1/PORTA.2 信号;必须先进入调试模式,再打开逻辑分析仪。
  2. 下载到开发板 LED 不亮
    解决:检查 ST-Link 接线、供电;核对引脚是否为 PA0/PA1/PA2;确认高低电平逻辑。
  3. 延时不准
    解决:软件 for 循环延时本身精度差,后续实验改用 SysTick 硬件定时器提高定时精度。

七、实验总结

本次实验使用标准外设库完成 GPIO 初始化,实现流水灯。固件库对底层寄存器做了封装,代码可读性高,开发简单。
软件延时代码简单,但是定时精度差,受仿真、编译器影响。后续实验将使用 SysTick 系统滴答定时器,实现高精度定时,并对比两种延时方式波形差异。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询