[STM32F1] HAL UART 中断接收用法

[复制链接]
92|49
hearstnorman323 发表于 2026-7-25 14:16 | 显示全部楼层
如何优化中断回调的触发机制?              
qiufengsd 发表于 2026-7-25 14:41 | 显示全部楼层
对于较大数据量,可结合DMA进行接收,利用DMA传输完成中断或半传输中断来处理数据,减少单片机干预,同时通过回调函数管理接收流程,避免重复调用中断接收函数导致的问题。
fengm 发表于 2026-7-25 15:01 | 显示全部楼层
若数据长度不固定,可采用单字节接收,每次接收完成后在回调中处理该字节,并立即重新启动单字节接收,确保中断持续触发。
bartonalfred 发表于 2026-7-25 16:04 | 显示全部楼层
初始化时就调用HAL_UART_Receive_IT,把接收长度设为1,每次收到1字节就自动进入接收完成回调。
macpherson 发表于 2026-7-25 17:07 | 显示全部楼层
调用HAL_UART_Receive_IT后,HAL库会自动把UART句柄的State标记为HAL_UART_BUSY_RX,此时硬件会自动使能RXNE接收中断,每收到1字节数据就触发中断服务程序,把数据存入你传入的接收缓存。
mollylawrence 发表于 2026-7-25 17:37 | 显示全部楼层
可在保证中断可靠性的前提下,高效处理不定长串口指令。
lzmm 发表于 2026-7-25 18:07 | 显示全部楼层
单字节接收如何避免数据溢出问题?
eefas 发表于 2026-7-25 18:29 | 显示全部楼层
在回调中将接收到的数据存入缓冲区,主程序定期从缓冲区读取并解析指令,分离中断处理与数据解析逻辑,提高稳定性。

loutin 发表于 2026-7-25 19:29 | 显示全部楼层
HAL_UART_Receive_IT() 函数在启动时会检查UART状态。如果在回调函数中,UART的状态因某些原因未能及时恢复为 READY,再次调用就会返回 HAL_BUSY 并导致卡死。
xixi2017 发表于 2026-7-31 10:33 | 显示全部楼层
HAL_UART_RxCpltCallback 单次中断:收指定长度 N 个字节进中断,适合定长数据包。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0