1.ADC 基本概念
ADC是将模拟电压信号 转换为数字量的电路单元,是模拟信号数字化的必要器件。
(1)STM32F411RE 内置 1 个逐次逼近型 ADC,最高 12 位可配置分辨率。
(2)支持 19 个通道,含 16 个外部信号源、2 个内部信号源及 1 个电池电压(VBAT)测量通道。
(3)工作模式包括单一、连续、扫描、不连续四种,转换结果存储在 16 位数据寄存器(左 / 右对齐可选)。
2.STM32F411RE的ADC的核心特性
(1)分辨率可配置:12 位、10 位、8 位或 6 位。
(2)中断触发:转换结束、注入转换结束、模拟看门狗超限均可产生中断。
(3)多转换模式:支持单一、连续、扫描、不连续转换。
(4)通道灵活:规则通道序列最多 16 个,注入通道序列最多 4 个(可插入规则转换)。
(5)扩展功能:支持 DMA 请求、外部触发器配置,注入通道可设数据偏移量。
(6)电源与输入范围:全速模式 2.4V-3.6V,慢速模式 1.8V;输入电压范围 VREF-≤VIN≤VREF+。
3.ADC的两种时钟方案
ADC 时钟分为模拟电路时钟 和数字接口时钟,均与 APB2 时钟相关:
(1)模拟电路时钟(ADC_CLK):由 APB2 时钟经预分频系数(2/4/6/8)分频生成,具体参考数据手册(RM0383)。
(2)数字接口时钟:直接等于 APB2 时钟,通过 RCC_APB2ENR 寄存器启用或禁用。
4.ADC通道选择
(1)通道分类
外部通道:16 个,对应引脚 ADCx_IN0~ADCx_IN15。
内部通道(3 个):
温度传感器:测温范围 - 40~125℃,精度 ±1.5℃,连接 ADC1_IN16 或 ADC1_IN18。
VREFINT:内部 1.2V 参考电压,连接 ADC1_IN17。
VBAT:备用电源电压,实际测量值为 VBAT/2,连接 ADC1_IN16 或 ADC1_IN18。
(2)通道转换规则
规则通道:正常转换序列,最多 16 个通道,可自定义转换顺序。
注入通道:类似 "中断",可在规则转换中插入,最多 4 个通道,支持自定义顺序。
注意:
(1)一个ADC单元可以选择多个输入通道:通过模拟复用器进行多路复用ADC转换选择多个模拟输入通道可以分为规则通道 和注入通道。每组的通道构成一个转换序列。规则转换序列最多可设置16个通道,一个规则转换序列规定了多路复用转换时的顺序。例如,选择了IN0、IN1、IN2共3个通道作为规则通道,定义的规则转换序列可以是INO、IN1、IN2,也可以是INO、IN2、IN1。
(2)注入通道就是可以在规则通道转换过程中插入进行转换的通道类似于中断的现象注入转换序列最多可以设置4个注入通道,也可以设置转换顺序。
(3)每个注入通道还可以设置一个数据偏移量,以转换结果可以是负数。
5.ADC 工作模式详解
(1) 单次转换模式
启动方式:3 种(设置 SWSTART 位、设置 JSWSTART 位、外部触发器)。
转换后流程:
规则通道:数据存 ADC_DR 寄存器→置位 EOC 标志→开启 EOCIE 则产生中断。
注入通道:数据存 ADC_JDR1 寄存器→置位 JEOC 标志→开启 JEOCIE 则产生中断,随后 ADC 停止。
(2)连续转换模式
核心特点:一次转换完成后自动启动下一次转换。
启动方式:外部触发器或设置 SWSTART 位(仅规则通道)。
转换后流程:最后一次数据存 ADC_DR 寄存器→置位 EOC 标志→开启 EOCIE 则产生中断。
注意:注入通道不支持连续转换。
(3)扫描模式
适用场景:需转换多个模拟通道时使用。
开启方式:设置 ADC_CR1 寄存器的扫描位。
转换规则:扫描 ADC_SQRx 寄存器中配置的所有通道,单次扫描完成后,若开启 CONT 位则循环扫描。
6.ADC时序
ADC在启动前需要一个稳定时间tSTAB准确转换。ADC转换开始后,需要最少15个时钟周期设置EOC标志(在12位ADC模式下),使用16位ADC寄存器存储转换结果。

ADC采用12位ADC模式时,最起码需要12个ADCCLK周期,以及额外的N个周期。通过cubeMX可以设置N的值,最小为3,最大为480,单次采样耗时为15-492个周期。
总转换时间计算:Tconv=采样时间+12个周期
7. ADC转换结果电压计算
ADC转换的结果是一个数字量,与实际的模拟电压之间的计算关系由VREF 和转换精度位数 确定。Eg:假设转换精度为12位,则ADC输出的数字量范围为0(12个0)~4095(12个1)。REF+=3.3V,VREF-=0V(模拟电压值0~3.3V),ADC转换结果为12位整数X则实际电压可线性对应,计算公式为Voltage=3.3 *[ X/4095 ] V------X为ADC转化后的数字.
即:模拟电压和数字量是 "一一对应" 的线性关系:
当输入电压为 0V 时,ADC 输出数字量 0;
当输入电压为 3.3V 时,ADC 输出数字量 4095;
中间的电压则按比例对应中间的数字量。
8.模拟看门狗---------不可预知脉冲中断

功能:监测指定通道电压,超出设定上下限(0~4095,12 位数字量)时产生中断。
适用场景:监测不可预知的突发性脉冲信号,保障系统稳定性
9.ADC的HAL驱动程序
文件stm32f4xx _hal _adc.h是ADC模块总体设置和规则通道相关的函数和定义
文件stm32f4xx _hal _adc ex.h是注入通道和多重ADC模式相关的函数和定义


软件启动转换:
函数HAL ADC Start()以软件方式启动ADC规则通道的转换,软件启动转换后,调用函数HAL_ ADC_ PollForConversion()查询转换是否完成;转换完成后可用函数HAL _ADC _GetValue()读取结果寄存器里的数据;使用函数HAL ADC Stop()停止ADC规则通道转换。

中断方式转化:
当ADC设置为用定时器或外部信号触发转换时,函数HAL ADC StartIT()用于启动转换,这会开启ADC的中断。当ADC转换完成时会触发中断,在中断服务程序里,可以用HAL ADC GetValue()读取转换结果寄存器里的数据。函数HAL _ADC _Stop IT()可以关闭中断。
ADC的4个中断事件类型及其对应的回调函数

总结
STM32F411RE内置12位逐次逼近型ADC,支持19个通道(16外部+3内部)和四种工作模式。关键特性包括可配置分辨率(6-12位)、多转换模式、DMA支持及电压监测功能。ADC时钟由APB2分频产生,通道分为规则组(16通道)和注入组(4通道),后者支持中断式插入转换。转换结果与输入电压呈线性关系(0-3.3V对应0-4095)。提供单次/连续/扫描三种转换方式,采样时间可配置(15-492周期)。HAL库提供软件/中断两种启动方式,并包含模拟看门狗功能,可监控异常电压脉冲。