推荐一个高效、可靠、安全的串口通讯开源方案
创作时间:
作者:
@小白创作中心
推荐一个高效、可靠、安全的串口通讯开源方案
引用
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创建,建议读者搭建相应的开发环境进行实践。
热门推荐
顺德美食“出圈”记:一个“世界美食之都”的品牌蝶变
粤菜发源地顺德:老字号美食的传承与创新
SPO2监测:重症监护中的“生命哨兵”
血氧仪火爆背后:SPO2的健康密码
银耳富含膳食纤维和钾,是三高人群的理想食材
昆明东大肛肠医院陈主任:科学饮食预防胀气
小心!这些食物让你胀气连连
张仲景的千年古方:两味中药解决胀气困扰
金骏眉:送礼首选的红茶贵族
祁门红茶:一片叶子的百年传奇
西湖龙井:高档茶叶选购与冲泡全攻略
高质量陪伴+独立追求:蔡少芬育儿观引发社会热议
三星堆文创馆入驻天府动漫城,打造文旅融合新地标
大兴临空区牵手中国民航大学,共推低空经济创新
杭州临空经济示范区:交通升级助力打造世界级枢纽
激光祛斑后能否食用鸭肉?专家详解饮食注意事项
从饮食到护理:专家详解安全有效祛斑全攻略
中药紫菀:镇咳祛痰功效显著,使用禁忌需遵医嘱
毫米波雷达赋能智能照明,精准感知打造便捷生活
南极仙翁的养生秘诀:传统智慧与现代科学的对话
乾隆的长寿秘诀,你也能学到!
彭祖赵佗的长寿秘籍,你get了吗?
2025考研政治难度飙升,考生该如何应对?
权威、专制、放任:三种教养方式影响孩子心理健康
过度保护反伤娃:专家解析家庭教育中的控制与自由
别让爱变成伤害:过度控制型父母的六大误区与对策
886工作制:每天工作12小时、每周休1天的职场模式
886工作制利弊谈:如何平衡员工权益与企业发展
成都三日精华游:青羊宫悟道,武侯祠怀古,锦里寻味
数学符号 vs 英文单词:谁更能表达“最大”