TIMEOUT_VALUE的值是否合适。如果超时值设置得太小,可能会导致程序在启动时等待外部时钟的过程中卡死。
__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) < ...
发现我使用库里的延时程序HAL_Delay()时,会卡死在里面。 根据程序,进入到这个延时程序后 ,发现HAL_GetTick()取来的数字一直没有变化,才发现是因为 1 2 3 4 __weak uint32_t HAL_GetTick(void) { returnuwTick; } 程序中的值没有变化,搜uwTick后发现,其值由另一个程序进行处理, __weakvoidHAL_IncTick...
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(); ...
我查了一下,是卡在SystemClock_Config()这一段里出不来,具体就是卡在if((HAL_GetTick() - tick...
tickstart = HAL_GetTick(); //这里每次在发送前拿到systick中断中的计数值,作为计数的初值。huart-...
STM32之HAL库串口USART丢数据及ORE卡死的解决方案 刚装了VS2019Preview,VS2017系列应该还有最后一章就结束了,找个时间结束掉它。 昨晚弄了下STM32的串口通信,发现UART在接收PC串口调试助手发送的数据的时候,会时不时卡死,不能接收新的数据。之前公司有人做这方面的项目的时候也是这个情况,当时发现UART处于ORE(overru...
GetTick()是HAL函数中的一个函数,用于获取系统滴答定时器的当前计数值。滴答定时器是STM32微控制器上的一个硬件定时器,它以固定的时间间隔递增计数器的值。通过调用GetTick()函数,开发人员可以获取当前系统的运行时间,通常以毫秒为单位。 使用GetTick()函数可以实现一些时间相关的功能,例如延时、定时器、任务调度等。
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)...
hspi->RxXferCount--;//}}if((Timeout != HAL_MAX_DELAY) && ((HAL_GetTick()-tickstart) >=Timeout)) { errorcode=HAL_TIMEOUT;gotoerror; } } 问题就解决了。具体原因似乎是因为 hspi->Instance->DR = *((uint16_t*)hspi->pTxBuffPtr); ...