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

本文介绍了如何使用STM32的DMA功能,通过串口实现连续向主机发送数据。首先讲解了DMA的基本概念,包括DMA请求、通道和仲裁器。接着详细阐述了配置DMA数据传输方向、大小和单位,以及判断传输完成的方法。然后,文章描述了在STM32CubeMX中设置RCC、开启USART1和DMA模式的过程。最后,提供了代码编写和烧录步骤,确保串口通信正常并持续输出'hello world'。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



前言

DMA,全称Direct Memory Access,即直接存储器访问。

DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。系统运作的核心就是CPU,CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,把这部分的CPU资源拿出来能够更好的利用CPU的资源。因此转移数据(尤其是转移大量数据)是可以不需要CPU参与。DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作–计算、控制等。



一、DMA简介

1.1DMA功能框图

 只需学会使用其中3个部分即可

1.1.1DMA 请求

如果外设要想通过 DMA 来传输数据,必须先给 DMA控制器发送 DMA请求,DMA收 到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答 信号之后,就会启动 DMA 的传输,直到传输完毕。

1.1.2通道

DMA 具有 12 个独立可编程的通道,其中 DMA1 有 7 个通道,DMA2 有 5 个通道,每 个通道对应不同的外设的 DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一 时间只能接收一个,不能同时接收多个。 

DMA1:

DMA2:

1.1.3仲裁器

当发生多个 DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁 器也管理。仲裁器管理 DMA 通道请求分为两个阶段。第一阶段属于软件阶段,可以在 DMA_CCRx 寄存器中设置,有 4 个等级:非常高、高、中和低四个优先级。第二阶段属于 硬件阶段,如果两个或以上的 DMA 通道请求设置的优先级一样,则他们优先级取决于通 道编号,编号越低优先权越高,比如通道 0 高于通道 1。在大容量产品和互联型产品中, DMA1 控制器拥有高于 DMA2 控制器的优先级

1.2DMA数据配置 

使用 DMA,最核心就是配置要传输的数据,包括数据从哪里来,要到哪里去,传输的 数据的单位是什么,要传多少数据,是一次传输还是循环传输等等

1.2.1数据传输方向:

外设到存储器:

当我们使用从外设到存储器传输时,以 ADC 采集为例。DMA 外设寄存器的地址对应 的就是 ADC 数据寄存器的地址,DMA 存储器的地址就是我们自定义的变量(用来接收存 储 AD 采集的数据)的地址。方向我们设置外设为源地址。

存储器到外设:

当我们使用从存储器到外设传输时,以串口向电脑端发送数据为例。DMA 外设寄存器 的地址对应的就是串口数据寄存器的地址&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值