STM32的ADC配置

	STM32的ADC是:12 位 ADC 是一种逐次逼近型模拟数字转换器。它有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。

模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值值。【详细介绍可以看数据手册中文版第16章节】
利用原子的精英开发板实现ADC1的通道1进行单次转化,测量外部电压。
STM32的ADC配置_第1张图片

	void  Adc_Init(void)
	{
		//第一步:开启PA时钟(属于GPIOA即APB2的时钟)和ADC1的时钟,设置APB1为输入模式
		GPIO_InitTypeDef GPIO_InitStructure;
		ADC_InitTypeDef ADC_InitStructure;
		
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1,ENABLE);
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
		GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
		GPIO_Init(GPIOA,&GPIO_InitStructure); 
		
		//第二步:复位iADC1,并设置ADC1的分频因子
		RCC_ADCCLKConfig(RCC_PCLK2_Div6);
		ADC_DeInit(ADC1);
		
		//第三步:初始化ADC1的相关参数,设置ADC1的工作模式以及规则序列相关信息。
		ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //工作在单一模式而不是循环模式
		ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//右对齐
		ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//转换是由软件转换而不是硬件转换
		ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//独立模式
		ADC_InitStructure.ADC_NbrOfChannel = 1;			//顺序进行规则转化的通道数目
		ADC_InitStructure.ADC_ScanConvMode = DISABLE;				//扫描模式关闭,扫描模式是y用来扫描一组模拟通道,我们这里用一个通道,所以用单一模式就ok,用不到扫描模式。
		ADC_Init(ADC1,&ADC_InitStructure);//ADC1初始化
		
		//第四步:使能ADC1并校准
		ADC_Cmd(ADC1,ENABLE);
		ADC_GetResetCalibrationStatus(ADC1);//校准复位ADC1
		while(ADC_GetResetCalibrationStatus(ADC1));	//检测ADC1校准复位是否完成
		
		ADC_StartCalibration(ADC1);//,脚注复位完成,开始校准
		while(ADC_GetCalibrationStatus(ADC1));//检测是否校准完成
	}

	u16 Get_Adc(u8 ch)
	{
		//第五步:配置规则通道参数,设置指定ADC的规则通道,一个序列,采样时间		ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);//ADC1,ADC通道1,采样时间HSI239.5个周期  
		//第六步:开启软件转换
		ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC的软件转换功能,我们的是ADC1		
		while(ADC_GetSoftwareStartConvStatus(ADC1));//检测软件转换是否完成
		return ADC_GetDualModeConversionValue();//返回最后一次读到的AD值。 返回最近一次规则组的转换结果。
	}
	
//为了AD的转换值更加准确,我们采用多次采集求平均的方式
	u16 Get_Adc_Average(u8 ch,u8 times)
	{
		u32 temp_val=0;
		u8 t;
		for(t=0;t

你可能感兴趣的:(stm32)