欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32之ADC-模数转换

程序员文章站 2022-04-01 21:49:47
...

1、 ADC简介
STM32F103系列有3个ADC,精度为12位,ADC是一个逐次逼近型模拟数字转换器,且每个ADC有18个通道,可以测量16个外部和2个内部信号源,每个通道的A/D转换可以进行单次、连续、扫描或间断模式执行,ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中,ADC的输入时钟不得超过14MHZ,否则可能不准。也就是说,如果按照默认设置PCLK2为72MHz,此时应为6分频或者8分频,见图1.1。
STM32之ADC-模数转换
图1.1
2、 ADC主要特征
(1)12位分辨率(精度)
(2)转换结束、注入转换结束和发生模拟看门狗事件时产生中断
(3)单次和连续转换模式
(4)从通道0到通道n的自动扫描模式
(5)自校准
(6)带内嵌数据一致性的数据对齐
(7)采样间隔可以按通道分别编程
(8)规则转换和注入转换均有外部触发选项
(9)间断模式
(10)双重模式
(11)ADC供电要求:2.4V到3.6V
(12)ADC输入范围:VREF-<=VIN<=VREF+
(13)规则通道转换期间有DMA请求产生
3、 通道选择
有16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
(1)规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规 则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。
(2)注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。
4、ADC寄存器配置举例

void Adc_config(void)
{
	RCC->APB2ENR |=(0x01<<2);//开启PA端口时钟
	RCC->APB2ENR |=(0x01<<9);//开启ADC1时钟
	RCC->CFGR |=(0x01<<15);//ADC预分频为6分频
	GPIOA->CRL &=~(0x0f<<4);//PA1设置为模拟输入模式
	GPIOA->CRL &=~(0x0f<<8);//PA2设置为模拟输入模式
	GPIOA->CRL &=~(0x0f<<12);//PA3设置为模拟输入模式
	ADC1->SMPR2 |=(0x03<<3);//通道1(PA1的通道)的采样时间为011(28.5周期)
	ADC1->SMPR2 |=(0x03<<6);//通道2(PA2的通道)的采样时间为011(28.5周期)
	ADC1->SMPR2 |=(0x03<<9);//通道3(PA3的通道)采样时间配置为28.5个周期
	ADC1->CR1 |=(0x01<<8);//使用扫描模式
	ADC1->CR2 |=(0x01<<20);//使用外部事件启动转换
	ADC1->CR2 |=(0x07<<17);
	ADC1->CR2 &=~(0x01<<11);//数据对齐模式为:右对齐
	ADC1->CR2 |=(0x01<<1);//设置为连续模式
	ADC1->SQR1 |=(0x02<<20);//三个转换
	ADC1->SQR3 |=(0x03<<0);//第一个转换为3通道
	ADC1->SQR3 |=(0x02<<5);//第二个转换为2通道
	ADC1->SQR3 |=(0x01<<10);//第三个转换为1通道
	ADC1->CR2 |=(0x01<<0);//开启ADC并启动转换
	ADC1->CR2 |=(0x01<<3);//初始化校准
	while(ADC1->CR2 & (0x01<<3));//等待初始化校准完成
	ADC1->CR2 |=(0x01<<2);//开启校准
	while(ADC1->CR2 & (0x01<<2));//等待校准完成
	ADC1->CR2 |=(0x01<<22);//开始转换规则通道
}

相关标签: ADC stm32