在裸机环境中,多UART并发收发的核心挑战是避免字节丢失,状态机是优雅解法的关键。建议采用分层状态机:每路UART独立维护一个接收状态机(IDLE→START→DATA→STOP→PARITY),在UART中断服务程序(ISR)中仅做最小化操作——将接收到的字节直接存入该UART的环形缓冲区,并更新状态机的状态索引。发送侧则使用发送状态机(IDLE→SEND→WAIT_TX_EMPTY),在主循环中轮询各UART的发送状态,若缓冲区非空且发送空闲,则取字节写入数据寄存器。为避免丢失,务必开启UART的FIFO(若硬件支持)并设置合适的触发阈值,同时确保环形缓冲区大小覆盖中断延迟峰值。主循环中,状态机统一调度,按优先级或时间片轮询处理各UART的收发任务,避免阻塞。实操建议:用结构体数组管理每路UART的缓冲区、状态变量和配置参数,便于扩展;ISR中禁用嵌套中断或使用临界区保护缓冲区索引,防止竞态。
mcuku 阿沐 · 2026-08-27