0x00020001
embedded
communication_error
ai_generated
true
UART:CTS流控制超时,USART2上传输停滞
UART: CTS flow control timeout, transmission stalled on USART2
ID: embedded/uart-cts-flow-control-timeout
89%修复率
84%置信度
1证据数
2023-08-14首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| STM32F405 HAL 1.8.0 | active | — | — | — |
| Zephyr RTOS 3.6.0 | active | — | — | — |
根因分析
UART CTS(清除发送)线被远程设备拉高或因硬件故障卡住,导致发送器无限期等待。
English
UART CTS (Clear to Send) line held high by remote device or stuck due to hardware fault, causing transmitter to wait indefinitely.
官方文档
https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-l4-series-reference-manual-stmicroelectronics.pdf解决方案
-
Implement CTS timeout in firmware: if (HAL_UART_GetState(&huart2) == HAL_UART_STATE_BUSY_TX) { HAL_UART_Abort(&huart2); HAL_UART_Transmit_IT(&huart2, pData, Size); } -
Add a pull-down resistor on CTS line to force low in case of floating signal; measure CTS voltage with oscilloscope.
无效尝试
常见但无效的做法:
-
75% 失败
Disabling hardware flow control entirely may cause data loss; it is not a fix for CTS timeout but a workaround that changes protocol.
-
90% 失败
Increasing UART baud rate does not resolve CTS line stuck high; the issue is external signal, not internal timing.