嵌入式开发中高效,可靠,安全的串口通讯开源方案

出处:小麦大叔 发布于:2022-12-05 16:13:29

    在嵌入式开发中,经常会用到串口通讯。面对不同应用场景,需要不同的方案。
    今天我们来讲一下高效,可靠,安全的方案,记得看到,会有收获。
    常见的有串口轮询模式,串口中断模式,串口DMA接收传输等等;
    利用串口的空闲中断配合DMA的环形缓冲区模式,可以高效接收不固定长度的消息报文
    下图中经过黄色的高电平时间空闲之后,就会产生一个空闲事件,IDLE EVENT

  

    空闲信号
    因为DMA功能有HC和TC中断;
    HC  (Harf Complete)DMA传输一半成功标志;
    TC   (Total Complete)  DMA传输完成成功标志;
    举个例子;
    如下图所示,这里分配了一个DMA缓冲区,大小是12字节,如果从地址1开始接收,会出现以下这两种情况;
    DMA接收到第6个字节的时候,会触发HC事件;
    DMA接收到第12个字节的时候,会触发TC事件;

    

    HC TC
    这个思路其实我之前也有实践过,但是没有很好地利用HC和TC事件。
    所以无法处理这种情况,即DMA缓冲区处于环形模式(Circular)的时候,数据覆盖的问题,近看到了一个非常棒的开源项目,这里的思路非常不错,下面会详细介绍。
    下面是DMA HC/DMA TC/Idle组合进行串口接收的细节,如下图所示;

    

    来自原项目
    再次简单介绍一下缩略词的含义;
    R 读取;
    W 写入;
    I 空闲信号;
    HT Half-Transfer complete DMA缓冲区半传输完成;
    TC Transfer-Complete DMA缓冲区全部接收完成;
    这里简单介绍一下情况E的解决方案,上面图片右边小图;
    缓冲区大小20格,这里假设20字节,情况E需要接收30个字节,也就是说,10字节可能会被覆盖;
    经过前面的四次接收后,串口继续从字母R处接收数据至DMA缓冲区;
    接收4字节时,会触发TC事件,这时候可以将4字节数据处理;

 

    步
    因为是环形模式,所以回到个字节处,继续接收10字节,触发HT事件,这时候可以处理10字节数据;

  

    第二步
    第三步,继续接收10字节,触发TC事件,其中,已经有4字节被覆盖(下图橙色所示),因为之前这部分数据已经处理了,所以,即使覆盖也不影响;

    

    第三步
    第四步,上述已经接收了24个字节,所以还有6个字节没有接收,后面接收会产生空闲信号,并对之前的数据区域进行覆盖,如下图示所示;图片
    所以,不难发现,如果只使用空闲中断,如果需要接收的数据长度大于缓冲区,就会出现数据覆盖的情况,而加上DMA的HT和TC中断,就完美解决了这样的问题;
    当然除了这些,还有很多的方案,这个项目提供大量的例子。
    项目地址:https://github.com/MaJerle/STm32-usart-uart-dma-rx-tx

  

    项目主页
    目前这个项目主要支持主流的STM32芯片平台和一些开发板上的测试DEMO,具体如下所示;

  

    支持平台
    相应的例子程序如下所示,除了裸机程序,还有环形缓冲区接收,轮询接收,DMA+空闲中断基于RTOS的模式接收,挺丰富的,可以参考一下;

    

    例子程序
    作者在 STM32F413-Nucleo 开发板进行程序的测试,发现优化效果很不错;
    在115200的串口波特率下,每秒发送1581个字节,大约142ms;
    不使用DMA,CPU负载14%;
    使用DMA,CPU负载0%;
    ,这个项目目前是基于STM32CubeIDE创建的,记得搭建一下环境。
关键词:嵌入式

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!