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

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

3天内不再提示

通过DMA模式控制串口传输的方法

STM32嵌入式开发 来源:搜狐网 作者:搜狐网 2020-09-23 11:08 次阅读

在USART文章中讲解了串口的轮询和中断模式,本文介绍一下通过DMA模式控制串口传输。

直接存储器访问 (DMA) 用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何 CPU 操作的情况下通过 DMA 快速移动数据。这样节省的 CPU 资源可供其它操作使用。说白了DMA就是一个搬运工,将数据从一个地方搬到另一个地方而不需要CPU处理。作为一个搬运工,要他正常工作必须要确定几个重要的参数

传输模式:数据从哪里搬到哪里。三种可能的传输方向:存储器到外设、外设到存储器或存储器到存储器

通道选择:就是数据传输的是走那条道路

仲裁器:多个DMA传输是优先级高的优先传输

数据长度:每次传输的数据长度,可以一个字节,两个字节(半字),四个字节(字)

指针递增:如果使能了递增模式,则下一次传输的地址将是前一次传输的地址递增 1(对于字节)、2(对于半字)或4(对于字)

打开STM32CubeMX重新建工程,配置和上一章配置一样。只是这个工程中,在DMA设置栏添加UASART发送TX和接收RX的DMA。发送选择 DMA1 Channel 4通道,方向从存储器到外设。优先级为低。接收选择DMA1 Channel 5通道,方向外设到存储器,优先级为低。Mode为Normal,Data Width选择Byte

其中mode设置可以选择Normal表单次传输,传输一次后终止传输,Circular表示循环传输,传输完成后又重新开始继续传输,不断循环永不停止。此处选择单次传输。

Increment Address表示地址指针递增。串口发送数据是将数据不断存进串口的发送数据寄存器(USARTx_TDR)。所以外接的地址是不递增。而内存储器存储的是要发送的数据,所以地址指针要递增才能将所以的数据发送出去。

串口数据发送寄存器只能存储8bit,每次发送一个字节,所以数据长度选择Byte。另外要注意的一点,必须要开启串口中断。DMA1中断已默认开启。生成报告以及代码,编译程序。在usart.c文件中,可以找到刚才的DMA设置。

在main函数前面添加发送的数据。

在main()函数的while(1)循环中添加应用程序,通过DMA将数据发送出去。这是只测试发送,至于接收可以看USART文内容。

编译程序并下载到开发板。用USB线连接开发板到电脑,在电脑上打开串口调试助手。选择对应的串口号,设置波特率为115200,接收到如图信息。需要注意的是,如果不开启串口中断,则程序只能发送一次数据,程序不能判断DMA传输是否完成,USART一直处于busy状态。

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

    关注

    3

    文章

    561

    浏览量

    100553
  • 串口传输
    +关注

    关注

    0

    文章

    33

    浏览量

    1796

原文标题:STM32CubeMX-直接存储器访问(DMA)

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DMA 串口传输原理解析

    从这个角度来说,DMA 并没有加快串口本身的传输速度,只是解放了 CPU 资源而已。但是 CPU 被解放了, DMA 所使用的 缓存 资源可不能也随之解放呀,只能等发送完毕后才能释放。
    发表于 09-16 10:04 1665次阅读
    <b class='flag-5'>DMA</b> <b class='flag-5'>串口传输</b>原理解析

    求助:通过按键怎么设置串口传输

    通过按键怎么设置串口传输
    发表于 06-01 19:45

    串口传输文件

    通过串口传输文件的小程序,lv2015编写
    发表于 10-25 15:54

    串口传输字库

    串口传输字库,
    发表于 12-26 16:57

    串口传输相关程序分享

    串口传输相关程序仅供参考串口2.rar
    发表于 06-28 02:58

    5416与主机通信设想通过DMA的PINGPONG模式通过USB口传回主机可行吗?

    通过5416的MCBSP采集到数据,设想通过DMA的PINGPONG模式通过USB口传回主机,
    发表于 01-25 13:48

    串口传输文件及汉字叠加显示的方法

    串口传输文件及汉字叠加显示一、串口传输文件1、串口连接2、文件传输及接收二、汉字叠加1、汉字点阵库原理2、代码编写3、Ubuntu调用opencv4、实验结果查看三、实验总结四、参考文
    发表于 01-12 06:03

    如何通过串口传输数据

    目录一、串口通信概述1. 串口如何连接2. 如何计算波特率二、实验演示1. 实验设备2. 实际电路连接3. 通过串口传输数据三、总结参考文献一、串口
    发表于 01-12 06:03

    如何用串口传输float类型数据

    单片机小知识如何使用串口传输float类型数据比较难的就是数据进制的转化模拟量比如说 角度 距离速度 这些是10进制,串口通信用的是16进制 , 数据一个字节一个字节进行传输。在进行数据解析,数据帧
    发表于 01-19 06:12

    串口通讯服务器的端口传输速率

    串口通讯服务器的端口传输速率  由于终端服务器产品通常具有多种接口,每种接口传输速率各不相同。典型接口传输速率如下:
    发表于 01-07 14:00 1676次阅读

    STM32 LoRa无线数传模块 PC通过串口传输数据到单片机

    STM32F1单片机,烧录代码后,连接LoRa无线数传模块,在PC上面使用串口助手,通过串口传输数据到单片机串口1,并在LCD显示屏显示
    发表于 11-19 11:51 79次下载
    STM32 LoRa无线数传模块 PC<b class='flag-5'>通过</b><b class='flag-5'>串口传输</b>数据到单片机

    串口传输(51单片机版)

    串口传输在51单片机里是非常重要的一点,这常常是在中断、计数器后面学习,因为不可避免的需要用到中断。51单片机的串口,是个全双工的串口,发送数据的同时,还可以接收数据。
    发表于 11-23 16:20 0次下载
    <b class='flag-5'>串口传输</b>(51单片机版)

    串口的收发是指什么 串口传输与蜂鸣器的关系是什么

    串口是一种通信接口,用于在计算机和外部设备之间传输数据。串口传输通常使用一根传输线,按照一定的协议和通信速率,将数据位一位一位地顺序传输。发
    发表于 08-10 14:59 1337次阅读

    串口通信协议有哪些 串口传输文件方法有哪些类型

    串口传输文件的方法有以下几种类型:   1. XMODEM:XMODEM是一种最早应用于串口传输文件的协议,它使用简单的数据包结构进行传输,支持差错校验和重传机制。   2. YM
    的头像 发表于 08-15 14:43 1.4w次阅读

    怎么通过串口传输文件 网口传输串口传输的区别

    串口通常用于串行数据传输,主要用于传输数字数据。在传统的串口通信规范(如RS-232、RS-485)中,并没有专门设计用于传输音频的协议和格
    的头像 发表于 08-18 15:15 1.2w次阅读