__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) < ...
stm32程序卡死在if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE),该怎么解决啊 ...
发现我使用库里的延时程序HAL_Delay()时,会卡死在里面。 根据程序,进入到这个延时程序后 ,发现HAL_GetTick()取来的数字一直没有变化,才发现是因为 1 2 3 4 __weak uint32_t HAL_GetTick(void) { returnuwTick; } 程序中的值没有变化,搜uwTick后发现,其值由另一个程序进行处理, __weakvoidHAL_IncTick...
使用HAL库时,不能在中断里调用HAL_GetTick(),不然会一直循环出不来 比如使用在定时器中断里使用阻塞的串口发送/接收函数 不要在中断函数里使用阻塞的串口、I2C、SPI发送/接收函数 会卡在如图所示的地方一直while 2023.7.1 发现是中断优先级问题 Timebase source的中断优先级一定要高于其他,这样才能在中断里使用delay...
STM32使用HAL库,使用延时卡死的问题。 2019-12-12 20:18 −之前一直使用标准库的,现在转到HAL库来后,编写了第一个程序就遇到了问题。发现我使用库里的延时程序HAL_Delay()时,会卡死在里面。 根据程序,进入到这个延时程序后 ,发现HAL_GetTick()取来的数字一直没有变化,才发现是因为 __weak uint32_t HAL...
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(); ...
在STM32的HAL库编程中,尽管HAL_Delay和HAL_GetTick提供了一定程度的延时和计时功能,但它们并不满足所有精确延时需求,特别是在微秒级别。HAL_Delay在中断中的使用可能会导致程序卡死,因为中断A可能会影响系统滴答定时器的正常工作。为了解决这个问题,有几种替代方法。首先,可以使用getCurrentMicros()函数...
1、串口的使用方法 在hal库中,有三个串口发送的函数 a、HAL_StatusTypeDef HAL_UART_Transmit_DMA(...
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.
关于STM32 hal库SPI的一个BUG 具体bug点在HAL_SPI_TransmitReceive这个函数里面。具体表现是莫名其妙会进入hardfault,但是,也不排除直接debug跑死没反应的情况。 因为在最初的时候,程序调试异常都是直接调试卡死。这其中的具体原因还没搞清楚。 既然是bug,那肯定是满足了一定条件下的错误。但是很遗憾,具体条件我没...