这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » STM32串口收发数据为什么要使用DMA?

共4条 1/1 1 跳转至

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

高工
2024-10-29 21:52:49     打赏

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

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

1730209927586.png

    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    

菜鸟
2024-10-30 00:23:36     打赏
2楼

我有一个问题, 如果在多个外设之间都使用DMA进行数据传输,那么DMA的速度还能得到保证吗? 具体是怎么复用的


院士
2024-10-31 06:00:05     打赏
3楼

谢谢雄狮楼主的分享~!


院士
2024-11-01 17:21:10     打赏
4楼

 直接存储器访问(Direct Memory Access),简称DMA。DMA是CPU用于数据从一个地址空间到另一地址空间“搬运”(拷贝)的组件,数据拷贝过程不需CPU干预,数据拷贝结束则通知CPU处理。谢谢分享。


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]