# STM32F103RB状态机控制LED灯 **Repository Path**: whaishen_whaishen/FSMLED ## Basic Information - **Project Name**: STM32F103RB状态机控制LED灯 - **Description**: STM32F103RB状态机控制LED灯,适配正点原子F103 Nano开发板,使用安富莱代码进行改写 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2021-08-25 - **Last Updated**: 2023-04-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: 状态机 ## README /* ********************************************************************************************************* * * 【安富莱】STM32-V4 开发板-例程功能说明 * * 例程名称 : V4-001_不一样的跑马灯(软件定时器、状态机) * * 推荐将编辑器的缩进参数和TAB设置为4 来阅读本文件 * ********************************************************************************************************* */ 【1】例程简介 这个程序实现了简单的流水灯功能。流水灯程序(也叫跑马灯)的写法有很多种,每个人都不一样。有简单的有复杂的, 我们写得这个流水灯程序看起来复杂。我们不是简单地教你如何设置1个GPIO输出0和1,我们希望你能从中学到是 ST固件库、状态机编程、软件定时器的用法。 这个流水灯程序实现功能如下: (1)上电时,LED1点亮,闪烁3次,闪烁频率为精确的1Hz。 --- 状态0 (持续3秒) (2)依次点亮4个LED中的一个, 实现流水灯的效果。--- 状态1 (持续5秒) (3)依次熄灭4个LED中的一个,实现第2种流水灯效果。 --- 状态2 (持续5秒) (4)(状态0)-->(状态1)-->(状态2 ) | | -----<----- 这个例子应用1个systick中断实现几个软件定时器,用来控制LED指示灯的闪烁时间。主程序采用了状态机编程方法。 bsp_led.c 文件封装了LED的驱动函数。驱动LED的相关GPIO被配置为推挽输出模式。 bsp_timer.c 文件包含systick中断配置函数,定时周期设置为1ms。中断服务程序实现了4个软件定时器。软件定时器 的个数由bsp_timer.h 中的宏TMR_COUNT来定义。 【2】执行结果 下载完程序之后,复位运行程序。观察开发板上的LED1-LED4 指示灯的状态。 【3】例程修改记录 2015-08-30 V1.0 首版 【4】 2021-08 1、迁移到Nano 开发板适配STM32F103RB; 2、将跑马灯的数量增加到8个; 3、 HardFault_Handler函数使用了beep,但愿程序没有初始化beep,增加beep初始化,并在第一个状态机中和LED同步动作。 4、重写了状态机章节,使用二维数组的方式,更加符合状态机的用法。