STM32中ADC外设实现传感器采样

        本文将描述STM32 中的ADC外设实现ADC采样的过程,其中硬件部分的转换就不做过多描述,仅仅对代码部分进行编写。

初始化

        对GPIO和ADC进行初始化

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//使能时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能时钟
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADC的时钟配置
	
	GPIO_InitTypeDef GPIO_InitStructure;//初始化结构体
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输出模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
		
	ADC_InitTypeDef ADC_InitStructure;//ADC初始化结构体
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//单个ADC工作
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//采用右对齐模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//使用内部触发
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;//不连续触发
	ADC_InitStructure.ADC_ScanConvMode = DISABLE;//不扫描
	ADC_InitStructure.ADC_NbrOfChannel = 1;//扫描通道
	ADC_Init(ADC1, &ADC_InitStructure);//初始化ADC
	
	ADC_Cmd(ADC1, ENABLE);//使能ADC

ADC校准

ADC_ResetCalibration(ADC1);
	while (ADC_GetResetCalibrationStatus(ADC1) == SET);
	ADC_StartCalibration(ADC1);
	while (ADC_GetCalibrationStatus(ADC1) == SET);

获取指定通道的值

这里封装一个函数用于指定通道获取,可以增加代码的复用率

uint16_t AD_GetValue(uint8_t ADC_Channel)
{
	ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_55Cycles5);
	ADC_SoftwareStartConvCmd(ADC1, ENABLE);
	while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
	return ADC_GetConversionValue(ADC1);
}

使用

最后在需要调用的地方进行函数初始化和调用即可

uint16_t AD0, AD1, AD2, AD3;

int main(void)
{
	AD_Init();
	
	while (1)
	{
		AD0 = AD_GetValue(ADC_Channel_0);//通道1
		AD1 = AD_GetValue(ADC_Channel_1);//通道2
		AD2 = AD_GetValue(ADC_Channel_2);//通道3
		AD3 = AD_GetValue(ADC_Channel_3);//通道4
		
		Delay_ms(100);
	}
}

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值