STM32F407外设ADC配置流程及代码示例

STM32F407外设ADC配置流程及代码示例

STM32的ADC(模拟-数字转换器)是STM32微控制器系列中集成的一个关键外设,用于将模拟信号(如温度、压力、光强等传感器输出的电压或电流信号)转换为数字信号,以便微控制器能够处理和分析这些信号。

ADC配置流程:

  1. 时钟配置:
    • 启用GPIOF和ADC的时钟。这是配置任何外设之前的重要步骤。
  2. GPIO配置:
    • GPIO引脚配置为模拟输入模式(GPIO_Mode_AN),这是ADC输入的正确配置。
    • 禁用上拉/下拉电阻(GPIO_PuPd_NOPULL),这通常是ADC输入引脚的好选择。
  3. ADC公共配置:
    • 设置ADC为独立模式,并配置了预分频器、DMA访问模式和双采样延迟。配置ADC_Prescaler_Div4ADC_DMAAccessMode_DisabledADC_TwoSamplingDelay_5Cycles`,不同的STM32系列可能具有不同的预分频器选项和采样延迟选项。
  4. ADC实例配置:
    • 设置ADC的分辨率为12位,禁用了扫描模式和连续转换模式,并设置不使用外部触发转换和数据右对齐。这些设置通常适用于单次转换场景。
    • 设置转换数量为1,这意味着每次转换将只涉及一个通道。
  5. ADC通道配置:
    • 选择ADC的第x个通道(对应的引脚),并设置采样时间为3个ADC时钟周期。确保采样时间适合应用需求,因为较长的采样时间可以提高转换精度,但也会降低转换速率。
  6. 使能ADC:
    • 最后使能ADC。在调用ADC_Cmd(ADCx, ENABLE);之后,您应该等待ADC准备就绪,这通常通过检查ADC的状态寄存器来完成。

代码示例

void ADC_Config(void)
{
	ADC_CommonInitTypeDef ADC_CommonInitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;
	ADC_InitTypeDef ADC_InitStructure;

	//1.打开时钟  PF7 -- ADC3_IN5
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3, ENABLE);
	
	//2.配置引脚
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
	GPIO_Init(GPIOF, &GPIO_InitStructure);

	//3.配置ADC参数
	ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;	//独立模式
	ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
	ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;		  //不使用DMA
	ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
	ADC_CommonInit(&ADC_CommonInitStructure);
	
	//4.配置ADC的通道
	ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//ADC的分辨率为12位											//转换精度  0~4095
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;			//不扫描
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;		//不连续
	ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None; //不使用外部触发
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;	//右对齐
	ADC_InitStructure.ADC_NbrOfConversion = 1;				//转换数量
	ADC_Init(ADC3, &ADC_InitStructure);
	
	//5.选择ADC的通道
	ADC_RegularChannelConfig(ADC3, ADC_Channel_5, 1, ADC_SampleTime_3Cycles);
	
	//6.使能ADC3
	ADC_Cmd(ADC3, ENABLE);
}
posted @ 2024-07-13 21:06  琨为玉也  阅读(454)  评论(0编辑  收藏  举报