基于尚硅谷FreeRTOS视频笔记——13—HAL库和RTOS时钟源问题
RTOS的时钟源就是系统定时器中断,通俗来说就是系统定时器每中断一次,就扫描一次RTOS,查看RTOS中有没有任务的切换。
但是,系统存在一个HAL_Delay()函数,就是使用的系统定时器中断来执行的函数。
当我们在RTOS中,使用了HAL_Delay()函数,就会造成程序的卡死。
一般情况
如图
默认情况下,系统时钟是基于系统滴答定时器,并且优先级为1,相对较高。这样,在程序运行时,就不会被其他任务所打断。
问题
但是,在FreeRTOS也同样为系统systick来进行中断时,为保证不影响stm32程序中的程序运行,会强制将systick设置为最低优先级,也就是15。这样,就会导致我们在RTOS中,使用了HAL_Delay()函数,就会造成程序的卡死的问题。
于是为了保证程序正常运行,我们一般将系统时间来源设置为其他定时器来提供。比如TIM7
修改后的情况
并将中断优先级设置为较高的 1.
需要设置为高优先级的原因
可以在stm32中开启RTOS
(这样配置的版本不是最新版本)
这样,就可以看到系统systick被强制设置为低优先级
如果不将系统时钟源更改