ST意法半导体
直播中

吴湛

9年用户 935经验值
擅长:可编程逻辑
私信 关注
[问答]

HAL_UART_Transmit_IT阻塞如何立即返回?

我正在使用带有 USART1 的 STM32CubeIDE + STM32F103C8T6 MCU。我通过调用这个函数来传输数据:
  • HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)
该函数由 CubeIDE 生成。事实证明,此调用会阻塞,直到发送完最后一个字符。我发现阻塞的是此函数中的以下行:
  • __HAL_UART_ENABLE_IT(huart, UART_IT_TXE);
HAL_UART_TxCpltCallback 在 HAL_UART_Transmit_IT 返回前几微秒被调用。
为什么会发生这种情况的任何想法?我希望 HAL_UART_Transmit_IT 立即返回,而传输数据应该在后台完成。









回帖(1)

刘琪琛

2023-1-10 10:11:30
你的波特率很高。字符之间有大约 10us,这可能不足以让 IRQ 处理程序完成,但如果您的时钟设置已最大化,它应该足够了。将波特率降低一个数量级。如果仍然阻塞,则以相同的方式检测 HAL_UART_IRQHandler 以查看它需要多长时间以及它被阻止的位置和/或确认这实际上是阻塞执行的原因。
“G”和“H”字符之间的小延迟表明您的 IRQ 处理程序几乎跟不上提供外围数据的速度。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分