[GD32]基于GD32F4的ADC转换

1.ADC输入范围

ADC输入范围:Vrefn≤Vin≤Vrefp


在这里插入图片描述
这里我用的是gd32f407z,Vrefp在第32个管角。Vrefp一定要接!一定要接!
前面忘接Vrefp,ADC不管是外部还是内部通道,输出一直为0,当时一度怀疑是代码写错了,结果是硬件问题。

2.实现代码

初始化时钟及引脚

//初始化时钟
rcu_periph_clock_enable(RCU_GPIOB);
rcu_periph_clock_enable(RCU_ADC0);
adc_clock_config(ADC_ADCCK_PCLK2_DIV4);

//初始化引脚
gpio_mode_set(GPIOB, GPIO_MODE_ANALOG, GPIO_PUPD_NONE,GPIO_PIN_0);  

这里使用PB0来采集电压,选择ADC0外设

初始化ADC

adc_data_alignment_config(ADC0,ADC_DATAALIGN_RIGHT);//右对齐
adc_channel_length_config(ADC0,ADC_REGULAR_CHANNEL,1);  //配置使用ADC规则通道
adc_sync_mode_config(ADC_SYNC_MODE_INDEPENDENT); //独立模式
adc_sync_delay_config(ADC_SYNC_DELAY_5CYCLE);//两个采样阶段之间的延迟5个时钟
adc_dma_mode_disable(ADC0);  //DMA失能
adc_special_function_config(ADC0,ADC_SCAN_MODE,DISABLE);//非扫描模式	
adc_special_function_config(ADC0,ADC_CONTINUOUS_MODE,DISABLE);//关闭连续转换
adc_resolution_config(ADC0,ADC_RESOLUTION_12B);  //12位分辨率
adc_external_trigger_config(ADC0,ADC_REGULAR_CHANNEL,EXTERNAL_TRIGGER_DISABLE);  //外部触发禁止
adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_8, ADC_SAMPLETIME_56 );//配置ADC规则通道

adc_enable(ADC0);
delay_1ms(1U);
adc_calibration_enable(ADC0);//adc自校准

这里PB0对应ADC通道是通道8

获取ADC转化值

//ch为通道ADC_CHANNEL_x
u16 Get_Adc(u8 ch)   
{
  adc_software_trigger_enable(ADC0,ADC_REGULAR_CHANNEL);  //使用软件触发
	while(!adc_flag_get(ADC0, ADC_FLAG_EOC ))
	{
		; //等待转换结束
	}
  adc_flag_clear(ADC0,ADC_FLAG_EOC);
  return (adc_regular_data_read(ADC0) & 0xfff);	//返回最近一次规则组的转换结果
}

ADC求平均

//ch为通道,time为平均次数
u16 Get_Adc_Average(u8 ch,u8 times)
{
	u32 temp_val=0;
	u8 t;	
	for(t=0;t<times;t++)
	{		
		temp_val+=Get_Adc(ch);
	}
	return temp_val/times;
}

ADC数值转换为电压

temp=Get_Adc_Average(ch,20);
adcx=(temp*3.3)>>12;//temp*3.3后右移12位

初始化ADC时将ADC设置为12位分辨率,即ADC数值为一个12位二进制数
ADC的参考电平为3.3V
电压值=(ADC数值*3.3)<<12

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值