STM32F103C8T6--DMA (江科大自化协)学习笔记

        ADC在使用扫描模式时,为了防止之前的数据被覆盖,使用DMA对数据进行转运处理。

本篇旨在讲述DMA的特点作用以及DMA与ADC如何配合实现数据转运。

一、DMA简介

        DMA(Direct Memory Access)直接存储器存取DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无须CPU干预,节省了CPU的资源

        12个独立可配置的通道:DMA1(7个通道)DMA2(5个通道)每个通道都支持软件触发和特定的硬件触发

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

二、DMA框图

CPU内核+储存器

三、DMA框架结构

  1. 用于访问各个存储器的DMA总线。
  2. 内部的多个通道,可以进行独立的数据转运。
  3. 仲裁器,用于调度各个通道,防止产生冲突。
  4. AHB从设备,用于配置DMA参数

四、存储器

        每个存储器背后都有一根导线,用于控制外设电路状态,比如置引脚高低电平、导通和断开开关、切换数据选择器、多位结合用作计数器和数据寄存器等等。

五、总线矩阵

        总线矩阵的左端为主动单元,拥有存储器的访问权,右端为被动单元,存储器只能被左边的主动单元读写。

        主动单元内核有DCode和系统总线,可以访问右侧存储器。其中,DCode总线是专门访问Flash的,系统总线访问其他东西。

        DMA1有一条DMA总线,DMA2也有一条DMA总线,以太网外设私有一条DMA总线。DMA1有7个通道,DMA2有5个通道,各个通道可以分别设置它们转运数据的源地址和目的地址,进而独立地运作。

六、仲裁器

        多个通道可以独立转运数据,但DMA总线只有一条,所以所有通道只能分时复用唯一的一条DMA总线,当冲突发生时,总裁器会根据通道优先级来决定顺序。

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

七、AHB从设备

        AHB从设备也就是DMA自身的寄存器,连接在AHB总线上所以DMA既是总线矩阵的主动单元,可以读写各种储存器;也是AHB总线上的被动单元,CPU通过AHB就可以对DMA进行配置了

八、DMA请求

        DMA请求就是DMA硬件触发源,比如ADC转换完成、串口接收到数据,需要触发DMA转运数据时会通过这条线路,向DMA发出信号,之后DMA就执行数据转运工作。

九、DMA基本结构

        外设端和存储器端的起始地址决定数据输出位置和到达位置,数据宽度指定一次数据转运要按多大数据宽度,可以选定字节、半字节和字。

        可以从站点A转运到站点B,也可以由站点B到站点A。

        传输计数器用来指定转运次数,传输计数器是一个自减计数器。比如写5,就会转运5次,转运过程中,每转运1次,计数器的数会减1,当传输计数器自减到0之后,DMA就不会再进行数据转运了,另外,当传输计数器减到0时,之前自增的地址也会恢复到起始地址的位置,以方便DMA新一轮的转运。

        自动重装器,当传输计数器减为0时,是否要恢复到最初的值。如果不使用自动重装器,在转运完成后,DMA就结束了,当使用自动重装器时,转运完成后,计数器减到0后,就会立即重装到初始值。自动重装器决定了转运的模式,如果不使用自动重装,就是正常的单次模式,如果重装,就是循环模式。如果ADC使用连续扫描循环模式,DMA也需要使用循环模式。(类似于自动上弹的弹夹)

        DMA的触发控制,就是决定DMA需要在什么时机进行转运的。

        触发源,有硬件触发和软件触发,由M2M(Memory to Memory)(存储器到存储器)参数决定选择什么触发形式。和ADC的软件触发不同,软件触发的执行逻辑以最快的速度,连续不断地触发DMA,最快地将传输计数器清零,完成这一轮转换。循环模式和软件触发不能同时使用,软件触发是想把传输计数器清零,循环模式是清零后自动重装,如果同时使用的话,那DMA就停不下来了,软件触发一般适用于存储器到存储器的转运,属于软件启动,不需要时机,尽快地完成任务,所以M2M位给1,就是软件触发,M2M位给0,就是硬件触发,硬件触发源可以选择ADC、串口、定时器等等。使用硬件触发的转运,一般都是与外设有关的转运,这些转运需要一定的时机,比如ADC转换完成,串口收到数据,定时时间到等等。

        开关控制,DMA_Cmd函数,当给DMA使能后,DMA就准备就绪可以转运了,DMA进行转运,有几个条件:第一,开关控制DMA_Cmd必须使能;第二,传输计数器必须大于0;第三,就是触发源,必须有触发信号,触发时,进行转运,且传输计数器进行自减当计数器减为零,且不自动重装,无论是否触发,DMA都不会进行转运了,此时需要给DMA_Cmd失能,关闭DMA,再为传输计数器写入一个大于0的数,再DMA_Cmd给使能开启DMA,DMA才能继续工作。

注:写传输计数器时,必须要先关闭DMA,再进行,不能在DMA开启时,写传输计数器,是手册里的规定。

  • 25
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值