问题描述
延时函数delay_ms()的实现原理是根据滴答定时器中断来实现的。滴答定时器中断优先级设置为15,即最低优先级。另外开启外部中断EXTI0,EXTI0的中断优先级设置为4,EXTI0的中断优先级高于滴答定时器的中断优先级。此时在中断服务函数内部调用delay_ms()函数,STM32单片机还可以正常进行延时吗?考虑到优先级的原因,这令我很疑惑。我给你举个例子如void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
delay_ms(100); …}
答案解释
因为:
void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
/* EXTI line interrupt detected */
if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin)

文章讨论了STM32单片机中使用延时函数delay_ms()时,尽管滴答定时器中断优先级较低,但在EXTI0中断处理中如何保持延时功能。通过EXTI0中断的优先级设置和中断处理机制,即使低优先级也能实现延时。
最低0.47元/天 解锁文章
3126

被折叠的 条评论
为什么被折叠?



