STM32数据搬运工-DMA内容概要: STM32-DMA工作原理 ADC_DMA多路采集实例
内容概要: DMA简介 STM32F0-DMA通道 STM32F0-DMA传输 STM32F0-DMA中断 DMA简介: DMA,全称为:Direct Memory Access,即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。
注:正常情况下,数据之间的传输先将数据传输到微处理器的寄存器中,然后再从寄存器中将数据传输到目标 DMA模式下:ADC传输数据到内存储器中,首先由ADC向DMA发出请求,DMA申请使用总线,然后控制ADC和存储器之间的数据传输。无需CPU的干扰。 STM32F0-DMA简介: DMA功能框图和特性:
● 5 个独立的可配置通道 ( 请求 ) (因为只有一条总线,所以同一时刻只能使用一个通道传输,可通过仲裁器Arbiter设置优先级,确定哪个通道先传输) ● 每个通道都直接连接专用的硬件 DMA 请求 (DMA可以直接与外设等进行数据传送) ● 在同一个 DMA 模块上,多个请求间的优先权可以通过软件编程设置 ( 共有四级:很高、高、 中等和低 ) ● 独立数据源和目标数据区的传输宽度 ( 字节、半字、全字 ) 源 和目标地址必须按数据传输宽度对齐 ● 支持循环的缓冲器管理 ● 每个通道都有 3 个事件标志 (DMA 半传输、 DMA 传输完成和 DMA 传输出错 ) ● 存储器和存储器间的传输 ● 外设到存储器和存储器到外设,外设到外设间的传输 ● 闪存、 SRAM 、 APB 和 AHB 外设均可作为访问的源和目标 ● 可编程的数据传输数目:最大为 65536(16位)
STM32F0-DMA通道:
注:可修改SYSCFG_CFGR1来配置通道的映射关系 STM32F0-DMA通道的优先级: 仲裁器根据优先级管理着通道的请求和启动外设 / 存储器的访问(同一时刻只能有一个通道传输数据) 优先级管理分两个方面: ● 软件:可通过 DMA_CCRx 寄存器配置每个通道的优先级,优先级分4个等级: - 最高优先级 - 高优先级 - 中等优先级 - 低优先级 ● 硬件:如果 2 个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高 的优先权。举个例子,通道 2 优先于通道 4 。
STM32F0-DMA传输:
DMA传输模式:1个DMA控制器,5个可独立配置的通道。所有通道都支持存储器到存储器的传输、外设到外设的传输、以及外设和存储器之间的传输 DMA传输的源、目的、长度: DMA_CPARx 寄存器: 设置外设寄存器地址 DMA_CMARx 寄存器:设置存储器地址 DMA_CCRx 寄存器 : 配置数据的传输方向(外设传输数据传输到存储器,或者存储器数据传输到外设), 如果是存储器到存储器模式,需配置DMA_CCRx的MEM2MEM位 注:如果是两个外设之间的数据传输,则将其中一个外设寄存器地址填写到DMA_CMARx 寄存器,如果是两个内存之间的数据传输,则将其中一个内存的地址写入DMA_CPARx 寄存器。 DMA_CNDTRx 寄存器: 写入需要传输的数据量, (0 到 65535) DMA_CCRx 寄存器中的 PSIZE 和 MSIZE 位:设置源和目的的数据宽度(比如都设置成16位),两边的位宽尽量保持一致 DMA增量设置: 通过设置 DMA_CCRx 寄存器中的 PINC 和 MINC 标志位,外设和存储器的指针在每次传输后可以有选择地完成自动增量 当设置为增量模式时,下一个要传输的地址将是前一个地址加上增量值,增量值取决与所选的数据宽度为 1 、 2 或 4 。 DMA循环模式: 循环模式用于处理循环缓冲区和连续的数据传输 ( 如 ADC 的扫描模式 ) 。在 DMA_CCRx 寄存器中的 CIRC 位用于开启这一功能。(如摄像头的覆盖存储) 当启动了循环模式,一组的数据传输完成时,计数寄存器将会自动地被恢复成配置该通道时设置的初值, DMA 操作将会继续进行。 STM32F0-DMA中断: 每个 DMA 通道都可以在 DMA 传输过半、传输完成和传输错误时产生中断。为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断
注:这些标志位都在中断状态寄存器DMA_ISR中设置
利用ADC采集按键以及光照传感器的数据,在按键中断处理程序中启动DMA传输, 最后在DMA完成中断中打印采集到的数据 电路连接:
实验过程:
重写fputc函数:
追加到GPIO中断的回调函数并重写回调函数:
在main.c文件中找到相关头文件,并添加到gpio.c中
追加到DMA通道1的回调函数:
重新编写DMA的回调函数:
实验结果:
|
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植