简介
Analog-to-digital converters(模拟数字转换器),我的STM32F407中内置3个ADC,每个 ADC 有 12 位、10 位、8 位和 6 位可选,ADC 具有独立模式、双重模式和三重模式,对于不同 AD 转换要求几乎都有合适的模式可选。
特性
- 分辨率有 12 位、10 位、8 位和 6 位可选
- 有3个ADC、但多重模式中ADC1一定为主
- 单次和连续转换模式
- 外部触发器选项,可为规则转换和注入转换配置极性
- 可使用双重/三重ADC模式
- 可独立设置各通道采样时间
- 可使用DMA或者中断采集数据
通道选择(规则与注入通道的区别)
这个是我比较疑惑的点,就收集了一些资料总结下
- 规则通道:顾名思意,规则通道就是很规矩的意思,我们平时一般使用的就是这个通道,或者应该说我们用到的都是这个通道,没有什么特别要注意的可讲。规则通道最多有16路
- 注入通道:注入,可以理解为插入,插队的意思,是一种不安分的通道。它是一种在规则通道转换的时候强行插入要转换的一种通道。如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。这点跟中断程序很像,都是不安分的主。所以,注入通道只有在规则通道存在时才会出现,注入通道最多有4路
ADC对应的引脚和DMA通道选择
采样转换时间
采样时间长短是基于分辨率决定的,采样时间是3个时钟周期再加上分辨率的周期得出转换时间
数据寄存器
独立模式的数据存储在ADC 规则数据寄存器 (ADC_DR),低16位有效,数据可以选择左对齐或者右对齐
双重和三重ADC模式数据存储在适用于双重和三重模式的 ADC 通用规则数据寄存器(ADC_CDR),32位有效
ADC_CSR偏移量
计算过程:0x40012000(基地址) + 0x300(相关偏移) +0x08(偏移量) = 0x40012308
独立模式单通道代码
- 初始化配置 ADC 目标引脚为模拟输入模式;
- 使能 ADC 时钟;
- 配置通用 ADC 为独立模式,采样 4 分频;
- 设置目标 ADC 为 12 位分辨率,1 通道的连续转换,不需要外部触发;
- 设置 ADC 转换通道顺序及采样时间;
- 配置使能 ADC 转换完成中断,在中断内读取转换完数据;
- 启动 ADC 转换;
- 使能软件触发 ADC 转换。
ADC 转换结果数据使用中断方式读取,这里没有使用 DMA 进行数据传输
中断方式
代码后续补上
DMA方式
代码后续补上
三重模式多通道代码
理解一下下图,主打的就是转换速度快,间隔小
- 初始化配置 ADC 目标引脚为模拟输入模式;
- 使能 ADC1、ADC2、ADC3 以及 DMA 时钟;
- 配置 DMA 控制将 ADC 通用规矩数据寄存器数据转存到指定存储区;
- 配置通用 ADC 为三重 ADC 交替模式,采样 4 分频,使用 DMA 模式 2;
- 设置 ADC1、ADC2 和 ADC3 为 12 位分辨率,禁用扫描,连续转换,不需要外部触发;
- 设置 ADC1、ADC2 和 ADC3 转换通道顺序及采样时间;
- 使能 ADC1 的 DMA 请求,在 ADC 转换完后自动请求 DMA 进行数据传输;
- 启动 ADC1、ADC2 和 ADC3 转换;
- 使能软件触发 ADC 转换。
ADC 转换结果数据使用 DMA 方式传输至指定的存储区,这样取代单通道实验使用中断服务的
读取方法
代码
后续补上