STM32(十二):DMA直接存储器存取

DMA(Direct Memory Access)直接存储器存取

DMA可以提供外设和存储器 或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源。(运行内存SRAM、程序存储器Flash、寄存器)

12个独立可配置的通道:DMA1(7个通道)DMA2(5个通道)

每个通道都支持软件触发(存储器和存储器)特定的硬件触发(外设和存储器)

每个DMA的硬件触发源是不一样的。

STM32F103C8T6 DMA资源:DMA1(7个通道)。

存储器映像

选项字节里主要存的是Flash的读保护、写保护、还有看门狗等等配置。

DMA框图

DCode专门访问Flash,系统总线访问其他东西。

DMA总线只有一条,所以所有的通道只能分时复用这一条DMA总线。如果产生了冲突,那就会由仲裁器根据通道的优先级决定谁先用,谁后用。

如果DMA和CPU都要访问同一个目标,那么DMA就会暂停CPU的访问,以防止冲突。不过总线仲裁器仍然会保证CPU得到一半的总线带宽,使CPU也能正常工作。

AHB重设备,也就是DMA寄存器,DMA作为一个外设,自己也会有享用的配置寄存器。所以DMA既是总线矩阵的主动单元,可以读写各种寄存器;也是AHB总线上的被动单元。

DMA请求就是DMA的硬件触发源,比如ADC转换完成,串口接收到数据,需要触发DMA转运数据的时候,就会通过DMA向硬件触发信号,之后DMA就可以执行数据转运的工作了。

DMA内部的多个通道可以独立的数据转运,AHB中设备用于配置DMA参数。

Flash 只读。

DMA基本结构

传输计数器是自减计数器,每转运一次,计数器的值减1,减到0转运定制,之前自增的地址也会恢复到起始的位置。

M2M存储器到存储器的意思,当给M2M位为1时,DMA就会选择软件触发,这里软件触发是以最快的速度,连续不断的触发DMA,争取早日把传输计数器清零,完成这一轮转换。

硬件触发,例如ADC转换完成,串口收到数据,定时时间到等等。

传输计数器再DMA关时候写数据,再开。

硬件触发:每个通道的硬件触发源都不同,必须使用它所在通道。

软件触发:可以任意选择DMA通道。

对于通道1的触发源,有ADC1、TIM2_CH3、TIM4_CH1,至于是哪个,是对应外设是否开启DMA输出来试除。例如使用ADC1就会有ADC_DMACmd,开启ADC1这一路输出,它才有效。

数据宽度与对齐

数据转运+DMA

ADC扫描模式+DMA

相关推荐
广药门徒4 小时前
最小硬件系统概念及其组成
单片机·嵌入式硬件
GXSC7 小时前
国芯思辰|SCS5501/5502芯片组打破技术壁垒,重构车载视频传输链路,兼容MAX9295A/MAX96717
嵌入式硬件
啵啵学习7 小时前
Linux 里 su 和 sudo 命令这两个有什么不一样?
linux·运维·服务器·单片机·ubuntu·centos·嵌入式
可乐鸡翅好好吃8 小时前
通过BUG(prvIdleTask、pxTasksWaitingTerminatio不断跳转问题)了解空闲函数(prvIdleTask)和TCB
c语言·stm32·单片机·嵌入式硬件·bug·keil
才鲸嵌入式9 小时前
01 Ubuntu20.04下编译QEMU8.2.4,交叉编译32位ARM程序,运行ARM程序的方法
linux·c语言·单片机·嵌入式·arm·qemu·虚拟机
广药门徒11 小时前
我认为STM32输入只分为模拟输入 与 数字输入
stm32·单片机·嵌入式硬件
早睡的叶子12 小时前
proteus8安装教程
stm32·嵌入式硬件
天月风沙14 小时前
PX4 | 无人机关闭磁力计罗盘飞行(yaw estimate error报错解决方法)
单片机·嵌入式硬件·mcu·无人机
计蒙不吃鱼17 小时前
星闪开发之Server-Client 指令交互控制红灯亮灭案例解析(SLE_LED详解)
嵌入式硬件·物联网·iot·星闪·星闪开发
想搞嵌入式的小白18 小时前
STM32 NVIC中断控制器
stm32·单片机·嵌入式硬件·nvic