1. HAL_Delay()函数的使用不当 HAL_Delay()函数依赖于SysTick定时器来计时。如果在SysTick中断处理函数(通常是SysTick_Handler)或其他优先级更高的中断处理函数中调用HAL_Delay(),可能会导致SysTick中断无法及时处理,进而使HAL_Delay()函数无法正常工作。 解决方案: 避免在中断处理函数中使用HAL_Delay()。 如果确...
使用stm32cubeProgrammer连接stm32 点左侧OB 配置nBOOT1=0 nSWBOOT0=0 nBOOT0=1(为0就卡在HAL_Delay) 我知道有些人本来就是这个设置,但是就是会卡住, 如果你本来就是这样设置,先反向设置一下保存然后再设置回来就可以
__weak void HAL_Delay(uint32_t Delay) { uint32_t tickstart = HAL_GetTick(); uint32_t wait = Delay; /* Add a freq to guarantee minimum wait */ if (wait < HAL_MAX_DELAY) { wait += (uint32_t)(uwTickFreq); } //卡在这个while函数里 while ((HAL_GetTick() - tickstart) < ...
而是在LED1亮起的时候就卡死了,原因是因为系统时钟设置里给滴答定时器的抢占优先级为15,所以在中断...
在HAL_Delay(PHY_RESET_DELAY);之前的调试信息能打印出来,它之后的就打印不出来了。把该延时函数注释,又能正常运行,直到遇到下一个HAL_Delay函数。 这里可以确定是HAL_Delay();延时函数导致卡死在这里了。 但是很不解,一个通用的HAL_Delay();函数,怎么就成了元凶?!
STM32使用HAL库,使用延时卡死的问题。 之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题。发现我使用库里的延时程序HAL_Delay()时,会卡死在里面。 根据程序,进入到这个延时程序后 ,发现HAL_GetTick()取来的数字一直没有变化,才发现是因为...
一是优先级的问题,我设置的优先级高于HAL_Delay的优先级造成一直在HAL_Delay中卡死,还有一种就是...
STM32CubeMX FreeRTOS HAL_Delay 卡死 FreeRTOS作为开源的轻量级实时性操作系统,不仅实现了基本的实时调度、信号量、队列和存储管理,而且在商业应用上不需要授权费。 FreeRTOS的实现主要由list.c、queue.c、croutine.c和tasks.c 4个文件组成。list.c 是一个链表的实现,主要供给内核调度器使用;queue.c 是一个...
Interrupt这一词是问题的关键,既然是中断,势必就有优先级,如果在中断里面HAL_Delay会卡死,而main函数则不会,那么有没有可能是Systick优先级太低造成的呢。带着这个问题我们回到STM32CubeMX中重新找到NVIC。 这时候我们注意到在默认使能的中断里面有一个System tick的中断,这就是给HAL_Delay函数提供时基的定时器...
使用HA_Delay()需要注意的情况 关于HAL_Delay()函数溢出问题的讨论 Systick 定时器延时原理 Systick(滴答时钟)是一个24位,向下计数的定时器,当倒计时完成后,定时器可以产生一个中断,所以,当频率一定,计数个数一定时,这个中断就会以一定的时间间隔发生,如果每个中断发送后调用的中断函数中给一个变量累加,这样我们就...