串口通信,在单片机的应用中使用很普遍,但大家有没有考虑到数据收发的时效性?
比如: 串口数据接收, 如果数据量过大, 很可能来不及处理这些数据, 因此需要把接收的数据存放到一个位置缓存, 待空闲时间处理, 防止接收的数据丢失; 环形缓冲区越大, 那么可以缓存的数据就越多, 这样就是以空间换时间的做法。
下面我们来讲讲:环形缓冲区(Ring Buffer)算法在单片机串口通信中的应用
此软件算法范例的编程步骤:
UART初始化, 打开串口发送和接收;
UART中断优先级配置NVIC;
环形缓冲区定义
环形缓冲区数据接收: 在串口中断中读取收到的数据到环形缓冲;
环形缓冲区数据发送: 在主程序中把环形缓冲区的数据发送给串口;
主要源码如下:
#define RINGBUFF_LEN 200 //定义最大接收字节数
#define FLASE 1
#define TRUE 0