stm32知识点-ADC

stm32知识点-ADC

首页模拟经营小当家模拟更新时间:2024-05-29

ADC:Analog-to-Digital Converter

STM32F10x ADC特点

l12位逐次逼近型的模拟数字转换器。

l最多带3个ADC控制器

l最多支持18个通道,可最多测量16个外部和2个内部信号源。

l支持单次和连续转换模式

l 转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。

l 通道0到通道n的自动扫描模式

l 自动校准

l 采样间隔可以按通道编程

l 规则通道和注入通道均有外部触发选项

l 转换结果支持左对齐或右对齐方式存储在16位数据寄存器

l ADC转换时间:最大转换速率 1us。(最大转换速度为1MHz,在ADCCLK=14M,采样周期为1.5个ADC时钟下得到。)

l ADC供电要求:2.4V-3.6V

ADC输入范围:VREF- ≤ VIN ≤ VREF

STM32F10x大容量芯片带3个ADC控制器

Tip:其中144脚芯片因为带PF脚,所以多5个通道,为21个外部通道。

小于144脚芯片只有16个外部通道。

STM32F10x系列芯片ADC通道和引脚对应关系

ADC引脚

ADC框图

STM32通道组

①规则通道组:相当正常运行的程序。最多16个通道。

规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中

② 注入通道组:相当于中断。最多4个通道。

注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中

Tip:STM32F1的ADC的各通道可以单次,连续,扫描或者间断模式执行。

单次转化与连续转换区别

扫描模式

uADC中断

ADC时钟配置

Tip:不要让ADC时钟超过14MHz,否则可能不准。

相关函数示例:RCC_ADCCLKConfig(RCC_PCLK2_Div6);

ADC_CR1寄存器

Tip:在扫描模式下,由ADC_SQRx或者ADC_JSQRx寄存器选中的通道被转换。如果设置了EOCIE或者JEOCIE,在最后一个通道转换完毕后才会产生EOC或者JEOC中断。

uADC_CR2寄存器

数据对齐方式

ADC_SMPR1寄存器

ADC_SMPR2寄存器

上面两个寄存器分别用来设定0-17个AD通道采样周期

ADC的采样时间

最小采样时间1us(ADC时钟=14MHz,采样周期为1.5周期下得到)

ADC_SQR1/SQR2/SQR3规则序列寄存器---16个转换

ADC_JSQR注入系列寄存器--4个转换

ADC_DR规则通道数据寄存器

ADC_JDR注入通道数据寄存器

ADC_SR状态寄存器

库函数详情

ADC初始化函数ADC_Init

void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);

ADC单次转化配置步骤

①开启PA口时钟和ADC1时钟,设置PA1为模拟输入。

GPIO_Init();

APB2PeriphClockCmd();

② 复位ADC1,同时设置ADC1分频因子。

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

ADC_DeInit(ADC1);

③ 初始化ADC1参数,设置ADC1的工作模式以及规则序列的相关信息。

void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);

④ 使能ADC并校准。

ADC_Cmd(ADC1, ENABLE);

⑤ 配置规则通道参数:

ADC_RegularChannelConfig();

⑥开启软件转换:ADC_SoftwareStartConvCmd(ADC1);

⑦等待转换完成,读取ADC值。

ADC_GetConversionValue(ADC1);

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved