学习HAL库STM32F103C8T6(ADC、ADC单通道阻塞读取和DMA读取、ADC多通道DMA读取)
全称:Analog-to-Digital Converter,指模拟/数字转换器。ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。12 位 ADC 是一种逐次逼近型模拟数字转换器(0~4095)。它有多达 18 个通道,可测量 16 个外部和 2 个 内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐
1. ADC介绍
1.1什么是ADC?
全称:Analog-to-Digital Converter,指模拟/数字转换器。
ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。

12 位 ADC 是一种逐次逼近型模拟数字转换器(0~4095)。它有多达 18 个通道,可测量 16 个外部和 2 个 内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。 ADC 的结果可以左对齐或右对齐 方式存储在 16 位数据寄存器中。
模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
ADC 的输入时钟不得超过 14MHz,它是由 PCLK2 经分频产生。
STM32F103C8T6 ADC资源:ADC1、ADC2,10 个外部输入通道
1.2 ADC工作原理(逐次逼近型)

1.3 ADC特性参数
ADC的性能指标
量程:能测量的电压范围
分辨率:ADC能辨别的最小模拟量,通常以输出二进制数的位数表示,比如:8、10、12、16位等;位 数越多,分辨率越高,一般来说分辨率越高,转化时间越长
转化时间(采样时间):从转换开始到获得稳定的数字量输出所需要的时间称为转换时间。转换时间越 长,转换结果相对越准确,但是转换速度就越慢
ADC特性
12 位精度下转换速度可高达1MHZ
供电电压:VSSA :0V,VDDA :2.4V~3.6V
ADC输入范围:VREF- ≤ VIN ≤ VREF+,0~3.3V
ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中
2.ADC框图


3.ADC的一些细节
3.1输入通道
总共 2 个 ADC(ADC1,ADC2),每个 ADC 有 18 个转换通道: 16 个外部通道、 2 个内部通道(温度传感 器、内部参考电压)。

外部的16个通道在转换时又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4路。
3.2 规则组/注入组

3.3转换顺序
每个 ADC 规则通道只有一个数据寄存器,16个通道一起共用这个寄存器,所以需要指定规则转换通道的转 换顺序。
规则通道中的转换顺序由三个寄存器控制:SQR1、SQR2、SQR3,它们都是32位寄存器。SQR寄存器控制 着转换通道的数目和转换顺序,只要在对应的寄存器位SQx中写入相应的通道,这个通道就是第x个转换。

和规则通道转换顺序的控制一样,注入通道的转换也是通过注入寄存器来控制,只不过只有一个JSQR寄存器 来控制,控制关系如下:

注入序列的转换顺序是从JSQx[ 4 : 0 ](x=4-JL[1:0])开始。只有当JL=4的时候,注入通道的转换顺序才会按 照JSQ1、JSQ2、JSQ3、JSQ4的顺序执行。
3.4触发转换方法
1.通过向控制寄存器 ADC-CR2 的 ADON 位写 1 来开启 ADC ,再将 SWSTART 位置 1 ,启动规则通道转换
2.也可以通过外部事件(如定时器)进行转换。

3.5 转换时间
ADC 是挂载在 APB2 总线(PCLK2)上的,经过分频器得到 ADC 时钟(ADCCLK),最高 14 MHz。
转换时间=采样时间+12.5个周期

12.5个周期是固定的,一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M, 采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us。
3.6 中断及事件

DMA请求(只适用于规则组)
规则组每个通道转换结束后,除了可以产生中断外,还可以产生DMA请求,我们利用DMA及时把转换好的数 据传输到指定的内存里,防止数据被覆盖。
3.7 校准
ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。在校准期间,在 每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误 差。
通过设置ADC_CR2寄存器的CAL位启动校准。一旦校准结束, CAL位被硬件复位,可以开始正常转换。建议 在上电时执行一次ADC校准。校准阶段结束后,校准码储存在ADC_DR中。
建议在每次上电后执行一次校准。
3.8 单次转换和连续转换
单次转换:只转换一次
连续转换:转换一次之后,立马进行下一次转换
3.9扫描模式
关闭扫描模式:只转换ADC_SQRx或ADC_JSQR选中的第一个通道
打开扫描模式:扫描所有被ADC_SQRx或ADC_JSQR选中的所有通道
3.10ADC存储
ADC1转换的结果放在DR寄存器的低16位
ADC2转化的结果放在DR寄存器的高16位
4.ADC实验
4.1硬件清单:
光敏电阻
4.2光敏电阻

1. 工作原理
光电导效应:
当光线照射到光敏电阻(如硫化镉材料)时,半导体中的电子吸收光子能量跃迁至导带,形成电子-空穴对,导致电阻值降低;无光照时电阻恢复高阻状态
2.硬件设计与应用
分压电路:光敏电阻与固定电阻串联,输出模拟电压信号至MCU的ADC引脚(如STM32的PA0)
模块类型:
数字输出(DO):通过比较器输出高低电平,适用于开关控制(如继电器触发)
模拟输出(AO):需配合ADC转换,获取精确光照强度值
4.3实验1:ADC单通道采集实验
目的:使用 ADC1 采集通道 1 的电压值,通道 1 连接光敏电阻传感器。

代码编写
ADC函数相关代码编写

ADC的时钟经过预分配器得到的所以还要配置时钟

PA1对应ADC1的通道一


主函数编写

串口助手观察实验现象:
用手捂住光敏电阻电压不断升高,拿光照光敏电阻电压不断降低

4.4实验2:ADC单通道采集实验(DMA读取)
目的:使用 ADC1 采集通道 1 的电压值+DMA读取,通道 1 连接光敏电阻传感器。

代码编写
ADC相关函数编写


主函数编写

串口助手观察实验现象:

4.5实验3:ADC多通道采集实验(DMA读取)
目的:使用 ADC1 采集通道 0 ~3 的电压值+DMA读取,通道 1 连接光敏电阻传感器。
代码编写
ADC相关函数编写

主函数编写

串口助手观察实验现象:

更多推荐



所有评论(0)