推荐一个高效、可靠、安全的串口通讯开源方案
创作时间:
作者:
@小白创作中心
推荐一个高效、可靠、安全的串口通讯开源方案
引用
CSDN
1.
https://blog.csdn.net/u010632165/article/details/143949205
在嵌入式开发中,串口通讯是一个常见的需求。本文将介绍一种高效、可靠且安全的串口通讯方案,通过串口的空闲中断配合DMA的环形缓冲区模式,可以实现对不固定长度消息报文的高效接收。
在嵌入式开发中,串口通讯是一个常见的需求。面对不同应用场景,需要不同的方案。本文将介绍一种高效、可靠且安全的串口通讯方案,通过串口的空闲中断配合DMA的环形缓冲区模式,可以实现对不固定长度消息报文的高效接收。
串口通讯常见模式
常见的串口通讯模式有轮询模式、中断模式和DMA模式等。其中,DMA(直接内存访问)模式可以显著降低CPU的负载,提高数据传输效率。
DMA与空闲中断结合方案
利用串口的空闲中断配合DMA的环形缓冲区模式,可以高效接收不固定长度的消息报文。当串口接收到空闲信号(IDLE EVENT)时,会触发相应的中断处理。
DMA中断机制
DMA功能包含两种中断:
- HC(Half Complete):DMA传输一半成功标志
- TC(Total Complete):DMA传输完成成功标志
环形缓冲区模式
假设分配了一个12字节的DMA缓冲区,从地址1开始接收数据:
- 当DMA接收到第6个字节时,会触发HC事件
- 当DMA接收到第12个字节时,会触发TC事件
环形缓冲区数据覆盖问题解决方案
在环形模式下,如果需要接收的数据长度大于缓冲区大小,就会出现数据覆盖的问题。下面介绍一种解决方案:
假设缓冲区大小为20字节,需要接收30个字节的数据:
- 接收4字节时,触发TC事件,处理这4字节数据
- 回到缓冲区起始位置,继续接收10字节,触发HT事件,处理这10字节数据
- 继续接收10字节,触发TC事件,此时前4字节已被覆盖,但因为之前这部分数据已经处理过,所以不影响
- 最后接收6个字节,产生空闲信号
通过结合使用空闲中断和DMA的HT/TC中断,可以完美解决数据覆盖问题。
开源项目案例
推荐一个优秀的开源项目:stm32-usart-uart-dma-rx-tx。该项目主要支持主流的STM32芯片平台,并提供了丰富的测试DEMO和示例程序,包括:
- 裸机程序
- 环形缓冲区接收
- 轮询接收
- DMA+空闲中断基于RTOS的模式接收
在STM32F413-Nucleo开发板上的测试结果显示,在115200波特率下,每秒发送1581个字节(约142ms):
- 不使用DMA时,CPU负载为14%
- 使用DMA时,CPU负载为0%
这个项目基于STM32CubeIDE创建,建议读者搭建相应的开发环境进行实践。
热门推荐
欠款十多万能起诉吗?如何维护自己的权益
扬州个园:园林艺术中的“四季”奇观
皮肤受伤怎么办?一文详解伤口护理与疤痕预防
北大医院专家:这样处理伤口才能避免感染
湖南光琇医院专家详解:伤口护理的科学方法与常见误区
冬季防疫必备:水银体温计正确使用指南
水银温度计:从华氏发明到现代替代
2850处石窟寺的守护者:川渝村民用平凡守护不凡
莫高窟领衔四大石窟,展现千年佛教艺术魅力
初中同学聚会:怀旧话题与轻松氛围的完美结合
立冬前后,不少中青年人开始“花式养生”,专家提醒这些误区要当心
《黄帝内经》:什么是中医养生?至少包括七个基本原则
TikTok等短视频平台如何影响大脑?专家揭示长期使用危害
宁波驾驶证换证指南:材料齐全当天可取
从牛排到冰淇淋:意大利黑醋的创意料理全攻略
掌握这七招,让高中生活既高效又快乐
5G+AI打造智慧校园,个性化教学助力学生成长
【蔬菜烹饪技巧】蔬菜烹饪方式大比拼 小技巧帮你做出营养鲜嫩可口菜
6个月以下幼犬易感染犬瘟热,四联疫苗接种是预防关键
奥美拉唑治疗慢性胃炎:缓解症状与根除Hp双管齐下
红薯调理慢性胃炎:三种食谱助力养胃护胃
十一自驾游广西:南宁到桂林经典路线全攻略
拉肚子时,电解质水真能帮忙吗?
运动+饮食+心理:科学减肥的正确打开方式
433饮食法:50%蔬菜+40%蛋白,这样吃既能减肥又健康
从心理学角度破解减肥拖延:建立有效奖励机制
哺乳期必备:猪蹄汤和鲫鱼汤真的有用?
解密摩德纳香醋:12年陈酿打造的意式调味精华
宋江的领导力:梁山泊从兴盛到衰败的启示
1998版《水浒传》:一部承载时代记忆的经典之作