stm32 hal库的外部中断及hal_delay问题

2019-07-20 00:50发布

本人写了一个程序,正在用HAL库的外部中断,但是进入中断后就出不来了,不知道HAL库是如何清除终端标志位的,及跳出中断的。
还有在中断里的hal_delay不好使,并不知道是什么原因,还请大家解答一下。


int main()
{
    HAL_Init();
    SystemClock_Config();
    gpio_init();
   
    HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
    HAL_NVIC_SetPriority(EXTI15_10_IRQn,0,4);
    HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
    while(1)
          {
             HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);
             HAL_Delay(delay);
            HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);
            HAL_Delay(delay);
          }
}
void EXTI15_10_IRQHandler()
      {
            delay=336;
      }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
taizonglai
1楼-- · 2019-07-20 01:59
使用HAL库的时候一定不能在 中断里面调用HAL_Delay(),切记!因为HAL库中的HAL_Delay()是靠滴答定时器中断来完成的,而且滴答定时器的中断优先级是最低的。如果你在 某一个其他中断调用HAL_Delay()的话肯定会死到延时这里的,因为滴答定时器的中断被高优先级的给干死了。
夏清
2楼-- · 2019-07-20 04:36
zuozhongkai 发表于 2016-4-24 15:54
使用HAL库的时候一定不能在 中断里面调用HAL_Delay(),切记!因为HAL库中的HAL_Delay()是靠滴答定时器中断来 ...

为什么用开放板 提供的 Delay() 函数,不会出现这样的问题。 本质上 不是都用了滴答定时器?

没有使用中断是吧?就不会有中断优先级的问题?

一周热门 更多>