太原 网站建设公司,网站建设外包排名,龙岗区布吉街道防控措施,腾讯云购买域名后如何建网站目录 环形缓冲区在stm32上的使用前言实验目的环形缓冲区的定义和初始化写入数据到环形缓冲区从环形缓冲区读取数据实验结果本文中的实践工程 环形缓冲区在stm32上的使用
本文目标#xff1a;环形缓冲区在stm32上的使用
按照本文的描述#xff0c;应该可以跑通实验并举一反三… 目录 环形缓冲区在stm32上的使用前言实验目的环形缓冲区的定义和初始化写入数据到环形缓冲区从环形缓冲区读取数据实验结果本文中的实践工程 环形缓冲区在stm32上的使用
本文目标环形缓冲区在stm32上的使用
按照本文的描述应该可以跑通实验并举一反三。
先决条件装有编译和集成的开发环境比如Keil uVision5、STM32CubeMX
使用外设USART
前言
环形缓冲区是一种数据结构它允许在缓冲区中存储和检索数据而不需要进行复杂的索引管理。这在嵌入式系统中非常有用尤其是在处理串行通信时如使用 USART。以下是一个简单的指南可以帮助初学者开始使用环形缓冲区
实验目的
在stm32的平台上使用环形缓冲区在串口中断使用环形缓冲区来接收数据。
环形缓冲区的定义和初始化
首先您需要定义环形缓冲区的数据结构和初始化函数。这通常包括缓冲区本身、读写指针和缓冲区大小通常有4个要素 #define BUFFER_SIZE 1024 /* 环形缓冲区的大小 */
typedef struct
{unsigned char buffer[BUFFER_SIZE]; /* 缓冲区空间 */volatile unsigned int pW; /* 写地址 */volatile unsigned int pR; /* 读地址 */
} ring_buffer;void ring_buffer_init(ring_buffer *dst_buf)
{dst_buf-pW 0;dst_buf-pR 0;
}
写入数据到环形缓冲区
写入数据时您需要检查缓冲区是否已满并更新写指针。
void ring_buffer_write(unsigned char c, ring_buffer *dst_buf)
{int i (dst_buf-pW 1) % BUFFER_SIZE;if(i ! dst_buf-pR) // 环形缓冲区没有写满{dst_buf-buffer[dst_buf-pW] c;dst_buf-pW i;}
} 从环形缓冲区读取数据
读取数据时您需要检查缓冲区是否为空并更新读指针。
int ring_buffer_read(unsigned char *c, ring_buffer *dst_buf)
{if(dst_buf-pR dst_buf-pW){return -1;}else{*c dst_buf-buffer[dst_buf-pR];dst_buf-pR (dst_buf-pR 1) % BUFFER_SIZE;return 0;}
} 实验
基于以上的知识点我在串口2的中断进行接收数据在主函数中把接收的字符将其打印出来。
需要开启对应的中断 在接收回调函数中进行写环形缓冲区 在main.c中进行查询 结果 将stm32的串口2连接到上位机上位机随意发送一些字符可以观察到g_count的值在累计而且ring_buffer中的buffer值也在对应更新所以此次实验成功。希望给初学者一些启发后续有对应的场合时可以进行使用。
本文中的实践工程
https://download.csdn.net/download/weixin_44317448/88940588