基于寄存器和固件库的stm32的LED流水灯

发布时间:2026/9/30 7:38:59
基于寄存器和固件库的stm32的LED流水灯 一、工程搭建步骤新建Keil工程芯片选择STM32F103C8T6。在工程中新建分组添加STM32标准库文件stm32f10x_gpio.c、stm32f10x_rcc.c等。添加头文件路径在C/C选项配置宏定义STM32F10X_MD,USE_STDPERIPH_DRIVER。魔术棒Debug选项选择Use Simulator软件仿真配置DLL参数用于逻辑分析仪波形采集。新建main.c文件编写主程序代码。二、实验代码 main.c代码说明头文件包含stm32f10x.h是标准库总头文件stm32f10x_gpio.h与stm32f10x_rcc.h分别提供 GPIO 和时钟控制相关的函数声明与结构体定义。延时函数Delay()使用空循环实现粗略延时。由于循环次数固定每次调用约延时 1ms 左右但实际时长受编译器优化等级和仿真环境影响精度不高。GPIO 初始化先调用RCC_APB2PeriphClockCmd使能 GPIOA 的时钟。STM32 外设默认时钟关闭必须先开启时钟才能操作寄存器。配置GPIO_InitStructure结构体将 PA0、PA1、PA2 设置为推挽输出模式最大翻转速度 50MHz。调用GPIO_Init将配置写入寄存器。流水灯逻辑主循环中依次将 PA0、PA1、PA2 置为高电平其余两路置为低电平每次切换后调用Delay()延时约 1 秒形成三路 LED 轮流点亮的流水效果。三、软件仿真逻辑分析仪编译工程无报错进入 Debug 调试模式。打开逻辑分析仪Logic Analyzer点击 Setup添加引脚信号PORTA.0、PORTA.1、PORTA.2。运行仿真等待 15s 后停止仿真。使用 Zoom Out 横向拉宽时间轴观察三路引脚方波时序截图保存波形。四、硬件接线LED 负极接 PA0、PA1、PA2LED 正极接 3.3V 电源。五、实验现象仿真波形逻辑分析仪采集得到三路方波PA0、PA1、PA2 电平依次翻转间隔约 1 秒。实物现象下载程序到开发板后PA0、PA1、PA2 外接 LED 轮流点亮循环往复。六、实验遇到的问题及解决逻辑分析仪看不到波形解决确认添加 PORTA.0/PORTA.1/PORTA.2 信号必须先进入调试模式再打开逻辑分析仪。下载到开发板 LED 不亮解决检查 ST-Link 接线、供电核对引脚是否为 PA0/PA1/PA2确认高低电平逻辑。延时不准解决软件 for 循环延时本身精度差后续实验改用 SysTick 硬件定时器提高定时精度。七、实验总结本次实验使用标准外设库完成 GPIO 初始化实现流水灯。固件库对底层寄存器做了封装代码可读性高开发简单。软件延时代码简单但是定时精度差受仿真、编译器影响。后续实验将使用 SysTick 系统滴答定时器实现高精度定时并对比两种延时方式波形差异。