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

 

图1:

图2:

STM32F1系列--ADC库函数学习笔记_第1张图片

图3:RCC_CFGR寄存器

STM32F1系列--ADC库函数学习笔记_第2张图片

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

(常用模式为独立模式)

STM32F1系列--ADC库函数学习笔记_第3张图片

图5:ADC_CR1寄存器

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

STM32F1系列--ADC库函数学习笔记_第4张图片

 

图6:ADC_CR1寄存器

(数据对其位设置)

 

图7:ADC_CR1寄存器

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

STM32F1系列--ADC库函数学习笔记_第5张图片

 

图8:ADC_CR2寄存器

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

图9:ADC_CR2寄存器

(22和20位,置1)

STM32F1系列--ADC库函数学习笔记_第6张图片

图9:ADC_CR2寄存器

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

STM32F1系列--ADC库函数学习笔记_第7张图片

 

 

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));	 //等待校准结束
}

 

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

你可能感兴趣的:(STM32F1系列--ADC库函数学习笔记)