ADC概念
-
将特定的一些引脚配置成模拟模式。它和UART、SPI那种数字复用不完全一样。
- 关闭数字输入施密特触发器;
- 关闭输出驱动器;
- 关闭上下拉;
- 让引脚电压直接进入ADC的模拟多路开关。
-
单通道配置流程
- 使能GPIO和ADC时钟;
- 把对应GPIO配置为模拟模式;
- 在ADC规则序列或注入序列里写入要转换的通道号;
- 设置采样时间;
- 启动ADC转换;
- ADC内部采样该通道对应的引脚电压,进行逐次逼近转换;
- 结果存到
ADC_DR或ADC_JDRx。
-
多通道时要注意
一个ADC只有一个规则数据寄存器
ADC_DR。如果你扫描多个通道:- 通道0转换完,结果进
ADC_DR; - 通道1转换完,新结果会覆盖
ADC_DR; - 所以多通道扫描通常要配合 DMA,把每次结果自动搬到内存数组。
- 通道0转换完,结果进
-
多ADC情况
一些MCU有多个ADC,ADC1、ADC2、ADC3。他们有各自的数据寄存器。另有少量共用的寄存器比如,ADC 时钟预分频,多重模式配置,双重/三重模式的数据寄存器等。
-
搬运到内存
三种方式:
- 轮询:CPU 查
EOC,读DR; - 中断:转换完成中断里读
DR; - DMA:最常用。DMA 把
&ADC3->DR自动搬到内存数组。
多通道扫描时,后一个通道会覆盖
DR,所以必须用 DMA 或及时读走。 - 轮询:CPU 查