执行卡在HAL_Delay,单步执行无效

2019-07-14 14:00发布

1.在一个简单的按键试验中,我在xxit.c的EXti2_IRQHandler中调用了一个函数KEY_BUZ_LED():
      void KEY_BUZ_LED(void)
{
/****************************************************************/   
   HAL_GPIO_WritePin  ( GPIOD, GPIO_PIN_1,  GPIO_PIN_RESET);//低有效
   HAL_GPIO_WritePin  ( GPIOD, GPIO_PIN_3,  GPIO_PIN_RESET);//低有效
//  H_delayMS(250000); //自定义延时函数
   HAL_Delay(300);   
   HAL_GPIO_WritePin  ( GPIOD, GPIO_PIN_1,  GPIO_PIN_SET);
   HAL_GPIO_WritePin  ( GPIOD, GPIO_PIN_3,  GPIO_PIN_SET);
/***************************************************************/   
}
但是我按下按键后,能按下降沿正常进入EXTI2_IRQHandler里面的HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2)函数,但是接下来执行KEY_BUZ_LED()时一直卡在了 HAL_Delay(300),此时单步执行也无效了。
       后来我就使用了自定义的延时函数  H_delayMS(),发现正常实现按键后蜂鸣器和LED的响、亮。
请问,各位大侠,这是什么情况?还有就是HAL_Delay函数的延时是怎么计算的,麻烦详解,感激不尽!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
wanyou2345
1楼-- · 2019-07-16 10:30
骑猪去天山 发表于 2019-2-26 13:25
这个就是滴答定时器的优先级,你的中断不能比他高.

这个滴答已经是0,0了,EXTI2的中断优先级还没找到
wanyou2345
2楼-- · 2019-07-16 12:43
骑猪去天山 发表于 2019-2-26 13:25
这个就是滴答定时器的优先级,你的中断不能比他高.

我的EXTI2也是最高优先级(当时没注意,默认的0,0)

一周热门 更多>