__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 ...
delay time length, in milliseconds. * @retval None */__weakvoidHAL_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((HAL_GetTick()-tickstart)<wait)...
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(); ...
(Delay); } HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority) { return HAL_OK; } uint32_t HAL_GetTick (void) { static uint32_t ticks = 0U; uint32_t i; if (osKernelGetState () == osKernelRunning) { return ((uint32_t)osKernelGetTickCount ()); } /* 如果RTX5还没有...
STM32之HAL库串口USART丢数据及ORE卡死的解决方案 刚装了VS2019Preview,VS2017系列应该还有最后一章就结束了,找个时间结束掉它。 昨晚弄了下STM32的串口通信,发现UART在接收PC串口调试助手发送的数据的时候,会时不时卡死,不能接收新的数据。之前公司有人做这方面的项目的时候也是这个情况,当时发现UART处于ORE(overru...
tickstart = HAL_GetTick(); //这里每次在发送前拿到systick中断中的计数值,作为计数的初值。huart-...
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.