推荐一个高效、可靠、安全的串口通讯开源方案
创作时间:
作者:
@小白创作中心
推荐一个高效、可靠、安全的串口通讯开源方案
引用
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创建,建议读者搭建相应的开发环境进行实践。
热门推荐
手动挡堵车技巧:如何正确使用离合器,保护车辆和安全?
游戏“发癫式”商战背后,是行业深深的流量焦虑
张天宇/马竞/涂召旭团队开发多功能纳米片,治疗脓毒症中炎症相关凝血病
自制牛肉干:健康美味的小零食制作指南
魔兽世界TBC炼金1-375最省材料攻略
每秒钟飞行600千米,科学家发现银河系在高速移动,要带人类去哪
哪里有免费的国学课程培训资源?
属蛇的人佩戴蛇形饰品?探讨其适宜性和禁忌
哪吒,悟空化了?·从剔骨还父到逆天改命
航空服务专业就业前景发展分析
中国34个省级行政区面积,与哪些国家相当?
法拍房激增!年轻人无首付买房后为何断供?
Excel施工日志管理完整指南:从基础设置到自动化报告
探究明清两朝官员清廉与贪腐之变,是什么原因导致的?
“AI创业项目仍在寻找市场的认可度”
游戏本4070 vs 4060,对比实测:前者到底强多少?
如何diff数据库数据
选择困难症终结者:UC九校优势专业与录取偏好要点全览!找到最适合你的大学!
注重课外阅读 提高学生阅读素养
解密:三国历史中常被人忽视的顶级谋士李儒
你所不知道的Z世代:青年世代崛起
产后免疫力多久恢复?
企业消防安全管理有哪些新策略?
超全面讲透一个算法模型,XGBoost!!
鼻中隔偏曲手术后遗症及护理指南
穿搭有范 |女人过了40岁,劝你穿“裙子”要避开这3个雷区,容易显胖还邋遢
同样是藩镇割据,为什么盛唐一去不复返,而罗马却焕发第二春?
Gmsh 和 FiPy 求解稳态圆柱绕流
养老保险中断会有哪些影响?如何避免?一断毁所有,持续是关键!
为什么你穿衣总是「土里土气」?!学会5个高级感穿搭元素,瞬间提升衣品美出质感~