本任务要求设计一个 LED 流水灯系统,具体要求如下,
系统中有 8 个 LED 灯,分别是 LED1~LED8。系统上电时,8 个 LED 灯默认为熄灭状态。
接下来 8 个 LED 灯依次点亮,即:LED1 点亮 1 秒后熄灭,然后 LED2 点亮 1 秒后熄灭……最后 LED8 点亮 1 秒后熄灭,并以此循环往复。
0.硬件原理图分析
1.CubeMX新建工程文件夹task3_project
2.SWD调试端口的配置
3.配置HSE和LSE,配置时钟树
4.配置GPIO功能端口
5.定时器TIM6的配置
6.定时器中断的配置
7.保存STM32CubeMX工程
8.生成C代码工程,完善代码
0.硬件原理图分析
1.CubeMX新建工程文件夹task3_project
在“STM32_WorkSpace”文件夹下新建文夹“task3_WaterFlow_LED”用于保存本任务工程。
新建 STM32CubeMX 工程,选择 MCU 型号,选择型号为 STM32F103VE 的微控制器
2.SWD调试端口的配置
将“PA13”引脚配置为 SWDIO 功能,“PA14”引脚配置为 SWCLK
功能;
3.配置HSE和LSE,配置时钟树
将 HCLK 配置为 72MHz,PCLK1 配置为 36MHz,PCLK2 配置为 72MHz。将 MCU 的“High Speed Clock(HSE,高速外部时钟)配置为“Crystal/Ceramic Resonator(晶体/陶瓷谐振器)”将 MCU 的Low Speed Clock(LSE,低速外部时钟)”配置为Crystal/Ceramic Resonator(晶体/陶瓷谐振器);
4.配置GPIO功能端口
GPIO_MODE_INPUT:输入模式
GPIO_MODE_OUTPUT_PP:推挽输出模式
GPIO_MODE_OUTPUT_OD:开漏输出模式
GPIO_MODE_AF_PP:推挽复用模式
GPIO_MODE_AF_OD:开漏复用模式
GPIO_MODE_AF_INPUT:复用输入模式
GPIO_MODE_ANALOG:模拟量输入模式
标号①:MCU 输出低电平时 LED 灯亮,因此将 GPIO 默认的输出电平配置为“High(高电平)”
标号②:GPIO 模式配置为“Output Push Pull(输出推挽功能)”;
标号③:GPIO 上拉下拉功能配置为“No pull-up and no pull-down(无上拉下拉)”
标号④:GPIO 最大输出速度配置为“High(高速)”;
标号⑤:用户标签分别配置成“LED1~LED8”。
5.定时器TIM6的配置
展开“Pinout & Configuration”标签页左侧的“Timers(定时器)”选项,选择“TIM6(定时器 6)”选项(图 2中标号①处)。勾选“Activated(激活)”复选框(图 2-34 中的标号②处)。将“Prescaler(分频系数)”配置为“72000000/10000-1”(图 2-34 中的标号③处),即:将定时器 6 的时钟频率配置为 10kHz。将“Counter Period(定时器周期,自动重载寄存器值)”配置为“10000-1” (图 2中的标号④处),即:定时器的更新周期为 1 秒。
展开“Pinout & Configuration”标签页左侧的“System Core(系统内核)”选项,选择“NVIC”选项(图 3 中标号①处)。勾选使能“TIM6 global interrupt(定时器 6全局中断)”,如图 3中的标号②所示。然后将其抢占优先级配置为“2”级,如图 3 中的标号③所示
7.保存STM32CubeMX工程
点击“File(文件)”菜单,选择“Save Project(保存工程)”选项。然后定位到文件夹“D:\STM32_WorkSpace\task2_WaterFlow_LED”,点击“确定”保存 STM32CubeMX 工程;
参考 相关内容进行“C 代码生成”与“工程保存”的配置,最后点击“GENERATECODE(生成代码)”按钮,生成 LED 流水灯系统的初始 C 代码工程。
8.生成C代码工程,完善代码
在“main.c”中添加以下代码启动 TIM6 的中断。
编写 TIM6 中断服务程序,在“main.c”中定义公共变量 num
添加 TIM6 中断服务程序:
编译程序并下载运行后的现象是系统上电时,8 个 LED 灯默认为熄灭状态,接下来 8 个LED 灯依次点亮。