单片机串口FIFO常见收发方式

💡 原文中文,约5900字,阅读约需14分钟。
📝

内容提要

本文介绍了如何利用带有FIFO的串口来减少接收中断次数,并通过自定义通讯协议格式提供帧打包方法。同时介绍了一种特殊的串口数据发送方法,以提高系统的响应速度。文章还提供了具体的代码实现。

🔎

延伸解读

接收FIFO触发级别的选择

文章指出接收FIFO触发级别可设为1、2、4、8、14字节,推荐使用8或14字节。提高触发级别能显著减少中断次数,但也会增加单次中断处理的数据量,可能影响实时性。读者需根据实际数据量和响应要求权衡,并参考具体芯片数据手册确认支持的范围。

自定义帧格式的解析要点

文章给出的协议帧包含帧首、地址、命令、长度、数据和校验。解析时需注意:帧首通常为3~5个0xFF或0xEE,长度字段位于固定偏移(如第7字节),且帧总长不超过256字节。代码中通过状态机寻找帧首并计算帧长,若长度超出缓存则截断,实际应用需处理这种异常。

定时器发送方法的适用条件

利用定时器中断和发送FIFO发送数据,可避免等待发送浪费CPU,也不增加发送中断。但文章明确该方法不适用于未开定时器中断或定时器间隔长而波特率高的场景。例如,定时器间隔10ms以下可满足1200bps、2400bps,1ms以下可支持115200bps。读者需根据自身波特率和定时器配置评估可行性。

❓

Q&A

什么是串口FIFO,它的作用是什么?

串口FIFO是串口专用的缓存,采用先进先出方式,能够减少接收中断次数,提高发送效率。

如何通过FIFO减少串口接收中断次数?

可以将接收FIFO的触发级别设置为8或14字节,这样每接收8或14个字节才会产生一次中断,从而减少中断次数。

自定义通讯协议格式的基本结构是什么?

自定义通讯协议格式通常包括帧首、地址号、命令号、长度、数据和校验等部分。

如何实现高效的数据发送?

可以利用定时器中断和硬件FIFO进行数据发送,避免CPU资源浪费,同时不增加中断源。

使用FIFO的串口有什么优势?

使用FIFO的串口可以减少中断次数,降低CPU资源浪费,提高系统的整体响应速度。

在串口通信中,如何定义数据结构以打包数据?

可以定义一个结构体,包含指向接收缓存、帧首标志、已接收字节数等字段,以便于打包数据。

🏷️

标签

➡️

继续阅读