STM32中的DMA控制器的使用

本文介绍了STM32中DMA控制器的使用方法,包括配置过程:设置CPARx和CMARx寄存器、数据传输方向、传输量、优先级等。还讲解了如何启动和监控DMA传输,并提供了初始化函数和外设DMA使能函数的示例,以及一个串口1发送DMA的实验案例。

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

STM32中的DMA控制器的使用

想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。对于大容量的STM32芯片有2个DMA控制器,其中一个控制器有7个通道,另一个控制器2有5个通道

549cc83c11beeb1f8be3384ed3e73aa0.png

通道的配置过程:

1.首先设置CPARx寄存器和CMARx寄存器。

通过DMA控制器把一个地址的值复制到另外一个地址,通过DMA控制器自动开启一条通道完成。

CPARx寄存器存放的是外设的地址

CMARx寄存器存储的是存储器的地址

2.设置数据传输方向,是否循环模式,是不是开启外设和存储器的增量模式,还有数据宽度,是8位,16位还是32位。比如设置成存储器的地址增量,那么传输一个数据过去后它的地址自动递增。

3.设置要传输的数据量

4.设置通道的优先级

5.全部设置好后就可以启动DMA通道。

启动后数据就开始传输,传输的过程中可以读CNDTRx寄存器,这个寄存器是告诉我们还有多少个数据需要传输。数据传输到一半或全部传输完毕后有响应的标志位置1,如果开启了中断,可以进入相应的中断程序。

一。常用的DMA函数

1.DMA初始化函数

void DMA_DeInit(DMA_Channel_TypeDef* DMAy_Channelx); //设置要开启的通道,还有一些参数,包括外设基地址,存储器基地址,传输的数据量,增量模式,数据宽度等。

2.DMA使能函数

void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState);

3.开启相应中断的函数

v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值