STM32学习之路 X 八步掌握ADC

本文围绕STM32外设之ADC展开,介绍了STM32f103系列ADC的基本情况,包括数量、精度和通道数。重点阐述了八步驱动ADC的过程,涵盖电压输入、通道选择、转换顺序确定、触发源配置、转换时间设置、数据寄存器处理、中断及电压转换等内容,还强调学习时要学会查看寄存器和库函数手册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32外设之ADC

ADC是我们可开发工程中必须掌握的外设。

ADC简介(具体看stm32中文参照手册)

STM32f103 系列有 3 个 ADC,精度为 12 位,每个 ADC 最多有 16 个外部通道。其中ADC1 和 ADC2 都有 16 个外部通道, ADC3 根据 CPU 引脚的不同通道数也不同,一般都有8 个外部通道。

*今天我们例八步驱动ADC,掌握如何看参考资料和库函数指导
根据功能框图分成八步!!*重点内容*
这里写图片描述
(引用自野火零角度玩转STM32)

1. 第一步:电压输入

这里写图片描述
我们这里的VDD=3.3V,Vref- 、’Vref+其实就是接着我们的转换通道

2. 第二步:输入通道选择

● 规则组:就是我们平时用的通道,老老实实的。选用应写入ADC_CR1的DISCEN位。
● 注入组:就是可以插队转换。由应写入ADC_CR1的JDISCEN。
这里写图片描述

3. *第三步:确定转换顺序

这里写图片描述
规则组转换顺序是通过SQR1、2、3控制决定的
SQR3控制第1-6次转换;
SQR2控制7-12次转化;
SRQ1控制第13-18次转换;
(我也不知道为什么会反过来的)
那么我们有十六个通道要转换,(通道1、2、3。。。16)
如果通道8想最转换,就配置SQR3的SQ1【4:0】为8
同理通道2想第8个转换 ,就配置SQR2的SQ8【4:0】为2
(自己可以对着寄存器带代入)
这里写图片描述
注入组转换顺序由JSQR决定,如果 JL 的 值小于 4 的话,则 JSQR 跟 SQR 决定转换顺序的设置,当JL=4的时候跟SQR一样
例如:
有一个转换通道的时候,第一个转换应该是配置JSQR4-1即是JSQR3,
有四个的时候就配置JSQR1.

4. 第四步:触发源配置

ADC有三个打开方式:
1直接控制ADC_CR2的ADON、STRT、JSTRT
2外部io触发
3定时器触发
具体根据需求进行选择
这里写图片描述

5. 第五步:转换时间

时钟配置
根据时钟树可知道,ADC_CLK有PCLK2分频得到,最大为14M这里写图片描述
通过配置ADCPRC这是2/4/6/8分频。(我们的PCLK2一般为72M)
采样时间配置:
采样的周期数可通过 ADC采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位设置, ADC_SMPR2 控制的是通道 0~9, ADC_SMPR1 控制的是通道 10~17。
这里写图片描述
公式为: Tconv = 采样时间 +12.5 个周期。
假如配置为100 则Tconv=12.5+41.5=54个周期(12M下大约4.5us)
!!转换时间越短,误差越大。

7. 第七步:数据寄存器

规则组:ADC_DR。
这里写图片描述
由手册我们知道这话四32位的寄存器,而我们的转换精度是12位,所以单模式下只用低16位置,一般要右对齐。
注入组:ADC_JDRX(有四个,自行查询手册)
8. 第七步:中断
转换结束后有三种中断:规则通道结束中断,注入通道结束中断,模拟看门狗中断。前两个中断跟平常的中断很相似,我们讲一下模拟看门狗中断。模拟看门狗就是设定一个高低阈值,由ADC_LCR和ADC_HTR决定,超过阈值同样发生中断。
9.第八步:电压转换
前面也提到过ADC精度为12位数字。我们把它转换成模拟电压。
输入电压是3.3v,假设转换后数值x,模拟电压:y
公式

x212=y3.3 x 2 12 = y 3.3

我们通过寄存器了解整个ADC的转换过程,看起来很复杂,其实我们用到库函数的时候就很简答了。在这个学习过程中,我们要学会查看寄存器,查看库函数帮助手册。下次将更新库函数配置ADC!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值