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

STM32F1系列--ADC库函数学习笔记

程序员文章站 2022-07-04 16:01:38
...

 

图1:

STM32F1系列--ADC库函数学习笔记

图2:

STM32F1系列--ADC库函数学习笔记

图3:RCC_CFGR寄存器

STM32F1系列--ADC库函数学习笔记

图4:ADC_CR1寄存器之模式的选择:

(常用模式为独立模式)

STM32F1系列--ADC库函数学习笔记

图5:ADC_CR1寄存器

(PS:单通道读取不需要设置该位,设置为DISABLE即可)

STM32F1系列--ADC库函数学习笔记

 

图6:ADC_CR1寄存器

(数据对其位设置)

STM32F1系列--ADC库函数学习笔记

 

图7:ADC_CR1寄存器

(常用的规则通道的设置位)

STM32F1系列--ADC库函数学习笔记

 

图8:ADC_CR2寄存器

(一般设为连续转换,如果有什么实际应用是设置位单次的欢迎大家讨论)

STM32F1系列--ADC库函数学习笔记

图9:ADC_CR2寄存器

(22和20位,置1)

STM32F1系列--ADC库函数学习笔记

图9:ADC_CR2寄存器

(当这两个寄存器配置1后,由硬件置0,即校准完成)

STM32F1系列--ADC库函数学习笔记

 

 

void Adc_Init(void)
{
    ADC_InitTypeDef ADC_InitStructure; 
    GPIO_InitTypeDef GPIO_InitStructure;

	GPIO_StructInit.GPIO_Pin = GPIO_Pin_10;
	GPIO_StructInit.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_Init(GPIOC,&GPIO_InitTypeDef);
	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1 , ENABLE);//开启对应外设的时钟

	/*设置ADC分频因子;6分频; 72M/6=12M*/
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);

    ADC_DeInit(ADC1);//复位ADC1寄存器内部值(防止之前设置的值影响配置.不过按道理来说我们都有设置,可以直接覆盖.大概就这样把)
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC设置为独立工作模式
    ADC_InitStructure.ADC_ScanConvMode = DISABLE; //数模转换工作在单通道模式 /非扫描模式
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//工作在单次转换模式
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//设置SWSTATR为外部触发事件
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据右对齐
    ADC_InitStructure.ADC_NbrOfChannel = 1;//设置规则通道转换数目为1;
    ADC_Init(ADC1,&ADC_InitStructure);

	/*设置外部CR2的22位和20位,启动外部事件转换和开启规则转换通道*/
    ADC_SoftwareStartConvCmd(ADC1,ENABLE); //软件启动

    ADC_Cmd(ADC1,ENABLE);//设置ADC-CR2 的ADON位 打开对应ADC外设

	ADC_ResetCalibration(ADC1);	//使能复位校准 
	while(ADC_GetResetCalibrationStatus(ADC1));	//检测函数,检测RSTCL位是否置0
	ADC_StartCalibration(ADC1);	 //开启AD校准
	while(ADC_GetCalibrationStatus(ADC1));	 //等待校准结束
}

 

上面的代码基本每一句话都在上图和注释解释了;下次有空再将分频把.基本的单通道初始化配置就这样子