STM32 模数转换ADC、数据搬移DMA

1、ADC

概念: ADC,Analog-to-Digital Converter的缩写,指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模/数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。
作用:采集传感器的数据、测量输入电压、检查电池电量剩余、检测温湿度等。
性能指标

  • 量程:能测量的电压范围
  • 分辨率:ADC的分辨率通常以输出二进制数的位数表示,位数越多,分辨率越高,一般来说分辨率越高,转化时间越长。
  • 转化时间:模拟输入电压在允许的最大变化范围内,从转化开始到获得稳定的数字量输出所需要的时间称为转化时间。

1.1 STM32F0-ADC特性

  • 12位精度下转换速度可高达1MHz
  • 可配置的转化精度:6位、8位、10位、12位
  • 转换电压范围:0~3.6V
  • 供电范围:2.4V~3.6V
  • 19个转换通道:16个外部通道、3个内部通道
  • 采样时间可配置
  • ADC的结果可以左对齐或右对齐存储在16位数据寄存器中
    在这里插入图片描述

1.2 STM32F0-ADC时钟

  • APB时钟的2或4分频,最高14MHz
    **优点:**不会有时钟域之间的同步带来的抖动,触发事件和转换的起始时刻之间的延迟是确定的,从而保证转换之间的时间间隔是固定的。
    缺点: ADC的转换时间和系统时钟频率相关,受系统频率的影响较大

  • 片上14MHz HSI RC振荡器
    优点: 无论MCU的运行频率,都可以保证最高的ADC工作频率可以使用自动节点模式(自动开启或关闭14MHz的内部振荡器)
    缺点: 触发信号的同步会带来抖动,触发事件和转换的起始时刻之间的延迟不确定。

1.3 STM32F0-ADC通道的选择

19路复用通道,其中16个从GPIO引脚引入的模拟输入,3个内部模拟输入,数据通过通道进入ADC转换后都会暂存到同一个数据寄存器中。
在这里插入图片描述

1.4 STM32F0-ADC转化模式

在这里插入图片描述
注:
ADC 通知应用每次转换结束 (EOC) 事件
ADC 通知应用每次序列转换结束 (EOS) 事件。
这些标志位都是在ADC 中断和状态寄存(ADC_ISR)中
ADC_CFGR1可配置COUNT位 。

1.5 STM32F0-ADC转化时间

 STM32F0-ADC转化时间可以配置,不需要高转换精度的应用,可以通过降低精确度来提高转换速度。
 假设ADC模块工作在14MHz的最高工作频率下,转化时间如下:

在这里插入图片描述

1.5 STM32F0-ADC触发方式

  • 软件触发
    软件设置ADC_CR的ADSTART=1 时,触发选择有效。
  • 外部事件触发
    外部事件 ( 例如:定时器TRGO、输入引脚 ) 触发,可以设置触发源以及触发极性

2、DMA

DMA,全称:Direct Memory Access,直接存储器存取 (DMA) 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传 输。无须 CPU 干预,数据都可以通过 DMA 进行快速地传输。这就为其他操作保留了 CPU 资源。
在这里插入图片描述
DMA 主要特性

  • 5 个独立的可配置通道 ( 请求 )
  • 每个通道都直接连接专用的硬件 DMA 请求,每个通道都同样支持软件触发。这些配置通 过软件来完成。
  • 在同一个 DMA 模块上,多个请求间的优先权可以通过软件编程设置 ( 共有四级:很高、高、 中等和低 ),优先权设置相等时由硬件决定 (
    请求 1 优先于请求 2,依此类推 ) 。
  • 独立数据源和目标数据区的传输宽度 ( 字节、半字、全字 ),模拟打包和拆包的过程。源 和目标地址必须按数据传输宽度对齐
  • 支持循环的缓冲器管理
  • 每个通道都有 3 个事件标志 (DMA 半传输、DMA 传输完成和 DMA 传输出错 ),这 3 个事件标志逻辑或成为一个单独的中断请求。
  • 存储器和存储器间的传输
  • 外设到存储器和存储器到外设,外设到外设间的传输
  • 闪存、SRAM、APB 和 AHB 外设均可作为访问的源和目标
  • 可编程的数据传输数目:最大为 65536

各个通道的 DMA 请求一览表
在这里插入图片描述

2.1 STM32F0-DMA通道的优先级

仲裁器根据优先级管理着通道的请求和启动外设/存储器的访问
优先级管理分两个方面:

  • 软件:可通过DMA_CCRx寄存器配置每个通道的优先级,优先级分4个等级
    1)最高优先级
    2)高优先级
    3)中等优先级
    4)低优先级

  • 硬件:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优先权。

2.2 STM32F0-DMA传输

  • DMA传输模式
    1个DMA控制器,5个可独立配置的通道。所有通道都支持memory to memory的传输、外设到外设的传输以及外设和memory之间的传输
  • DMA传输的源、目的、长度
    1)DMA_CPARx 寄存器: 设置外设寄存器地址
    2)DMA_CMARx 寄存器:设置存储器地址
    3)DMA_CCRx 寄存器 : 配置数据的传输方向,如果是存储器到存储器模式,需配置DMA_CCRx的MEM2MEM位
    4)DMA_CNDTRx 寄存器: 写入需要传输的数据量, (0 到 65535)
    5)DMA_CCRx 寄存器中的 PSIZE 和 MSIZE 位;设置源和目的的数据宽度,两边的位宽尽量保持一致

2.3 STM32F0-DMA传输

  • DMA增量设置
    1)通过设置 DMA_CCRx 寄存器中的 PINC 和 MINC 标志位,外设和存储器的指针在每次传输后可以有选择地完成自动增量
    2)当设置为增量模式时,下一个要传输的地址将是前一个地址加上增量值,增量值取决与所选的数据宽度为 1 、 2 或 4 。
  • DMA循环模式
    1)循环模式用于处理循环缓冲区和连续的数据传输 ( 如 ADC 的扫描模式 ) 。在 DMA_CCRx 寄存器中的 CIRC 位用于开启这一功能。
    2)当启动了循环模式,一组的数据传输完成时,计数寄存器将会自动地被恢复成配置该通道时设置的初值, DMA 操作将会继续进行。

2.4 STM32F0-DMA中断

每个 DMA 通道都可以在 DMA 传输过半、传输完成和传输错误时产生中断。为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。
在这里插入图片描述
这些标志位都在中断状态寄存器DMA_ISR中设置

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值