芯片:STM32F103C8
1、CubeMX中设置
2、自动生成代码后,打开main.c
1、添加全局变量
uint16_t AD_Value = 0;
2、在while(1)中添加如下代码
HAL_ADC_Start(&hadc1); //启动ADC装换
HAL_ADC_PollForConversion(&hadc1, 50); //表示等待转换完成,第二个参数表示超时时间,单位ms./* Check if the continous conversion of regular channel is finished */
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
//就是判断转换完成标志位是否设置,HAL_ADC_STATE_REG_EOC表示转换完成标志位,转换数据可用
{
/*##-3- Get the converted value of regular channel ######################*/AD_Value = HAL_ADC_GetValue(&hadc1); //读取ADC转换数据,数据为12位。
//根据公式转换温度,1400可自行设置,调整误差。AD_Value*3300/4096为将转换后的数据转化为电压,单位为mV,参考电压为3.3V
printf("MCU Temperature : %.1f度\r\n",((AD_Value*3300/4096-1400)/2.5+25));
}
HAL_Delay(1000);
测试结果:精度是不高,但了胜于无。