加了HAL_Delay就不运行了,为什么
时间: 2024-03-30 15:33:56 浏览: 11
HAL_Delay函数会阻塞当前线程的执行,直到延时时间结束。如果在中断回调函数中调用了HAL_Delay函数,会导致当前中断被阻塞,无法继续执行。这可能会导致系统出现不可预期的错误或死锁。
因此,不建议在中断回调函数中使用HAL_Delay函数。如果需要延时操作,可以使用定时器或其他非阻塞的方法来实现。
相关问题
HAL_Delay用法
HAL_Delay是HAL库中提供的延时函数,用于在单片机中实现延时操作。根据引用[1]和引用[2]的内容,当我们重写了基于systick的延时函数后,HAL_Delay就不再适用,因为两者不能同时使用。如果在程序中仍然存在HAL_Delay函数的调用,程序不会报错,但在单片机运行时会卡在这里。
需要特别注意的是,在中断中使用HAL_Delay函数会导致程序异常,原因是HAL_Delay函数使用了滴答定时器的中断。如果在高于滴答定时器中断的中断函数中使用HAL_Delay函数,程序将会锁死在HAL_Delay函数内部的while循环中,无法跳出函数。这是因为滴答定时器无法被重新调用,导致HAL_Delay函数无法正常退出。这一点在引用[3]中有详细说明。
因此,使用HAL_Delay函数时需要注意以下几点:
1. 不要同时使用基于systick的延时函数和HAL_Delay函数。
2. 避免在中断中使用HAL_Delay函数,以防止程序异常和死锁的情况发生。
综上所述,HAL_Delay函数的使用需要遵循以上的注意事项。
HAL_Delay在运行的时候会被中断打断 吗
是的,HAL_Delay函数在运行的时候会被中断打断。当一个中断请求发生时,如果中断的优先级高于当前任务的优先级,那么中断服务函数会被立即执行,执行完后再回到原来的任务继续执行。因此,如果在调用HAL_Delay时发生了中断,则HAL_Delay函数会被中断打断,处理完中断后会继续执行HAL_Delay函数。但是需要注意的是,如果中断的优先级高于HAL_Delay函数所在的任务,则会先处理中断,而不会继续执行HAL_Delay函数。因此,在使用HAL_Delay函数时,需要合理设置中断优先级,以确保程序的正确性。