发布网友 发布时间:2024-10-24 15:28
共1个回答
热心网友 时间:2024-11-14 15:16
声明:学习笔记根据b站江科大自化协stm32入门教程编辑,仅供学习交流使用!
前言
本次学习共有两个程序。第一个为DMA数据转运,使用DMA进行存储器到存储器的数据转运,即把一个数组里的数据复制到另一个数组里。 第二个为DMA+AD多通道,
1、DMA(Direct Memory Access)直接存储器存取或访问。从名字看,DMA这个外设可以直接访问STM32内部的存储器,包括运行内存SRAM、程序存储器Flash和寄存器等等。
计算机系统的五大组成部分是运算器、控制器、存储器、输入设备和输出设备,其中运算器和控制器一般会合在一起叫CPU,所以计算机核心就是CPU和存储器。存储器有两个知识点,一是存储器的内容,另一个是存储器的地址,STM32同理。
主动单元,内核有DCode和系统(总线),可以访问右边的存储器,其中DCode专门访问Flash的,系统(总线)可以访问其他东西。DMA(Cortex-M3内核下面的DMA1和DMA2)也要有访问的主动权,所以另一个主动单元为DMA总线。AHB从设备用于配置DMA,DMA既是总线矩阵的主动单元,可读写各种寄存器,也是AHB总线上的被动单元,CPU通过线路可对DMA进行配置。
DMA请求即DMA触发,每个通道都有数据选择器选择软件触发还是硬件触发,软件触发执行逻辑是以最快的速度连续触发DMA,硬件触发源可选择ADC、串口、定时器等。
如果数据宽度不同,小的数据转到大的里面高位补零,大的数据转到小的里面高位舍去。
任务目标:将SRAM里的数组DataA转运到另一个数组DataB中,起始地址为DataA数组的首地址,目的地址为DataB数组的首地址,数据宽度为8位字节传输,两边地址都需要设置自增。
ADC扫描模式的执行流程,7个通道,每次单独通道转换后做一次DMA数据转运,并且存储器地址自增解决数据覆盖问题。配置为:外设地址写入ADC_DR这个寄存器的地址,存储器地址为SRAM中定义的一个数组ADValue,数据宽度为16位的半字传输,地址自增,存储器地址自增,传输方向为外设站点到存储器站点,传输计数器为7次。触发选择为ADC的硬件触发。
使用DMA进行数据传输,可以提高效率,节省CPU资源。在实际编程中,应根据具体需求选择合适的DMA配置和触发方式。DMA与ADC结合使用时,可以有效解决数据覆盖问题,提高程序运行效率。