利用STM32F407ZGT6微控制器的RT-Spark开发板,进行定时测量
你是否好奇过微控制器如何同时处理多个任务?本项目展示了STM32F407ZGT6 RT-Spark开发板上定时器中断和任务调度的工作原理。两个定时器以不同的频率闪烁LED,而按钮中断则在按下时立即响应——所有这些功能都通过一个简单的前台/后台系统协同运行。
硬件设置
该项目使用基于STM32F407ZGT6微控制器的RT-Spark开发板。两个内置LED连接到PF11(红色)和PF12(蓝色)引脚,一个用户按钮连接到PA0,PE0引脚设置为调试引脚,用于定时测量。
软件架构
系统采用前景/后台架构。定时器中断以中断服务例程(ISRs)的形式在后台运行,当任务就绪时会设置标志位。前台的主循环检查这些标志位,并执行相应的任务。TIM2 以最高优先级以 1Hz 运行,TIM3 以中等优先级以 2Hz 运行,而三个中断中按钮 EXTI 中断的优先级最低。
实施
TIM2 和 TIM3 在 STM32CubeMX 中通过设置各自的预分频器和自动重载值来实现目标频率。HAL_TIM_PeriodElapsedCallback 函数负责处理两个定时器的中断,切换 LED 以及设置任务标志。主循环在 TIM2 触发时执行任务 A,在 TIM3 触发时执行任务 B,并周期性地运行一次 10 秒的检查任务 C。当 PA0 上的按钮中断被触发时,按下按钮会立即切换两个 LED,演示了基于事件的响应机制。
结果
这段视频展示了RT-Spark板的实际运行情况——红色和蓝色LED灯通过定时器中断以不同频率闪烁,当按钮被按下时,两个LED灯会立即切换。
时间测量
观察
在测试期间,红色LED由TIM2触发每1秒闪烁一次,而蓝色LED由TIM3触发每0.5秒闪烁一次。当用户按钮被按下时,两个LED都会立即响应,确认外部中断功能正常。每当定时器标志被设置时,前台任务都能正确执行。
分析
测量到的 TLatency 为 24.94 微秒,表明中断触发与任务开始之间存在较小的延迟。TISR 为 4.31 微秒,证实中断服务程序(ISR)执行非常迅速。总响应时间为 50.02443 毫秒,接近预期的 50 毫秒任务延迟。当所有任务同时运行时,最坏情况下的响应时间可达 120 毫秒。使用抢占式调度程序可显著降低该延迟,因为高优先级任务可以立即运行,无需等待其他任务完成。
本文编译自hackster.io





