STM32串口通信USART(二)---DMA方式

发布者:朱颜素韵最新更新时间:2019-09-05 来源: eefocus关键字:STM32  串口通信  USART  DMA方式 手机看文章 扫描二维码
随时随地手机看文章

刚接触到DMA的时候,一头雾水,只知道方便、快捷,但不知道该怎么使用,后来弄明白原理之后就轻松了很多,但理解的还不是很透,所以希望把自己的理解写出来,和大家分享一下!


形象的说,DMA就像一个快递中转站,负责把数据从始发地搬到目的地,只要他负责的仓库有货,他就开始搬运,没货就等着,除非你把它关了。就像机器人搬东西一样,首先要告诉它从哪搬,搬到哪?东西有多大?需要搬几趟?需要搬运的东西是不是都在一起?搬完后是不是扔在那就行了,还是要放好?


到芯片里,数据就是货物,把数据从一个地方移到另一个地方。你只要告诉它怎么移到就行了,就像控制一个机器人一样。并不是多有的外设都能有机会使用DMA通道,而且,一条通道上被外设使用后,通道上的其他外设就不能使用了。那么,哪些外设可以使用DMA呢?


比方说:现在我需要使用串口发送,那么只能选择通道4,如果接收就使用通道5。


(这里只拿DMA1举例,DMA2原理相同)


在知道大概的原理之后,我们来看一下DMA的一些寄存器


 1):中断状态寄存器                                                                                                                                                                           

 2):中断标志清除寄存器


 3):通道配置寄存器


注:当通道配置为非循环模式时,传输结束后(即传输计数变为0)将不再产生DMA操作。要开始新的


DMA传输,需要在关闭DMA通道的情况下,在DMACNDTRx寄存器中重新写入传输数目



 4):接下来的几个寄存器配置传输数据的次数、数据源地址,数据存放地址。


/**********中断函数**************/


/*这里只提供通道4发送完成中断


*/


void DMA1_Channel4_IRQHandler(void){   if(DMA_GetITStatus(DMA1_FLAG_TC4)==SET)    {       DMA_ClearFlag(DMA1_FLAG_TC4);       DMA_Cmd(DMA1_Channel4, DISABLE); //在非循环模式下,若 想再次填写传输次数,必须先关闭通道     DMA1_Channel->CNDTR =  10;       DMA_Cmd(DMA1_Channel4, ENABLE); 


}


关键字:STM32  串口通信  USART  DMA方式 引用地址:STM32串口通信USART(二)---DMA方式

上一篇:判断STM32 GPIO输入口的输入状态(高电平或低电平)
下一篇:STM32输入捕获(一)

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved