if(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)) { return 0; } temp_adc_value = ADC_GetConversionValue(ADC1); // T = (Vsense -V15)/AVG_Slope +25 , //Vsense = (adc_value *3.3)/4096, 12bit ADC // V25 = 0.76,AVG_Slope = 2.5mV/? temperature = ((temp_adc_value * 3.3f)/4096.0f - 0.76f) *10000/2.5f + 250 ; temp_buf[temp_index%TEMP_COLLECT_NUM] = temperature; temp_index++; // 2é?ˉ?à′?oó2??aê????ù?μ???? if(temp_index >= TEMP_COLLECT_NUM) { avg_flag = 1; } ADC_TempSensorVrefintCmd(ENABLE); ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_15Cycles); ADC_SoftwareStartConv(ADC1); if((avg_flag == 1) && (TEMP_COLLECT_NUM > 2)) { temp_min = temp_buf[0]; // è¥μ?×?′ó?μ?¢×?D??μ ?ó???ù for(int i= 0; i<TEMP_COLLECT_NUM; i++) { temp_sum += temp_buf[i]; if(temp_buf[i] < temp_min) { temp_min = temp_buf[i]; } if(temp_buf[i] > temp_max) { temp_max = temp_buf[i]; } } temp_sum -= temp_max; temp_sum -= temp_min; return (temp_sum / (TEMP_COLLECT_NUM - 2)); } return 0; }
时间: 2024-04-28 13:25:42 浏览: 145
ADC.rar_stm32 adc
这段代码是用于读取温度传感器的数据,并计算出平均温度。它使用了STM32的ADC模块来读取温度传感器的电压值,然后根据电压值和一些常量计算出温度值。其中,温度传感器的电压值通过ADC_GetConversionValue函数获取,而ADC_GetFlagStatus函数用于检查ADC转换是否完成。此外,该代码还使用了一个循环数组temp_buf来存储多次读取的温度值,以便计算平均值。最后,该函数返回计算出的平均温度值。
阅读全文