思路大概就是先定义一个get_adc_average的函数,在函数里用 for(t=0;t<times;t++) { temp_val+=Get_Adc(); } 实现求平均值。然后Get_Adc()程序如下: u16 Get_adc() { //设置指定ADC的规则组通道,一个序列,采样时间 ADC_RegularChannelConfig(RHEOSTAT_ADC, RHEOSTAT_ADC_CHANNEL, 1, ADC_SampleTime_5...
unsignedintgetadc_value(void){/* 配置ADC通道1 */ADC1->HC[0] =0;/* 关闭转换结束中断 */ADC1->HC[0] |= (1<<0);/* 通道1 */while((ADC1->HS & (1<<0)) ==0);/* 等待转换完成 */returnADC1->R[0];/* 返回ADC值 */} 获取ADC原始值(多次取平均) unsignedshortgetadc_average(...
value = Get_Adc_Average(ADC_Channel_5, 20); //显示采样之后的原始值 LCD_ShowxNum(134, 130, value, 4, 16, 0); temp = (float)value * (3.3 / 4096); value = temp; LCD_ShowxNum(134, 150, value, 1, 16, 0); //小数部分 temp = temp - value; temp *= 1000; LCD_ShowxNum(...
代码: //平滑均值滤波#define N 10int value_buf[N];int sum=0;int curNum=0; int moveAverageFilter(){if(curNum < N){value_buf[curNum] = HAL_ADC_GetValue(&hadc1);sum += value_buf[curNum];curNum++;return sum/curNum;}else{sum -= sum/N;sum += HAL_ADC_GetValue(&hadc1);ret...
{ i++; /* 获取通道19的转换值,10次取平均 */ adcx = adc_get_result_average(ADC_ADCX_CHY, 10); /* 获取计算后的带小数的实际电压值,比如3.1111 */ temp = (float)adcx * (3.3 / 65536); printf("ADC Value = %d, Voltage = %.3fV\r\n", adcx, temp); if(i == 5) { i = ...
u16 ADC_GetAverageConvValue(u8 channel,u8 times) { u8 i = 0; u32 temp = 0; for(;i < times;i++) { temp += ADC_GetConvValue(channel); } return (u16)(temp/times); } ADC_SampleValue2ReadableValue() double ADC_SampleValue2ReadableValue(u16 sampleValue) ...
;HAL_ADC_PollForConversion(&hadc1,10);//等待规则通道转换完成return(u16)HAL_ADC_GetValue(&h...
uint32_t ADC_Get_Average(uint8_t ch,uint8_t times){ ADC_ChannelConfTypeDef sConfig; //通道初始化 uint32_t value_sum=0; uint8_t i; switch(ch) //选择ADC通道 { case 0:sConfig.Channel = ADC_CHANNEL_0;break; case 1:sConfig.Channel = ADC_CHANNEL_1;break; case 2:sConfig.Channel...
ADC_Value[i]=sum[i]/M;//计算平均值 } #else void Get_ADC_AverageValue(void) { uint32_t sum; uint16_t i; for(i=0;i<M;i++) sum+=ADC_ValBuf[i]; ADC_Value=sum/N;//计算平均值 } #endif /* USER CODE END 1 */ (3)最后我们就可以编写main函数了Length变量是数据的个数,所以直...
new_Value = get_ad;// 获取采样值 if(abs(new_Value - Value) > A) returnValue;// abs取绝对值函数 returnnew_Value; } 二、中位值滤波法 1、方法: 连续采样N次(N取奇数),把N次采样值按大小排列 取中间值为本次有效值 2、优点: 能有效克服因偶然因素引起的波动干扰 ...