当前位置: 首页 > news >正文

STM32 环形串口队列程序:大数据串口收发的神兵利器

STM32环形串口队列程序 大数据串口收发 实时不丢包 串口程序平常产品开发中编写或移植的程序并亲自测试通过,均为工程文件格式,可直接编译使用。 该程序为大数据量吞吐的串口收发例程,中断接收,边收边发,采用大数据环形队列,处理过程超快不丢包,接收buffer可以定义成2K,4K,8K均可。 也可以用到其余单片机上

在平常的产品开发中,串口通信是极为常见的需求。特别是当涉及大数据量吞吐时,保证实时性且不丢包就成了关键挑战。今天就来分享一款我亲自编写并测试通过的 STM32 环形串口队列程序,以工程文件格式呈现,能直接编译使用,并且还能轻松移植到其他单片机上哦。

中断接收:高效的开始

首先,采用中断接收的方式是这个程序高效运行的基础。在 STM32 中,我们可以通过配置 NVIC(Nested Vectored Interrupt Controller)来使能串口中断。下面是一段简单的使能串口 1 中断的代码示例:

// 使能串口1中断 NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);

这里我们设置了中断通道为 USART1 的中断,并且给了它较高的抢占优先级和子优先级,确保串口中断能及时响应。

大数据环形队列:核心奥秘

环形队列是这个程序的核心所在,它就像一个智能的存储环,能高效地处理大数据。我们可以根据需求将接收 buffer 定义成 2K、4K 或者 8K。下面看看环形队列的数据结构定义:

#define RX_BUFFER_SIZE 2048 // 这里以2K为例 typedef struct { uint8_t buffer[RX_BUFFER_SIZE]; volatile uint16_t head; volatile uint16_t tail; } RingBuffer; RingBuffer rxRingBuffer;

在这个结构里,buffer就是我们的环形存储区域,head表示新数据写入的位置,tail表示数据读出的位置。

当有数据通过串口中断接收进来时,我们这样处理:

void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET) { uint8_t data = USART_ReceiveData(USART1); uint16_t nextHead = (rxRingBuffer.head + 1) % RX_BUFFER_SIZE; if (nextHead!= rxRingBuffer.tail) { rxRingBuffer.buffer[rxRingBuffer.head] = data; rxRingBuffer.head = nextHead; } USART_ClearITPendingBit(USART1, USART_IT_RXNE); } }

代码中,先读取串口接收到的数据data,然后计算下一个head位置nextHead。如果下一个head位置不等于tail,说明队列还有空间,就把数据存入buffer并更新head。这样即使数据连续快速到来,也能有条不紊地存储。

边收边发:流畅的流转

边收边发功能让串口数据能快速处理并转发出去。在主循环中,我们可以这样实现:

int main(void) { // 初始化代码... while (1) { if (rxRingBuffer.head!= rxRingBuffer.tail) { uint8_t data = rxRingBuffer.buffer[rxRingBuffer.tail]; rxRingBuffer.tail = (rxRingBuffer.tail + 1) % RX_BUFFER_SIZE; USART_SendData(USART1, data); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); } } }

这里,只要环形队列中有数据(head不等于tail),就取出数据data并通过串口发送出去,同时更新tail。等待发送完成标志TXE置位,确保数据发送成功。

这个 STM32 环形串口队列程序,凭借中断接收、大数据环形队列以及边收边发的特性,在大数据串口收发场景下表现出色,真正做到实时不丢包。而且它易于移植到其他单片机上,希望能在大家的项目开发中发挥作用!

http://www.rkmt.cn/news/153427.html

相关文章:

  • 2025全钢实验台厂家推荐 产能专利环保三维度权威测评 - 爱采购寻源宝典
  • 靠谱的台球杆定制店与优质品牌推荐
  • 卫星遥控遥测可视化开源方案
  • 消息队列--消息顺序性保障
  • 2025最新!8个AI论文平台测评:继续教育写论文不再难
  • 实力强的腾讯广告专业服务商推荐,为品牌营销保驾护航
  • 算力饱和打击:无人机蜂群的实时三维重建如何碾碎战场迷雾 - 品牌2025
  • 新手必看!2025年公众号编辑器选购指南:从入门到精通的效率工具盘点
  • ProfiNet 转 CAN 网关靠谱供应商推荐:塔讯技术
  • 破壁单机桎梏:软硬协同解锁无人机集群的全域无死角、秒级定战场能力 - 品牌2025
  • DNS劫持全解析:原理、危害与防御实战指南
  • 解锁显著小红书聚光效果,开启引流新征程
  • 靠谱的ProfiNet转CAN网关供应商推荐
  • 三分钟内快速完成MySQL到达梦数据库的迁移 - 指南
  • 如何开假医院诊断证明
  • 2025年12月成都混凝土切割、混凝土拆除、钻孔混凝土切割、业楼梯切割拆除、桥梁墙体钻孔切割服务商深度测评与推荐报告 - 2025年品牌推荐榜
  • 实力强的企业展厅设计专业公司推荐:有名品牌,打造高性价比展厅
  • 2025年小红书聚光引流推荐及优化培训推荐,5大出色服务商年度排名解析
  • 2025最新!自考党必看8款AI论文软件测评对比
  • 2025孔网钢带聚乙烯复合管厂家TOP3推荐:聚焦技术创新与品质保障 - 深度智识库
  • 探寻优质陶瓷卫浴品牌供应商,彩诺卫浴成靠谱之选
  • 2025年PSP管厂家最新推荐报告:陕西保亿PSP管领域的创新引领者 - 深度智识库
  • 2025商务与品质场景靠谱酱香型白酒厂家推荐 - 资讯焦点
  • 2025年终盘点:单波长高精度X射线荧光光谱仪品牌推荐/厂家推荐 - 品牌推荐大师1
  • 盘点2025年口碑炸裂的本地老火锅店,重庆火锅/火锅店/美食/特色美食/老火锅/川渝火锅/火锅老火锅品牌推荐 - 品牌推荐师
  • 3家靠谱EMC培训企业推荐,快速提升你的电磁兼容技能! - 速递信息
  • 2025 年 12 月发电机组厂家实力推荐:柴油 / 燃气 / 静音 / 移动拖车 / 集装箱式,上柴 / 玉柴 / 潍柴 / 康明斯适配之选 - 深度智识库
  • 陶瓷卫浴工厂:行业优势与优质之选
  • 2025 螺栓厂家推荐 产能质量服务三维度权威测评 - 爱采购寻源宝典
  • 2025数字展厅服务商TOP5权威推荐:盛世笔特集团专业吗?