1. STM32 HAL库ADC电压采集实战指南
在嵌入式系统开发中,模拟信号采集是连接物理世界与数字系统的关键桥梁。作为STM32开发者,掌握ADC(模数转换器)的使用是基本功之一。本文将基于STM32 HAL库,深入讲解ADC电压采集的实现原理与实战技巧。
1.1 ADC基础概念解析
ADC(Analog-to-Digital Converter)是将连续变化的模拟信号转换为离散数字信号的电子设备。在STM32应用中,它让我们能够测量各种模拟量,如温度、压力、光照强度等传感器输出。
模拟信号与数字信号的关键区别:
- 模拟信号:连续变化的电压/电流(如0-3.3V平滑变化)
- 数字信号:离散的数值表示(如12位ADC输出的0-4095整数值)
STM32的ADC模块主要特点:
- 12位分辨率(部分型号支持16位)
- 多达18个输入通道(16个外部+2个内部)
- 单次或连续转换模式
- 可编程采样时间
- 多种触发方式(软件/硬件)
1.2 ADC工作原理深度剖析
1.2.1 逐次逼近型ADC原理
STM32采用逐次逼近型ADC,其工作流程可分为四个阶段:
- 采样阶段:模拟开关闭合,对输入电压进行采样
- 保持阶段:模拟开关断开,保持采样电压稳定
- 转换阶段:DAC输出与输入电压比较,逐位确定数字值
- 输出阶段:转换完成,输出数字结果
转换时间计算公式:
code复制T_CONV = 采样周期 + 12.5个ADC时钟周期
例如当ADCCLK=14MHz,采样周期为1.5时:
code复制T_CONV = 1.5 + 12.5 = 14周期 = 1μs
1.2.2 STM32 ADC通道架构
STM32F1系列的ADC通道配置灵活:
| 通道类型 | 数量 | 特点 |
|---|---|---|
| 规则通道 | 16个 | 共用1个数据寄存器,需DMA防止覆盖 |
| 注入通道 | 4个 | 各有独立数据寄存器,优先级更高 |
通道与引脚对应关系(以ADC1为例):
| 通道 | 引脚 | 备注 |
|---|---|---|
| 0 | PA0 | 通用IO |
| 1 |
