前言

硬件的配置由前面的工程递增,会根据目的修改部分控制代码
过程,原理性的东西网上一大把,我就不赘述了,由于懒,主要由图片和代码加少量文字组成就是由于本人较懒,记录主要
源码地址https://gitcode.com/qq_36517072/stm32,第x章为cx文件夹


一、STM32CUBE配置修改

配置ADC1,开启内部温度传感器和基准电压的采集
alt text
alt text
ctrls+generatecode

二、代码和测试

修改freertos.c,在默认任务里对ADC采集并计算打印值

#include "adc.h"
/* USER CODE END Includes */
...
/* USER CODE BEGIN StartDefaultTask */
uint32_t adc_values[2];
double temperate,voltage,volt_ref;
//shell_init();
//udp_client_init();
/* Infinite loop */
for(;;)
{
HAL_GPIO_TogglePin(GPIOF,LED0_Pin);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,10);//等待转换完成,超时时间10ms
adc_values[0]=HAL_ADC_GetValue(&hadc1);
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,10);//等待转换完成,超时时间10ms
adc_values[1]=HAL_ADC_GetValue(&hadc1);
printf("adc_values:%x	%x\r\n",adc_values[0],adc_values[1]);
voltage=(float)adc_values[0]*(3.3/4096); //电压值
volt_ref=(float)adc_values[1]*(3.3/4096);
temperate=(voltage-0.76)/0.0025 + 25; //转换为温度值
printf("voltage:%f	temperate:%f	volt_ref:%f\r\n",voltage,temperate,volt_ref);
osDelay(1000);
}
/* USER CODE END StartDefaultTask */

编译烧录运行后串口每秒打印内部温度传感器和基准电压的值
alt text


总结

主要介绍了STM32 ADC采集内部温度传感器和基准电压的配置和测试

参考

https://blog.csdn.net/qq_46038320/article/details/134146833?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-134146833-blog-149654693.235v43pc_blog_bottom_relevance_base8&spm=1001.2101.3001.4242.1&utm_relevant_index=3