STM32卡在delay
时间: 2023-09-24 21:04:29 浏览: 51
在使用STM32的Hal库开发时,有时会遇到在中断中使用Hal_Delay()函数导致程序卡死的问题。这是因为Hal_Delay()函数是使用定时器实现的,并且它的定时器中断优先级为15,是最低的。为了解决这个问题,可以重新设置SysTick定时器中断的优先级。具体操作方式是使用HAL_NVIC_SetPriority函数来设置SysTick_IRQn中断的优先级为0,即最高优先级。这样就可以避免在中断中使用Hal_Delay()函数导致程序卡死的问题了。[1]
另外,有一些开发者也遇到了Hal_Delay()函数的问题。虽然延时的问题解决了,程序也不会卡死了,但是他们的LD3320模块却不能识别到声音。他们尝试了使用不同的例码和更换杜邦线,但都没有起作用。最后暂时的结论是模块可能出了问题,需要等待新的模块到来后再进行进一步的测试。[3]
相关问题
stm32调试卡在delay
如果你的 STM32 调试卡在 delay 函数时卡住了,可能是因为你在使用了 HAL 库的情况下,调用了 HAL_Delay 函数,但是 HAL_Delay 函数底层使用的是 SysTick 定时器中断,如果你没有正确配置 SysTick 定时器,就会导致 HAL_Delay 函数无法正常工作。
因此,你需要检查以下几个方面:
1. 确认 SysTick 定时器已经正确配置,并且使能了中断。
2. 检查 SysTick 中断是否被正确处理,在中断处理函数中需要清除中断标志位。
3. 确认你的时钟配置是正确的,SysTick 定时器的时钟源需要配置为 HCLK,如果时钟源配置错误,就会导致 SysTick 定时器无法正常工作。
4. 如果你使用了其他的延时函数,如 DWT 延时等,也需要确认其底层实现是否正确。
如果以上几点都没有问题,你可以尝试使用其他的延时函数进行测试。例如,你可以使用 TIM 定时器来实现延时,或者使用循环计数的方式来实现延时。
stm32卡死在hal_delay
如果STM32卡在`HAL_Delay()`函数上,可能是因为在调用`HAL_Delay()`函数时,中断被禁用或者优先级被设置得太高,导致`SysTick`中断无法被触发,从而导致`HAL_Delay()`函数一直阻塞在等待`SysTick`中断的位置上。可以通过检查`SysTick`中断是否被触发来确认这个问题。解决方法是在调用`HAL_Delay()`函数前确保中断处于使能状态,并且将当前任务的优先级降低到比`SysTick`中断的优先级低。