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

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

3天内不再提示

STM32串口收发数据为什么要使用DMA

GReq_mcu168 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2022-02-12 13:22 次阅读

直接存储器访问(Direct Memory Access),简称DMA。DMA是CPU一个用于数据从一个地址空间到另一地址空间“搬运”(拷贝)的组件,数据拷贝过程不需CPU干预,数据拷贝结束则通知CPU处理。因此,大量数据拷贝时,使用DMA可以释放CPU资源,相关文章推荐:详解STM32中的DMA原理。

在STM32控制器中,芯片采用Cortex-M3架构,总线结构有了很大的优化,DMA占用另外的总线,并不会与CPU的系统总线发生冲突。也就是说,DMA的使用不会影响CPU的运行速度。

STM32串口收发数据为什么要使用DMA

DMA数据拷贝过程,典型的有:

内存—>内存,内存间拷贝

外设—>内存,如uart、spi、i2c等总线接收数据过程

内存—>外设,如uart、spi、i2c等总线发送数据过程

串口有必要使用DMA吗

串口(UART)是一种低速的串行异步通信,适用于低速通信场景,通常使用的波特率小于或等于115200bps。PC与STM32单片机通信实例推荐:按下按键,通过串口发送数据实例。

对于小于或者等于115200bps波特率的,而且数据量不大的通信场景,一般没必要使用DMA,或者说使用DMA并未能充分发挥出DMA的作用。

对于数量大,或者波特率提高时,必须使用DMA以释放CPU资源,因为高波特率可能带来CPU资源过度浪费的问题。

举个例子

对于发送,使用循环发送,可能阻塞线程,需要消耗大量CPU资源“搬运”数据,浪费CPU。对于发送,使用中断发送,不会阻塞线程,但需浪费大量中断资源,CPU频繁响应中断。以115200bps波特率,1s大约传输11520字节,大约69us需响应一次中断,如波特率再提高,将消耗更多CPU资源。

对于接收,如仍采用传统的中断模式接收,同样会因为频繁中断导致消耗大量CPU资源。

因此,在高波特率传输场景下,串口非常有必要使用DMA。

原文标题:STM32串口收发数据为什么要使用DMA?

文章出处:【微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

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

    关注

    447

    文章

    47821

    浏览量

    409207
  • 控制器
    +关注

    关注

    112

    文章

    15239

    浏览量

    171241
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348866

原文标题:STM32串口收发数据为什么要使用DMA?

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    stm32 adc1和串口2同时使用DMA出错的原因?

    stm32f103r8t6adc1使用dma方式采集数据串口2使用dma方式收发
    发表于 04-22 08:08

    STM32F103串口DMA+IDLE收发,速率过快会造成overrun数据溢出怎么解决?

    +IDLE, 收发都通过DMADMA每次接收最大数是64,进入IDLE中断后,从串口缓冲拷贝数据。在27字节
    发表于 04-18 06:26

    STM32G071串口1无法使用DMA收发是为什么?

    首先说一下过程,之前在F1,F0上使用DMA串口发送和接收数据,开启空闲中断接收不定长数据,都没有任何问题。后来用上了G030,使用串口1做
    发表于 04-01 07:46

    STM32G491使用串口DMA收发数据,一直进中断卡死其他任务是为什么?

    STM32G491使用串口DMA收发数据,一直进中断卡死其他任务,具体原因是出现在哪里?
    发表于 03-18 07:49

    STM32F407串口DMA发送卡死在HAL_DMA_GetState怎么解决?

    使用五路串口DMA收发数据,但是在发送的时候,到了while(HAL_DMA_GetState( hdma_usart3_tx) != HA
    发表于 03-06 08:29

    STM32串口收发数据使用DMA的原因

    提高数据传输效率** :DMA(Direct Memory Access)是一种能够直接从内存中读取或写入数据的硬件设备。
    的头像 发表于 12-13 11:16 478次阅读

    stm32下网串口共同使用,网收发数据串口不行如何解决?

    我的网收发数据串口不行,求教该如何解决
    发表于 11-10 07:42

    GD32串口dma接收空闲中断配置流程是怎样的?

    GD32串口dma接收空闲中断配置流程是怎样的,用过的朋友分享下经验。现在已经实现串口+DMA的发送和接收,都没有问题,并且使用查询idle方式也可以接收不定长
    发表于 11-03 07:51

    STM32 HAL库串口同时收发,接收卡死?

    STM32 HAL库串口同时收发,接收卡死? 为什么STM32 HAL库串口会出现同时收发导致接
    的头像 发表于 10-26 17:42 2450次阅读

    STM32 HAL库串口收发是如何使用的?

    STM32 HAL库串口收发是如何使用的? STM32是一款高性能的微控制器,它拥有广泛的应用领域,其中包括了各种通讯应用,如UART串口
    的头像 发表于 10-26 17:42 736次阅读

    STM32串口中断及DMA接收常见的几个问题

    STM32串口中断及DMA接收常见的几个问题
    的头像 发表于 10-26 16:41 2573次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b>中断及<b class='flag-5'>DMA</b>接收常见的几个问题

    STM32串口收发数据为什么要使DMA?有哪些常见问题?

      直接存储器访问(Direct Memory Access),简称DMADMA是CPU一个用于数据从一个地址空间到另一地址空间“搬运”(拷贝)的组件,数据拷贝过程不需CPU干预,
    的头像 发表于 08-24 09:57 6802次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>收发</b><b class='flag-5'>数据</b>为什么<b class='flag-5'>要使</b>用<b class='flag-5'>DMA</b>?有哪些常见问题?

    STM32G491使用串口DMA收发数据一直进中断卡死其他任务的原因

    STM32G491使用串口DMA收发数据,一直进中断卡死其他任务,具体原因是出现在哪里?
    发表于 08-07 07:05

    STM32 HAL库串口收发如何使用

    使用 STM32CubeMX 做好初始化,就可以直接使用了。 但是最近在某些产品上使用串口同时收发的时候,发现有时候串口会收不到数据了,但是
    的头像 发表于 06-22 10:38 4067次阅读
    <b class='flag-5'>STM32</b> HAL库<b class='flag-5'>串口</b><b class='flag-5'>收发</b>如何使用

    STM32采用串口DMA方式向上位机连续发送数据

    完成1.3DMA库函数配置过程二、串口DMA方式向上位机发送数据2.1新建工程2.2设置RCC 2.3打开USART1及DMA模式​ 三、代
    发表于 05-11 09:32 2次下载
    <b class='flag-5'>STM32</b>采用<b class='flag-5'>串口</b><b class='flag-5'>DMA</b>方式向上位机连续发送<b class='flag-5'>数据</b>