__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) < ...
TIMEOUT_VALUE的值是否合适。如果超时值设置得太小,可能会导致程序在启动时等待外部时钟的过程中卡死。
发现我使用库里的延时程序HAL_Delay()时,会卡死在里面。 根据程序,进入到这个延时程序后 ,发现HAL_GetTick()取来的数字一直没有变化,才发现是因为 1 2 3 4 __weak uint32_t HAL_GetTick(void) { returnuwTick; } 程序中的值没有变化,搜uwTick后发现,其值由另一个程序进行处理, __weakvoidHAL_IncTick...
12__weak void HAL_Delay(uint32_t Delay)13{ 14 uint32_t tickstart = HAL_GetTick();15 ...
29.return HAL_ERROR; 30.} 31.} 32. 33./* Process Locked */ 34.__HAL_LOCK(huart); 35. 36.huart->ErrorCode = HAL_UART_ERROR_NONE; 37.huart->RxState = HAL_UART_STATE_BUSY_RX; 38. 39./* Init tickstart for timeout managment*/ 40.tickstart = HAL_GetTick(); ...
tickstart = HAL_GetTick(); //这里每次在发送前拿到systick中断中的计数值,作为计数的初值。huart-...
插上仿真器进一步跟踪后,发现死的位置是在if((Timeout == 0) || ((HAL_GetTick() - tickstart) > Timeout))这一句里,还不是if里面的语句,也就是在判断的时候出现了卡死。所以应该是在运行HAL_GetTick()这个函数里出现的卡死,这是为什么呢?等大神、、、 2019-1-17 07:13:13 评论 举报 余彦 ...
STM32之HAL库串口USART丢数据及ORE卡死的解决方案 刚装了VS2019Preview,VS2017系列应该还有最后一章就结束了,找个时间结束掉它。 昨晚弄了下STM32的串口通信,发现UART在接收PC串口调试助手发送的数据的时候,会时不时卡死,不能接收新的数据。之前公司有人做这方面的项目的时候也是这个情况,当时发现UART处于ORE(overru...
在STM32的HAL库编程中,尽管HAL_Delay和HAL_GetTick提供了一定程度的延时和计时功能,但它们并不满足所有精确延时需求,特别是在微秒级别。HAL_Delay在中断中的使用可能会导致程序卡死,因为中断A可能会影响系统滴答定时器的正常工作。为了解决这个问题,有几种替代方法。首先,可以使用getCurrentMicros()函数...
uint8_t time = HAL_GetTick(); while(hcdc->TxState != 0){ if(HAL_GetTick() - time > 1000){ return result; } } /* USER CODE END 12 */ return result; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.