DMA介绍
DMA,直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。
一般在视频里,或者音频里面,对实时性要求高的时候开启DMA,就不用经过cpu处理,直接得到数据\
板载DMA
STM32F429里面有两个DMA,每个DMA都有八个数据流,每个数据流都有八个通道,
一般来说每个通道都配置好固定的外设,这次我们把内存的数据直接读取到串口里
这里我们使用DMA2的数据流7的通道4
代码编写
编写我们的DMA控制函数,表明用哪个DMA的数据流的哪个通道,源,目的,长度
MYDMA_Config(DMA2_Stream7,4,(u32)&USART1->DR,(u32)SendBuff,SEND_BUF_SIZE);
DMA2,STEAM7,CH4,外设为串口1,存储器为SendBuff,长度为:SEND_BUF_SIZE.
1.使能 DMA2 时钟,并等待数据流可配置。
通过查看传输的参数与基地址比较,知道是哪个DMA,进行使能
等待数据流可配置----->查询CR寄存器,直到变0,因为没有数据,所以禁止数据流
对之前留下的中断标志位进行清空,由于有高低两个寄存器,所以对通道进行判断
2.设置外设地址。
寄存器里面写入&USART1_DR 的值
3.设置存储器地址。
那也就是我们在内存里存放数据的地址
4.设置传输数据量。
传输的数据量也就是我们定义的buff大小
5.设置 DMA2 数据流 7 的配置信息。
设置由外设到存储器,不循环模式
串口的地址不变的–>非递增
发送源读完继续往下读取,递增
外设和内存的字节量都是一个字节八位,串口的地址不用偏移
使用单次传输
6.使能 DMA2 数据流,启动传输。
编写可以传输的函数,判断此时是否可以用,进行传输
没看懂为什么源地址要传输两次
编写main函数
初始化之前的设置
按下后进行传输