一、模拟/数字转换(ADC)
1. ADC介绍
12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。
模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。
ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。
STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你正 常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。
2. 主要特征
● 12位分辨率
● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断
● 单次和连续转换模式
● 从通道0到通道n的自动扫描模式
● 自校准
● 带内嵌数据一致性的数据对齐
● 采样间隔可以按通道分别编程
● 规则转换和注入转换均有外部触发选项
● 间断模式
● 双重模式(带2个或以上ADC的器件)
● ADC转换时间:
─ STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
─ STM32F101xx基本型产品:时钟为28MHz时为1μs(时钟为36MHz为1.55μs)
─ STM32F102xxUSB型产品:时钟为48MHz时为1.2μs
─ STM32F105xx和STM32F107xx产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
● ADC供电要求:2.4V到3.6V
● ADC输入范围:VREF- ≤ VIN ≤ VREF+
● 规则通道转换期间有DMA请求产生。
3. 功能描述
下图为一个ADC模块的框图
引脚说明:
STM32 的 ADC 通道与GPIO 对应表:
二、ADC寄存器介绍
1. 控制寄存器(ADC_CR1 和 ADC_CR2)
ADC_CR1 :
地址偏移:0x04
复位值:0x0000 0000
ADC_CR2 :
地址偏移:0x08
复位值:0x0000 0000
2. 采样事件寄存器(ADC_SMPR1 和 ADC_SMPR2)
ADC_SMPR1:
地址偏移:0x0C
复位值:0x0000 0000
ADC_SMPR2:
地址偏移:0x10
复位值:0x0000 0000
3. 规则序列寄存器(ADC_SQR1~3)
ADC_SQR1:
地址偏移:0x2C
复位值:0x0000 0000
ADC_SQR2:
地址偏移:0x30
复位值:0x0000 0000
ADC_SQR3:
地址偏移:0x34
复位值:0x0000 0000
4. 规则数据寄存器(ADC_DR)
地址偏移:0x4C
复位值:0x0000 0000
5. 状态寄存器(ADC_SR)
地址偏移:0x00
复位值:0x0000 0000
6. 采样时间寄存器(ADC_SMPR1~2)
ADC_SMPR1:
地址偏移:0x0C
复位值:0x0000 0000
ADC_SMPR2:
地址偏移:0x10
复位值:0x0000 0000
7. 注入通道数据偏移寄存器x (ADC_JOFRx)(x=1…4)
地址偏移:0x14-0x20
复位值:0x0000 0000
8. 看门狗高阀值寄存器(ADC_HTR)
地址偏移:0x24
复位值:0x0000 0000
9. 看门狗低阀值寄存器(ADC_LRT)
地址偏移:0x28
复位值:0x0000 0000
10. ADC注入序列寄存器(ADC_JSQR)
地址偏移:0x38
复位值:0x0000 0000
11. 注入数据寄存器x (ADC_JDRx) (x= 1…4)
地址偏移:0x3C – 0x48
复位值:0x0000 0000
三、ADC程序设计
这里我以ADC1单通道转换为例,设计思路如下:
- 开启 PA 口时钟和 ADC1 时钟,设置 PA1 为模拟输入。
- 复位 ADC1,同时设置 ADC1 分频因子。
- 初始化 ADC1 参数,设置 ADC1 的工作模式以及规则序列的相关信息
- 使能 ADC 并校准。
- 读取 ADC 值。
总结
以上是对模拟/数字转换(ADC)的详情介绍,下节我将带大家仔细的去配置ADC转换实验。