ADC外设

总结stm32中的ADC设备

概述

ADC:模数转换器,其是一个片上外设

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

其主要包含的内容有:

  • 测量的范围
  • 准备工作
  • 如何触发转换
  • 如何处理转换
  • 数据如何传入
  • 数据如何传出
  • 中断

测量的范围

在stm32zet6的ADC中,电压的测量范围是0v~3.3V,想要测量扩大范围,只需要使用外部电路进行升、降压至0~3.3v即可。


如何触发

ADC的触发源包括了:
- ADC转换可以由ADC控制寄存器2: ADC_CR2的ADON这个位来控制, 写1的时候开始转换,写0的时候停止转换.其实就是软件触发
1
ADC_SoftwareStartConvCmd(ADCx, ENABLE);

- 内部定时器触发
1


- 外部IO触发

输入通道

信号输入的通道,STM32的ADC多达18个通道,这18个通道又分为外部通道和内部通道。

其中外部的16个通道就是框图中的ADCx_IN0、ADCx_IN1…ADCx_IN5。这16个通道对应着不同的IO口,具体是哪一个IO口可以从手册查询到。

其中ADC1/2/3还有内部通道:ADC1的通道16连接到了芯片内部的温度传感器,Vrefint连接到了通道17。 ADC2的模拟通道16和17连接到了内部的VSS。ADC3的模拟通道9、14、15、16和17连接到了内部的VSS。

外部的16个通道之中又分为了规则通道和注入通道

规则通道

规则通道可以有16个,规则通道就是守规则的、按顺序来的通道。

注入通道

注入通道最多占用4个通道。注入,可以理解为插入,插队的意思,是一种不安分的通道。它是一种在规则通道转换的时候强行插入要转换的一种通道。 如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。 这点跟中断程序很像,都是不安分的主。所以,注入通道只有在规则通道存在时才会出现。


如何处理转换

转换顺序

转换时间

ADC时钟

ADC输入时钟ADC_CLK由PCLK2经过分频产生,最大是14M,分频因子由RCC时钟配置寄存器RCC_CFGR的位15:14 ADCPRE[1:0]设置, 可以是2/4/6/8分频,注意这里没有1分频。一般我们设置PCLK2=HCLK=72M,所以经过ADC预分频器能分频到最大的时钟只能是12M

1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);

采样时间

ADC使用一些ADC_CLK周期来进行采样,每个通道都可以配置不同的采样时间。

1
ADC_SoftwareStartConvCmd(ADCx, ENABLE);//采样时间和采样顺序的配置

数据输出

ADC转换后的数据根据转换组的不同,规则组的数据放在ADC_DR寄存器,注入组的数据放在JDRx。

ADC模式

ADC有六种基本模式:

如果不使用双ADC的话就是使用独立模式

与其他外设之间

中断

ADC有三种中断:

  • 顺序中断
  • 注入中断
  • 看门狗中断

其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。

看门狗中断

如果设置了看门狗中断的话,当ADC高于或者是低于设定的值时,会发生中断。

DMA请求

顺序中断和注入中断可以请求DMA,直接将数据存储到DMA中。

**DMA请求实际上是


编程

初始化结构体定义

1
2
3
4
5
6
7
8
9
10
typedef struct
{
uint32_t ADC_Mode; // ADC 工作模式选择
FunctionalState ADC_ScanConvMode; /* ADC 扫描(多通道)
或者单次(单通道)模式选择 */
FunctionalState ADC_ContinuousConvMode; // ADC 单次转换或者连续转换选择
uint32_t ADC_ExternalTrigConv; // ADC 转换触发信号。选择转换结果数据对齐模式,可选右对齐ADC_DataAlign_Right或者左对齐ADC_DataAlign_Left。一般我们选择右对齐模式。
uint32_t ADC_DataAlign; // ADC 数据寄存器对齐格式
uint8_t ADC_NbrOfChannel; // ADC 采集通道数
} ADC_InitTypeDef;

ADC外设
https://ysc2.github.io/ysc2.github.io/2023/12/02/stm32中的ADC外设/
作者
Ysc
发布于
2023年12月2日
许可协议