之前也遇到过这个问题后来把HAL_Delay 去掉了. 然后发现不行, 还是得有它.不然发串口数据发的太快会乱掉. 得慢点发. 然后调试到HAL_Delay()方法的内部发现 HAL_GetTick( )函数一直返回 __weak void HAL_Delay(uint32_t Delay) { uint32_t tickstart = HAL_GetTick(); uint32_t wait = Delay; /* A...
这段时间与用户设定的值(Delay)比较,如果大于就退出 HAL_Delay 函数,从而实现延迟。 出错原因 嘀嗒定时器的中断也受 NVIC 管理,也有优先级,而通过 keil 调试我们可以看到: 嘀嗒定时器(System Tick Timer)的中断优先级设置为 15,优先级非常低,所以在其他中断(例如串口接收中断)运行时,不会进入嘀嗒定时器的中断,导...
特定功能限制: 在某些特定功能方面,如 IAP (In-Application Programming) 功能中的扇区烧录,STM32CubeIDE 可能不如 Keil 等工具强大。 后期处理局限性: 在开发的后期阶段,尤其是在涉及到更复杂的项目管理和调试时,STM32CubeIDE 可能不如某些商用 IDE 方便。 综上所述,STM32CubeIDE 为 STM32 微控制器的开发提供...
SysTick_IRQn,0,0);/* 等待中断,由于使用中断方式,CPU不用轮询按键 */ while(1){ } } ...
是因为一般我们使用比如USB库,自动生成得这些里面还是使用HAL_Delay函数来进行延时,一般如果使用STM32官方推荐得FREERTOS就不用担心这个问题,因为官方已经直接适配好了,带RTOS得USB库。而我们使用得RTThread-Nano是没有适配得。所以当我使用得时候,发现一直卡死在这里 其中tickstart得值一直为0。而后... 查看原文 用...
之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题。发现我使用库里的延时程序HAL_Delay()时,会卡死在里面。 根据程序,进入到这个延时程序后 ,发现HAL_GetTick()取来的数字一直没有变化,才发现是因为 1 2 3 4 __weak uint32_t HAL_GetTick(void) ...
如果中断里调用HAL_Delay就会停在那里,因为根本不会进入那个级别更低的中断。 资料补充: 网上还有一种写 法是时间摘取法,是一直读取SysTick产生延时函数~(原子的例程就是用这种方法) 其次,有人提到,中断里面不应该使用延时,中断所占的时间越短越好~有道理~ ...
[自用防忘]关于各种stm32卡死在HAL_Delay的方法 使用stm32cubeProgrammer连接stm32 点左侧OB 配置nBOOT1=0 nSWBOOT0=0 nBOOT0=1(为0就卡在HAL_Delay) 我知道有些人本来就是这个设置,但是就是会卡住, 如果你本来就是这样设置,先反向设置一下保存然后再设置回来就可以...
由于SysTick是内核中断,优先级别默认最低,根本就不会去执行从而导致卡死在中断函数的延时步骤上,今天突然碰到这个BUG有点懵,发出来希望能帮到你。。