STM32_F4_ADC

声明:本篇博客的主要目的是对STM32F4系列单片机ADC外设的要点疑难点进行总结整理(因为手册内容太多,容易眼花缭乱,抓不住重点),并且尽量避免成为手册的搬运工(否则还不如直接去看手册)。同时在博客的最后,会附上一些ADC常用功能的示例Demo (会随着时间不断完善添加)。

1 概述


(概述内容摘自手册)

1.1 ADC简介

12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次连续扫描不连续采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。

1.2 ADC主要特性

  • 可配置 12 位、10 位、8 位或 6 位分辨率
  • 转换结束注入转换结束以及发生模拟看门狗溢出事件时产生中断
  • 单次连续转换模式
  • 用于自动将通道 0 转换为通道“n”的扫描模式
  • 数据对齐以保持内置数据一致性
  • 可独立设置各通道采样时间
  • 外部触发器选项,可为规则转换注入转换配置极性
  • 不连续采样模式
  • 双重/三重模式(具有 2 个或更多 ADC 的器件提供)
  • 双重/三重 ADC 模式下可配置的 DMA 数据存储
  • 双重/三重交替模式下可配置的转换间延迟
  • ADC 电源要求:全速运行时为 2.4 V 3.6 V,慢速运行时为 1.8 V
  • ADC 输入范围:V_{REF-}\leq V_{IN}\leq V_{REF+}
  • 规则通道转换期间可产生 DMA 请求

2 ADC框图


框图说明

  • ①处,是 ADC 的供电电源(V_{DDA},V_{SSA})和参考电源(V_{REF+},V_{REF-})。为了提高转换的精确度,ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛刺干扰;ADC的电源引脚为VDDA,电源地为VSSA,如果有VREF- 引脚(根据封装而定),它必须连接到VSSA,确保共地。ADC的参考电压都是通过Vref+提供的。100脚以上的型号,Vref+引到了片外,引脚名称为Vref+;64脚和小于64脚的型号,Vref+在芯片内部与VCC信号线相连,没有引到片外,这样AD的参考电压就是VCC上的电压。VDDA和VREF的电压范围请查阅手册
  • ②处,ADC的输入通道,F4系列单片机ADC共有19个通道,其中外部的16个通道就是框图中的ADCx_IN0到ADCx_IN15,这16个通道对应着不同的IO口,具体对应关系可以在手册或者CUBEMX配置界面获得。另外三个内部通道连接温度传感器、内部电压和电池电压。F4系列的不同型号略有差异,需要查阅手册确定
  • ③处,STM32F4将ADC的转换分为2类通道:规则通道注入通道。规则通道相当于正常运行的程序,而注入通道,就相当于中断。注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续转换。规则通道组最多包含16个通道,而注入通道组最多包含4个通道。
  • ④处,是 ADC 的触发源,ADC转换可以由控制寄存器ADC_CR2的位ADON来启动,也可以由外部事件的触发来启动转换。使用控制寄存器启动时,很简单,写1开始转换;写0停止转换。使用外部事件来触发转换,这个触发包括内部定时器触发和外部IO触发。触发源的选择由ADC_CR2的EXTSEL[2:0]和JEXTSEL[2:0]位来控制,EXTSEL[2:0]用于规则通道的触发源,JEXTSEL[2:0]用于选择注入通道的触发源。如果使能了外部触发事件,我们还可以通过设置ADC控制寄存器2:ADC_CR2的EXTEN[1:0]和JEXTEN[1:0]来控制触发极性,可以有4种状态:禁止触发检测、上升沿检测、下降沿检测以及上升沿和下降沿均检测。
  • ⑤处,ADC的时钟源来源于ADC预分频器,是由PCLK2经过ADC Prescaler 得到。最大为36MHz,通常设置为21MHz。分频因子由ADC通用寄存器ADC_CCR的ADCPRE[1:0]设置,可设置的分频系数有2、4、6和8。
  • ⑥处,当ADC转换完成后,根据转换组的不同,规则组的数据放在ADC_DR寄存器,注入组的数据放在JDRx寄存器。如果使用双重或者三重模式那规则组数据是存放在通用寄存器ADC_CDR内的。规则通道有16个,规则寄存器只有一个,如果使用多通道转换,那转换的数据就全都挤在了DR里面,前一个时间点转换的通道数据,就会被下一个时间点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该吧数据取走。或者开启DMA模式,将数据传输到内存里面,常用的方法是开启DMA传输。注入组有4个通道,相应的寄存器也有4个,这个不会有数据覆盖问题。
  • ⑦处,数据转换结束后,可以产生中断,中断分为四种:规则通道转换结束中断注入转换通道转换结束中断模拟看门狗溢出中断。模拟看门狗中断:当ADC转换的模拟电压低于阈值或者高于阈值时,就会产生中断,前提是我们开启了模拟看门狗中断。溢出中断:如果DMA传输数据丢失,会置位ADC状态寄存器ADC_SR和OVR位,如果同时使能了溢出中断,那在转换结束后会产生一个溢出中断。规则和注入通道转换结束后,除了产生中断,还可以产生DMA请求,将转换好的数据直接存储在内存里面。

3 功能说明


3.1 单次转换、连续转换与扫描模式的关系

举例说明如下:用ADC1 规则通道的顺序为CH0,CH1,CH2,CH3

不启动SCAN模式单次转换模式

启动ADC1,则:

1,开始转换CH0(ADC_SQR的第一通道)

2,转换完成后停止,等待ADC的下一次启动,继续从第一步开始转换

连续转换模式

启动ADC1,则:

1,开始转换CH0(ADC_SQR的第一通道)

2,转换完成后回到第一步,继续转换

启动SCAN模式单次转换模式

启动ADC1,则:

1,开始转换CH0

2,转换完成后自动开始转换CH1

3,转换完成后自动开始转换CH2

4,转换完成后自动开始转换CH3

5,转换完成后停止,等待ADC的下一次启动。下一次ADC启动后从第一步开始转换

连续转换模式

启动ADC1,则

1,开始转换CH0

2,转换完成后自动开始转换CH1

3,转换完成后自动开始转换CH2

4,转换完成后自动开始转换CH3

5,转换完成后返回第一步,继续转换

  • 开启扫描模式后 必须搭配DMA功能才能实现ADC的数据处理

3.2 注入通道管理

注入通道分为触发注入自动注入两种方式,关于这两种方式的功能、特性和注意事项,手册上写的很清晰且没有歧义,这里不再多余描述,请直接查阅手册。

图1 STM32F4系列单片机ADC注入通道和规则通道的整体框图

3.3 不连续采样模式(间断模式)

如果需要对多个ADC通道进行分组转换,组与组之间希望有可调的时间间隔。采样间断模式可能会比较方便。这块手册上也写的比较详细其且没有歧义。这里就不再过多描述。如果想详细了解,可以参阅手册或者点击这一篇博客

3.4 采样时间计算

(这里直接摘自手册)

3.5 使用DMA时一些注意事项

  1. 开启ADC的DMA功能,建议在ADC校准之后进行。换句话说校准ADC前不要使能其ADC的DMA功能。尤其涉及到多通道ADC  DMA传输时要注意这个次序。
  2. 如果使用ADC的DMA传输,在启动AD转换时,DMA需配置好且被使能待命。
  3. 在多通道ADC DMA传输时,经常出现因为缓冲区数据类型、源数据类型不一致导致的异常状况。这里主要是因为数据宽度不一致所导致的问题。

3.6 多重ADC模式

在具有两个或更多 ADC 的器件中,可使用双重(具有两个 ADC)和三重(具有三个 ADC)ADC 模式。在多重 ADC 模式下,通过 ADC1 主器件到 ADC2 和 ADC3 从器件的交替触发同时触发来启动转换,具体取决于 ADC_CCR 寄存器中的 MULTI[4:0] 位所选的模式。

注意:

  • 在多重 ADC 模式下,配置外部事件触发转换时,应用必须设置为仅主器件触发而禁止从器件触发,以防止出现意外触发而启动不需要的从转换。
  • 不要在两个/三个 ADC 上转换同一通道(转换同一通道时,不允许两个/三个 ADC 采样时间 重叠)。

可实现以下四种模式:

  • 注入同时模式
  • 规则同时模式
  • 交替模式
  • 交替触发模式

也可按以下方式组合使用上述模式:

  • 注入同时模式 + 规则同时模式
  • 规则同时模式 + 交替触发模式

因为该部分内容手册描述清晰,没有歧义。所以下面对各种模式的功能、作用只做简要描述,具体配置、执行细节请查阅手册。

3.6.1 注入同时模式

此模式可转换注入通道组。外部触发源来自 ADC1 的注入组多路复用器(通过 ADC1_CR2 寄存器中的 JEXTSEL[3:0] 位进行选择)。同时触发可用于 ADC2 ADC3

下图为4通道的注入同时模式下双重、三重ADC模式的功能示意图

3.6.2 规则同时模式

此模式式可用于规则通道组。外部触发源来自 ADC1 的规则组多路复用器(通过 ADC1_CR2 寄存器中的 EXTSEL[3:0] 位进行选择)。同时触发可用于 ADC2 ADC3

下图为4通道的规则同时模式下双重、三重ADC模式的功能示意图

3.6.3 交替模式

此模式只能用于规则组(通常为一个通道)。外部触发源来自 ADC1 的规则通道多路复用器。

下图为一个通道的交替模式下双重、三重ADC模式的功能示意图

3.6.4 交替触发模式

此模式只能用于注入组。外部触发源来自 ADC1 的规则通道多路复用器。

下图为一个通道的交替触发模式下双重、三重ADC模式的功能示意图

3.6.5 其他复合模式

  • 混合型规则/注入同时模式 (描述略,有需求可直接查阅手册)
  • 规则同时 + 交替触发组合模式(描述略,有需求可直接查阅手册)

 

3.7 温度传感器

主要特性

  • 支持的温度范围:—40 °C 125 °C
  • 精度:±1.5 °C 

逻辑框图

读取过程

  • 略,请查阅手册。

3.8 关于中断的说明

STM32F4系列单片机ADC共有四个中断事件:

中断事件
事件标志
使能控制位
结束规则组的转换
EOC

 EOCIE

结束注入组的转换
JEOC
JEOCIE
模拟看门狗状态位置 1
AWD
AWDIE
溢出 (Overrun)
OVR
OVRIE

特别注意:

不少人可能对EOC中断有所困惑,EOC中断如果工作在多通道扫描模式下,究竟是每转换完一个通道就触发一次中断,还是转换完一整个序列才触发一次中断?这个是由ADC_CR2寄存器的EOCS位决定的,该EOCS位手册描述如下:

手册在对ADC_CR1寄存器的SCAN位(扫描模式)进行描述时,也提到了这一点:

同时,手册里指出,JEOC 中断仅在最后一个通道转换结束时生成。

3.9 寄存器

  • 寄存器的一些特殊说明,后续会不定期进行补充。

3.10 勘误

  • 这里会不定期补充一些勘误说明。

4 CubeMX界面


CubeMX关于ADC的配置界面如下面两图所示(这里使用的是STM32F405),基本上手册中的每一处描述都能在CubeMX上找到相应的配置选项,可以理解成图形化的芯片手册。

图2 主界面介绍

图3 STM32F4系列单片机ADC外设在CubeMX上的参数配置界面

5 Hal库函数说明


对涉及ADC的Hal库函数逐个描述没有太大的意义,因为源码中的注释已经很详细了。也可以去查阅库文件夹下的.chm帮助文件(其实就是由源码注释直接生成的,内容一模一样)。这里主要对一些使用上的注意事项及常见问题进行补充说明。

(待补充)

6 DEMO地址


待补充

7 参考链接


-ADC电源相关

  1. https://blog.csdn.net/m0_38106923/article/details/103488569
  2. https://www.cnblogs.com/jieruishu/p/9023811.html

-ADC单次转换模式 连续转换模式 扫描模式

  1. https://blog.csdn.net/more_thinking/article/details/88788151?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-1-88788151.nonecase&utm_term=adc%E8%BF%9E%E7%BB%AD%E6%A8%A1%E5%BC%8F%20%E4%B8%8E%E6%89%AB%E6%8F%8F%E6%A8%A1%E5%BC%8F
  2. https://www.cnblogs.com/smilingfrog/p/5192324.html
  3. https://www.sohu.com/a/330452748_807475

-勘误及注意事项

  1. https://www.stmcu.org.cn/article/id-327948

-其他

  1. 硬石YS-F4Pro开发板开发手册_20190606
  2. STM32F4开发指南-HAL库版本_V1.2
  • 13
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值