【STM32】ADC模数转换基本原理

这篇文章是嵌入式中我通过大量资料 整合成了一份 系统完整、层次清晰的 ADC 模数转换原理解析 文档。

这里系统地梳理了 STM32F1 系列 ADC 模数转换的核心资料,包括:

复制代码
1.原理 + 特性
2.通道配置
3.模式选择(单次/连续/扫描)
4.关键寄存器与时序
5.全套库函数调用方式
6.提供示例实验代码

📘 1. STM32F1 系列 ADC 模数转换原理详解

参考资料:

STM32F1xx官方资料:《STM32中文参考手册V10》-第11章 模拟/数字转换(ADC)

🧩 第一部分:STM32 ADC 基本原理

什么是 ADC?

ADC(Analog to Digital Converter) 是一种将模拟电压信号转换为数字信号的模块。在 STM32 中,ADC 是片上外设,可将 03.3V 的电压转换为 12 位数值(04095)。

ADC 指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。

典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。

STM32F10x ADC特点:

12位逐次逼近型的模拟数字转换器。

最多带3个ADC控制器

最多支持18个通道,可最多测量16个外部和2个内部信号源。

支持单次和连续转换模式

转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。

通道0到通道n的自动扫描模式

自动校准

采样间隔可以按通道编程

规则通道和注入通道均有外部触发选项

转换结果支持左对齐或右对齐方式存储在16位数据寄存器
ADC转换时间:最大转换速率 1us。(最大转换速度为1MHz,在ADCCLK=14M,采样周期为1.5个ADC时钟下得到。)

ADC供电要求:2.4V-3.6V

ADC输入范围:VREF- ≤ VIN ≤ VREF+

电压转换公式

c 复制代码
V = (ADC_Value / 4096.0) * Vref

假设 Vref = 3.3V,ADC_Value = 2048:则

c 复制代码
V = 2048 / 4096 * 3.3 = 1.65V
特性 描述
转换精度 12位(0~4095)
架构 逐次逼近型(SAR)
控制器个数 最多 3 个(ADC1~ADC3)
通道数量 最多 18 个(16个外部 + 温度 + VREF)
模式 单次 / 连续 / 扫描 / 注入
对齐方式 左对齐 / 右对齐
校准功能 支持自动校准
时钟要求 ADCCLK ≤ 14MHz
🧩 第二部分:通道与引脚对应关系(如下图示)
STM32F10x大容量芯片带3个ADC控制器


其中144脚芯片因为带PF脚,所以多5个通道,为21个外部通道。小于144脚芯片只有16个外部通道。

复制代码
【转换通道结构】
通道类型		最大通道数		特点
规则通道		16 个			正常顺序转换
注入通道		4 个			类似中断处理,可打断规则通道
内部通道		2 个			温度(ch16)、VREF(ch17)
STM32F10x系列芯片ADC通道和引脚对应关系
ADC引脚
ADC 模块框图(ADC 寄存器结构 + 模式)


复制代码
ADC的模块包含:
	输入多路选择器
	模拟至数字转换器(SAR)
	控制逻辑(触发、注入/规则选择)
	数据寄存器(ADC_DR、JDRx)
	状态寄存器(ADC_SR)
STM32通道组

规则通道组: 相当正常运行的程序。最多16个通道。

规则通道和它的转换顺序在ADC_SQRx 寄存器中选择,规则组转换的总数应写入ADC_SQR1 寄存器的 L[3:0] 中。

注入通道组: 相当于中断。最多4个通道。

注入组和它的转换顺序在ADC_JSQR 寄存器中选择。注入组里转化的总数应写入ADC_JSQR 寄存器的 L[1:0] 中。


STM32F1的ADC的各通道可以单次,连续,扫描或者间断模式执行。

🧩 第三部分:模式选择(单次/连续/扫描)
转换模式:
模式 描述
单次模式 转换一次,需手动触发
连续模式 自动持续转换
扫描模式 多通道自动轮询
注入模式 手动触发,可打断规则通道
软件触发 SWSTART 启动
外部触发 由定时器等外设触发(EXTSEL)
单次转化 VS 连续转换


扫描模式


ADC中断
ADC时钟配置
c 复制代码
RCC_ADCCLKConfig(RCC_PCLK2_Div6); 

不要让ADC时钟超过14MHz,否则可能不准。


🧩 第四部分:关键寄存器与时序
📌 ADC 核心寄存器说明(简表)
寄存器 作用
ADC_CR1 模式选择,扫描模式使能,EOC中断
ADC_CR2 启动控制、触发源、数据对齐、CONT
ADC_SQRx 通道顺序配置
ADC_SMPRx 通道采样时间配置
ADC_DR 转换结果数据寄存器
ADC_SR 状态标志(EOC、AWD等)
ADC_CR1寄存器

在扫描模式下,由ADC_SQRx 或者ADC_JSQRx 寄存器选中的通道被转换。如果设置了EOCIE 或者JEOCIE ,在最后一个通道转换完毕后才会产生EOC 或者JEOC中断。


相关推荐
不想学习\??!2 小时前
STM32-外部中断
stm32·单片机·嵌入式硬件
不想学习\??!2 小时前
STM32-定时器
stm32·单片机·嵌入式硬件
LIN-JUN-WEI3 小时前
[ESP32]VSCODE+ESP-IDF环境搭建及blink例程尝试(win10 win11均配置成功)
c语言·开发语言·ide·vscode·单片机·学习·编辑器
LS_learner3 小时前
嵌入式系统中实现串口重定向
嵌入式硬件
景彡先生4 小时前
STM32中SPI协议详解
stm32·单片机·嵌入式硬件
趣多多代言人4 小时前
嵌入式面试八股文100题(二)
单片机·嵌入式硬件
Star Curry5 小时前
【新手小白的嵌入式学习之路】-STM32的学习_GPIO 8种模式学习心得
stm32·嵌入式硬件·学习
ZERONG_H5 小时前
STM32固件升级设计——内部FLASH模拟U盘升级固件
stm32·单片机·嵌入式硬件
不想学习\??!6 小时前
STM32-USART
stm32·单片机·嵌入式硬件