stm32 ADC基础配置

一,基础知识 1,通道组 ADC有两组通道:STM32 将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于你正常运行的程序,而注入通道呢,就相当于中断。在你程序正常执行的时候,中断是可以打断你的执行的。同这个类似,注入通道的转换可以打断规则通道的转换, 在注入通道被转换完成之后,规则通道才得以继续转换。
● 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规
则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。
● 注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入
组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。
*如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉
冲将发送到ADC以转换新选择的组*。
二,初始化配置 1,基本功能

ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE ); //ADC时钟初始化 RCC_ADCCLKConfig(RCC_PCLK2_Div6); //分频因子要确保 ADC1 的时钟( ADCCLK)不要超过 14Mhz。当前72/6=12MHz。GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //GPIO设置为模拟输入模式 GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_DeInit(ADC1); //恢复默认值 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //双模式选择,注1; ADC_InitStructure.ADC_ScanConvMode = DISABLE; //是否多通道模拟输入,注2; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //是否是单次转换,注3; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //外部触发,注4; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据对齐方式 ADC_InitStructure.ADC_NbrOfChannel = 1; //规则组通道数,ADC规则序列寄存器 1(ADC_SQR1)的第23:20位:L[3:0]:规则通道序列长度 (Regular channel sequence length); ADC_Init(ADC1, &ADC_InitStructure); //ADC_Cmd(ADC1, ENABLE); //初始化ADC,ADON位置1。只是给ADC上电,转换开始需要按照前面的设置触发。例如软件触发用ADC_SoftwareStartConvCmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); //复位ADC校准。while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位完成ADC_StartCalibration(ADC1); //校准while(ADC_GetCalibrationStatus(ADC1)); //等待校准完成ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //通道配置:注5;ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发所以对SWSTART置位。while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )); //等待转换结束return ADC_GetConversionValue(ADC1); //返回最近一次转换结果

注1:双模式选择 (Dual mode selection)
对应ADC控制寄存器 1(ADC_CR1)中的:DUALMOD[3:0]:双模式选择 (Dual mode selection)
软件使用这些位选择操作模式。
0000:独立模式
0001:混合的同步规则+注入同步模式
0010:混合的同步规则+交替触发模式
0011:混合同步注入+快速交叉模式
0100:混合同步注入+慢速交叉模式
0101:注入同步模式
0110:规则同步模式
0111:快速交叉模式
1000:慢速交叉模式
1001:交替触发模式
*注意:1, 在双ADC模式里,为了在主数据寄存器上读取从转换数据,必须使能DMA位,即使不使用DMA
传输规则通道数据。
2,改变通道的配置会产生一个重新开始的条件,这将导致同步丢失。建议在进行任
何配置改变前关闭双模式。*
注2:扫描模式 (Scan mode)
Specifies whether the conversion is performed in Scan (multichannels) or Single (one channel) mode.This parameter can be set to ENABLE or DISABLE.
ADC控制寄存器 1(ADC_CR1)中的:SCAN:扫描模式 (Scan mode);
注3:连续转换 (Continuous conversion)
Specifies whether the conversion is performed inContinuous or Single mode. This parameter can be set to ENABLE or DISABLE.
ADC控制寄存器 2(ADC_CR2)的CONT:连续转换 (Continuous conversion)
CONT=0,SCAN=0 单次转换模式(Single conversion mode)单次扫描1通道
CONT=1,SCAN=0 连续转换模式(Continuous conversion mode) 连续扫描1通道
CONT=0,SCAN=1 扫描转换模式(Scan mode):所有ADC_SQR序列通道转换一次后停止。(单次扫描组)
CONT=1,SCAN=1 扫描转换模式(Scan mode):所有ADC_SQR序列通道转换一次后,再从第一个通道循环。连续扫描一组
如果开启多个通道不开启扫描模式,则只转换每组通道的第一个通道。
注4:选择启动规则通道组转换的外部事件 (External event select for regular group)
Defines the external trigger used to start the analog to digital conversion of regular channels.
ADC控制寄存器 2(ADC_CR2)的EXTSEL[2:0]:选择启动规则通道组转换的外部事件 (External event select for regular group)这些位选择用于启动规则通道组转换的外部事件,其中111是SWSTART即软件启动。库函数:ADC_SoftwareStartConvCmd(ADC1, ENABLE);
注5:通道配置
void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime)

【stm32 ADC基础配置】配置ADCx的,通道,序列,转换时间。其中序列就是第几个被转换的。主要对应两个寄存器:ADC采样时间寄存器 1,2(**ADC_SMPR**1,2)和ADC规则序列寄存器 1,2,3(**ADC_SQR**1,2,3)

    推荐阅读