while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束 return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果 } 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); delay_ms(5); } return t...
ADC得时钟是由PCLK2(72MHz)经过分频得到的,分频因子由 RCC 时钟配置寄存器RCC_CFGR 的位 15:14ADCPRE[1:0]设置,可以是2/4/6/8分频,一般配置分频因子为6,即6分频得到ADC的输入时钟频率为12MHz。(一般不超过14MHz) 采样周期是确立在输入时钟上的,配置采样周期可以确定使用多少个ADC时钟周期来对电压进行采样采...
MX_ADC1_Init函数用于初始化ADC1,包括配置采样时间、通道等参数。 CalculateADCAverage函数用于连续采集NUM_SAMPLES个ADC值,并计算这些值的平均值。 在main函数中,初始化系统时钟、GPIO和ADC,然后进入无限循环,每隔1秒计算一次ADC采样值的平均值。 这种方法可以有效地减少噪声和干扰,提高ADC采样的准确性。
然后Get_Adc()程序如下: u16 Get_adc() { //设置指定ADC的规则组通道,一个序列,采样时间 ADC_RegularChannelConfig(RHEOSTAT_ADC, RHEOSTAT_ADC_CHANNEL, 1, ADC_SampleTime_56Cycles);; //ADC1,ADC通道,采样时间为239.5周期 ADC_Cmd(RHEOSTAT_ADC, ENABLE); ADC_SoftwareStartConv(RHEOSTAT_ADC); //使能指定...
u16 Get_Adc(u8 ch) //获得某个通道值 { ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_480Cycles ); ADC_SoftwareStartConv(ADC1); while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); return ADC_GetConversionValue(ADC1); } u16 Get_Adc_Average(u8 ch,u8 times)//得到某个通道给定次数采样...
adcx=Get_Adc_Average(ADC_Channel_5,20);//获取通道5的转换值,20次取平均 temp=(float)adcx*(...
;adcx=Get_Adc_Average(ADC_Channel_5,10);//得到ADC转换值temp=(float)adcx*(3.3/4096);//得到ADC电压值adcx=temp;printf("ADC VOL:%fV",temp);//显示电压值printf("\r\n\r\n");LED0=!LED0;t=0;}delay_ms(10);}} 总结 本节DAC的基础知识就先介绍到这,后期还会对代码进行修改以及调试,...
Adc_Init(); //ADC初始化 在main中测量并显示 while(1) { adcx=Get_Adc_Average(ADC_Channel_4,10); //LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值 temp=(float)adcx*(3.3/4096); adcx=temp; sprintf((char *)string,"temp:%.2f",temp); OLED_ShowString(6,3,string,16); } ...
ADC 是12位逐次逼近型模数转换器, 输出数值范围是 0 ~ 2^12 -1(0 ~ 4095),满量程是 3.3V , 分辨率就是最低有效位(LSB)的对应输入电压值。 分辨率 =3300/4095 ≈ 0.806mV。 STM32F10X 系列将 ADC 的转换分为 2 个通道组:规则通道组和注入通道组。规则通道相当于正常运行的程序,而注入通道呢,就相当...
//1000 - 1000*ADC_Get_Average(4,1)/4096; //读取ad值 转化为0-1000 lighVla_up = 1000*ADC_Get_Average(0,1)/4096; //1000 - 1000*ADC_Get_Average(0,1)/4096; //读取ad值 转化为0-1000 lighVla_right = 1000*ADC_Get_Average(5,1)/4096; //1000 - 1000*ADC_Get_Average(5,1)/4096...