0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式开发中串口通讯方案

小麦大叔 来源:小麦大叔 作者:小麦大叔 2022-05-23 11:48 次阅读

大家好,我是小麦。

嵌入式开发中,经常会用到串口通讯。面对不同应用场景,需要不同的方案。

今天我们来讲一下高效,可靠,安全的方案,记得看到最后,会有收获。

常见的有串口轮询模式,串口中断模式,串口DMA接收传输等等;

利用串口的空闲中断配合DMA的环形缓冲区模式,可以高效接收不固定长度的消息报文

下图中经过黄色的高电平时间空闲之后,就会产生一个空闲事件,IDLE EVENT

f8522910-da49-11ec-ba43-dac502259ad0.png空闲信号

因为DMA功能有HCTC中断;

  • HCHarf Complete)DMA传输一半成功标志;
  • TC (Total Complete) DMA传输完成成功标志;

举个例子;

如下图所示,这里分配了一个DMA缓冲区,大小是12字节,如果从地址1开始接收,会出现以下这两种情况;

  • DMA接收到第6个字节的时候,会触发HC事件;
  • DMA接收到第12个字节的时候,会触发TC事件;
f878edb6-da49-11ec-ba43-dac502259ad0.pngHC TC

这个思路其实我之前也有实践过,但是没有很好地利用HC和TC事件。

所以无法处理这种情况,即DMA缓冲区处于环形模式(Circular)的时候,数据覆盖的问题,最近看到了一个非常棒的开源项目,这里的思路非常不错,下面会详细介绍。

下面是DMA HC/DMA TC/Idle组合进行串口接收的细节,如下图所示;

f88bcecc-da49-11ec-ba43-dac502259ad0.png来自原项目

再次简单介绍一下缩略词的含义;

  • R 读取;
  • W 写入;
  • I 空闲信号
  • HT Half-Transfer complete DMA缓冲区半传输完成;
  • TC Transfer-Complete DMA缓冲区全部接收完成;

这里简单介绍一下情况E的解决方案,上面图片最右边小图;

  • 缓冲区大小20格,这里假设20字节,情况E需要接收30个字节,也就是说,10字节可能会被覆盖

  • 经过前面的四次接收后,串口继续从字母R处接收数据至DMA缓冲区;

  • 接收4字节时,会触发TC事件,这时候可以将4字节数据处理;

    f89b99f6-da49-11ec-ba43-dac502259ad0.png第一步
  • 因为是环形模式,所以回到第一个字节处,继续接收10字节,触发HT事件,这时候可以处理10字节数据;

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

    f8c07fa0-da49-11ec-ba43-dac502259ad0.png第三步
  • 第四步,上述已经接收了24个字节,所以还有6个字节没有接收,后面接收会产生空闲信号,并对之前的数据区域进行覆盖,如下图示所示;f8df95e8-da49-11ec-ba43-dac502259ad0.png

所以,不难发现,如果只使用空闲中断,如果需要接收的数据长度大于缓冲区,就会出现数据覆盖的情况,而加上DMA的HT和TC中断,就完美解决了这样的问题;

当然除了这些,还有很多优秀的方案,这个项目提供大量的例子。

项目地址https://github.com/MaJerle/stm32-usart-uart-dma-rx-tx

f9052b3c-da49-11ec-ba43-dac502259ad0.png项目主页

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

f919ab02-da49-11ec-ba43-dac502259ad0.png支持平台

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

f9537e9a-da49-11ec-ba43-dac502259ad0.png例子程序

作者在 STM32F413-Nucleo 开发板进行程序的测试,发现优化效果很不错;

115200的串口波特率下,每秒发送1581个字节,大约142ms;

  • 不使用DMA,CPU负载14%;
  • 使用DMA,CPU负载0%;

最后,这个项目目前是基于STM32CubeIDE创建的,记得搭建一下环境。如果无法下载,公众号后台回复【高效串口】获取项目代码。

Enjoy : )

原文标题:高效,可靠,安全的串口通讯开源方案

文章出处:【微信公众号:小麦大叔】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18271

    浏览量

    288301
  • 串口通讯
    +关注

    关注

    1

    文章

    249

    浏览量

    24542
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    99008

原文标题:高效,可靠,安全的串口通讯开源方案

文章出处:【微信号:knifewheat,微信公众号:小麦大叔】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式开发入门之旅

    嵌入式开发之初体验1.  生活嵌入式系统了解嵌入式系统的基本概念,列举生活嵌入式
    发表于 07-09 16:57

    嵌入式开发入门之旅

    ;nbsp; 119159395(Mary) 课程内容:一、嵌入式开发之初体验1.  生活嵌入式系统了解嵌入式系统的基本概念,列举生活
    发表于 07-10 15:59

    嵌入式开发要学什么内容 嵌入式开发学习路线介绍

    其汇编指令,我们在嵌入式开发,一般很少去写汇编,但是最起码的要求是能够看懂arm汇编。  5、系统移植的时候,就需要你从最下层的bootloader开始,然后内核移植,文件系统移植等。而移植这部
    发表于 06-30 10:07

    嵌入式开发与非嵌入式开发的区别

    通过初步的学习,了解到嵌入式是在已有的硬件上移植操作系统,在操作系统之上做上层应用开发,在操作系统之下做底层开发嵌入式开发与非嵌入式开发
    发表于 10-27 06:26

    嵌入式开发是什么意思

    嵌入式开发就是指在嵌入式操作系统下进行开发,包括在系统化设计指导下的硬件和软件以及综合研发。除暂且分离硬件的EDA研发以外,侧重的就是在一定硬件条件下的系统化设计和软件研发。定义嵌入式开发
    发表于 10-28 08:35

    浅析基于linux的嵌入式开发

    嵌入式开发的第三个阶段,也是步入复杂的嵌入式系统开发的开始。之所以打算把自己每天的学习经过记录下来,一方面是为了做记录方便随时看,加深记忆,最重要的还是由于我自己怕自己在这个过程懈怠
    发表于 11-05 06:49

    嵌入式开发流程

    嵌入式开发流程一般是在PC机的Windows系统下安装Ubuntu虚拟机,搭建嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口
    发表于 11-05 06:06

    嵌入式开发调试经验分享

    嵌入式开发过程中的一点调试经验嵌入式开发最麻烦的在现场调试过程或实际运营过程中出现问题很难定位。我在实际开发过程中一点经验分享给大家嵌入式开发
    发表于 11-05 08:15

    嵌入式开发流程是怎样的?

    嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口或网络下发到嵌入式板卡,程序在嵌入式
    发表于 11-08 06:24

    嵌入式开发的优缺点是什么?

    一.嵌入式开发概述:嵌入式:在已有硬件上移植操作系统,解决软硬件耦合度高导致的问题。(打个比方:软件的实现是为了调用open()函数,那么嵌入式开发就是在操作系统实现open()函数
    发表于 11-08 07:42

    究竟什么是嵌入式开发

    嵌入式开发早在10年之前笔者就读本科时,就炒得火热的概念,当时说嵌入式开发将是得到大力发展的行业。一直到最近又有物联网IoT,智能硬件的发展,嵌入式开发再次被推向风口浪尖。下面我们就简单说一下究竟
    发表于 11-08 06:13

    嵌入式开发就业方向的问题

    近几年来随着物联网的快速发展,嵌入式开发技术在我们的生活随处可见,目前嵌入式开发工程师在市场上的需求量大,薪资也是水涨船高。上海尚观科技今天主要是想给一些嵌入式开发的初学者们,具体说
    发表于 11-08 07:58

    对ARM在嵌入式开发的概述

    是对ARM在嵌入式开发的概述。一、ARM是什么?ARM是全球领先的半导体知识产权 (IP) 提供商。全世界超过95%的智能手机和平板电脑都采用ARM架构。二、ARM的商业模式ARM只负责设计芯...
    发表于 12-14 08:34

    嵌入式开发如何去实现显示功能呢

    0 引言 在做产品时,一般都需要显示功能,这个是展现给客户最直观的东西了。细化到嵌入式开发方面,显示这一块大体有两种方案:主控+液晶裸屏、主控+串口屏。第一种方案需要额外自己做液晶显示
    发表于 12-16 06:52

    嵌入式开发(一):嵌入式开发新手入门

    嵌入式开发环境及交叉编译环境,开发完成后,编译得到bin文件,然后在Windows下将bin文件通过串口或网络下发到嵌入式板卡,程序在嵌入式
    发表于 10-14 10:58 78次下载
    <b class='flag-5'>嵌入式开发</b>(一):<b class='flag-5'>嵌入式开发</b>新手入门