
一、介绍1.1 定义ADC其全称是 Analog-to-Digital Converter 模/数转换器的作用是将连续变化的模拟信号如电压转换为离散的数字信号供微处理器读取和处理。1.2 工作流程采样以固定时间间隔采样周期T采集连续模拟信号将其在时间上离散化。采样频率Fs1/T根据奈奎斯特定理Fs 2倍信号最高频率时原始信号可完全恢复。采样频率越高信号损失越小。量化将采样后幅值连续的信号进行分级用离散的等级值代替连续的幅值。量化方式有只舍不入和四舍五入两种量化间隔越小精度越高量化过程必然存在量化误差大小为一个量化间隔。编码将量化后的等级值转换为二进制数字信号输出供微处理器读取和处理。1.3 量化中的参数参考电压VREFADC量化的基准由 VREF正参考电压和 VREF−负参考电压共同决定。VREF范围 1.8V ~ VDDAVREF− 通常接地VSSA。量化间隔 (VREF−VREF−)/2分辨率位数。STM32的参考电压通常为3.3V。分辨率决定将参考电压划分的份数用位数表示如8位、10位、12位通过 ADC_CR1.RES 位配置。分辨率越高量化间隔越小能测量的最小电压就越小精度越高。例如10位分辨率将电压分成1024份量化间隔 参考电压 / 2^{10}。1.4 常见的 ADC 类型1.4.1 并联比较型工作原理参考电压 VREFVREF 经电阻串R1~R8分出多个等间隔的比较电平输入电压 VINVIN 同时与所有比较电平进行比较比较结果经编码器直接输出二进制数字D0,D1...。主要优缺点优点转换速度极快结构简单。缺点分辨率提高时比较器和电阻数量会指数级增加2的N次方的电阻2的N次方−1 个比较器功耗大、成本高、芯片面积大因此通常只用于低分辨率≤8位、超高速的场合。1.4.2 逐次逼近型二分算法逐次逼近型ADC采用二分搜索算法先比较输入电压与参考电压的1/2若输入大于1/2参考电压则保留该位为1并累加1/4参考电压继续比较否则该位清零并比较1/4参考电压以此类推逐次逼近。比较次数等于分辨率位数N位ADC需比较N次最终累加值即为转换结果。电路结构控制电路逐位产生数字码经D/A转换器生成模拟电压与输入电压 VINVIN 比较根据比较结果逐次确定每一位的取值最终逼近得到数字输出 D2 D0。二、寄存器工作原理2.1 输入通道ADC通道是模拟信号输入到ADC控制器的单个输入路径一个ADC控制器可具有多个通道。外部通道16个连接外部GPIO引脚内部通道仅ADC1有共3个通道16连接温度传感器通道17连接内部参考电压通道18连接VBAT电池/电源采集模拟电压输入范围为 VREF−≤VIN≤VREF。2.2 转换序列转换序列是指多个ADC通道以任意顺序进行转换时的长度需要转换的通道个数和顺序通道转换的先后次序配置。转换序列有两种 规则序列和注入序列2.2.1规则序列规则序列最多16个通道从规则序列1SQ1到规则序列16SQ16按SQ1→SQ16依次转换。配置方法通过ADC_SQR1.L位设置序列长度长度通过ADC_SQRx.SQRn位添加转换通道顺序严格按照从SQ1往后ADC_SQR3存放SQ1SQ6转换的最前面 6 个ADC_SQR2存放SQ7SQ12ADC_SQR1存放SQ13SQ16转换的最后 4 个2.2.2 注入序列注入序列长度最大为4JSQ1~JSQ4转换顺序与长度配置相关转换始终从 JSQ4编号最大开始向 JSQ1编号最小方向反向进行。终点始终是JSQ4起点随长度增加而前移。长度转换顺序1JSQ42JSQ3 → JSQ43JSQ2 → JSQ3 → JSQ44JSQ1 → JSQ2 → JSQ3 → JSQ4配置方法通过ADC_JSQR.IL位设置注入序列长度通过ADC_JSQR.ISQx位添加转换通道把要放入的通道放入ISQX里这样就能按照序列长度的顺序来一次读取通道ISQ4对应JSQ4ISQ3对应JSQ3以此类推注入序列主要用于两种场景通过ADC_CR1.JAUTO位选择模式自动注入JAUTO1规则序列转换完成后自动转换注入序列无需软件或外部触发但必须禁止注入通道外部触发。适用于规则序列长度不足触发注入JAUTO0通过外部事件或软件触发启动可打断正在进行的规则序列转换完成后自动恢复规则序列。适用于需要临时插入高优先级转换2.3 转换触发源ADC转换启动方式分为软件触发和事件触发两种规则序列和注入序列各有独立的触发配置。软件触发规则序列向ADC_CR2.SWSTART写1触发转换开始后硬件自动清零注入序列向ADC_CR2.JSWSTART写1触发转换开始后硬件自动清零前提ADC控制器需先使能向ADC_CR2.ADON写1上电事件触发通过外部事件定时器捕获、EXTI中断线等触发转换规则序列ADC_CR2.EXTEN选择触发极性ADC_CR2.EXTESEL选择事件源注入序列ADC_CR2.JEXTEN选择触发极性ADC_CR2.JEXTESEL选择事件源支持上升沿、下降沿或双边沿触发2.4 转换时间2.4.1 ADC时钟来源ADCCLK模拟电路时钟来自APB2经可编程预分频器分频2/4/6/8分频通过ADC_CCR.ADCPRE位配置最大频率36MHz决定采样和转换时间。数字接口时钟用于寄存器读写访问等于APB2时钟频率。2.4.2 采样时间配置每个通道可独立设置采样周期数ADC_SMPR2设置通道0~9ADC_SMPR1设置通道10~182.4.3 总转换时间计算公式分辨率转换时间12位Tconv 采样周期数 12个ADCCLK周期10位Tconv 采样周期数 10个ADCCLK周期8位Tconv 采样周期数 8个ADCCLK周期6位Tconv 采样周期数 6个ADCCLK周期2.5 扫描模式ADC扫描模式与非扫描模式总结非扫描模式ADC_CR1.SCAN0仅按序列中的第一个通道进行单通道转换即使序列长度大于1也无效。扫描模式ADC_CR1.SCAN1按序列中预设的顺序对多个通道轮流进行转换适用于多通道采集场景。注入序列的触发注入会自动转化到非扫描模式使用规则序列长度1时用非扫描模式序列长度1时必须使能扫描模式才能实现多通道转换。2.6 连续与单次单次转换模式ADC按序列长度完成一次序列转换后自动停止需要重新触发才能再次转换。连续转换模式ADC按序列长度完成一次序列转换后自动回到序列头开始新一轮转换循环进行。配置寄存器通过ADC_CR2.CONT位控制0单次1连续。注意注入序列无法进行连续转换唯一例外是使用自动注入JAUTO1时注入序列可在规则序列后自动连续转换。2.7 数据存储规则数据寄存器ADC_DR只有1个16位有效长度规则序列中所有通道共用一个数据寄存器后一次转换结果会覆盖前一次需及时读取。注入数据寄存器ADC_JDRx共4个ADC_JDR1~ADC_JDR416位有效长度与注入序列转换顺序一一对应ADC_JDR1存储第一个转换结果ADC_JDR2存储第二个以此类推不会被覆盖。2.7.1 数据对齐数据对齐指ADC转换结果在数据寄存器中的存储方式分为左对齐和右对齐两种通过ADC_CR2.ALIGN位控制0右对齐1左对齐一般右对齐。6位分辨率按字节8位对齐存储在寄存器低8位或高8位8位、10位、12位分辨率按半字16位对齐存储在寄存器低16位或高16位2.8 状态寄存器标志位含义触发条件STRT规则序列开始标志规则序列开始转换时置1转换完成后自动清零EOC转换结束标志EOCS1每个规则通道转换完成时置1EOCS0整个规则序列转换完成时置1注入序列转换完成时也会置1JSTRT注入序列开始标志注入序列开始转换时置1完成后自动清零OVR溢出标志数据未及时读取导致溢出时置1需使能溢出检测当 ADC_CR2.EOCS 1时 或者 是 ADC_CR2 . DMA 1时 才会进行溢出检测。操作类型说明rw可读写r只读rc_w1读取后写1清零rc_w0读取后写0清零2.9 模拟看门狗模拟看门狗用于监测ADC转换结果是否超出设定阈值范围阈值下限由ADC_LTR寄存器设置上限由ADC_HTR寄存器设置超出时状态位AWD置1。阈值范围与分辨率有关如12位ADC范围为0~409510位为0~1023。监测模式配置通过ADC_CR1寄存器位名称功能说明AWDSCL模拟看门狗单通道选择0监测所有选中的通道全局监测1仅监测AWDCH[4:0]位指定的单个通道AWDEN规则通道模拟看门狗使能0禁用规则通道的模拟看门狗监测1使能规则通道的模拟看门狗监测JAWDEN注入通道模拟看门狗使能0禁用注入通道的模拟看门狗监测1使能注入通道的模拟看门狗监测三、ADC的DMA请求模式DMA使能ADC_CR2.DMA0禁止DMA请求1使能DMA请求DMA请求模式ADC_CR2.DDS0单次模式。当DMA传输次数完成后停止请求需先清DMA位再置1才能重新启动1连续模式。可持续生成DMA请求自动进行新一轮传输