文章目录
一、前言
CubeMX配置ADC的梳理笔记:STM32H743+CubeMX-梳理MPU的设置
STM32H743内部集成了一个温度传感器,可以使用ADC3_INP18通道测量CPU当前的温度。
官方手册提供计算公式,值得注意的是,该公式成立的条件是参考电压为3.3V!!!!!!!!!!!!!
我使用的是硬石科技的H7开发板,外部参考电压是3.3V。如果芯片的外部参考电压是2.5V的话,我暂时也找不到方法计算MCU的温度!!!!!!!!!!!!!
二、CubeMX
2.1、RCC
2.2、SYS
2.3、ADC
2.4、Clock Configuration
四、代码
4.1、adc.c
函数void MX_ADC3_Init(void)下添加如下用户代码。
最后,在adc.c文件最底部编写函数float get_CPU_Temperature(uint32_t Timeout)。
float get_CPU_Temperature(uint32_t Timeout)
{
uint16_t TS_CAL1;
uint16_t TS_CAL2;
HAL_ADC_Start(&hadc3); /* 启动ADC3的转换 */
if(HAL_OK == HAL_ADC_PollForConversion(&hadc3,Timeout)) /* 等待ADC3的转换,超时时间Timeout */
{
Temp_DC = HAL_ADC_GetValue(&hadc3);
}
else
{
printf("ADC Conversion failed! \n");
}
/* 根据参考手册给的公式计算温度值 */
TS_CAL1 = *(__IO uint16_t *)(0x1FF1E820);
TS_CAL2 = *(__IO uint16_t *)(0x1FF1E840);
Temp_oC = ((110.0f - 30.0f) / (TS_CAL2 - TS_CAL1)) * (Temp_DC - TS_CAL1) + 30.0f;
return Temp_oC;
}
4.2、adc.h
4.3、main.h
4.4、main.c
五、DEBUG
5.1、Debug (printf)Viewer
顺利获取CPU的温度信息。
5.2、观察实时变量
六、细节补充
6.1、ADC的工作频率注意事项
网络上流传着ADC的工作频率不能超过80M,否则会不准。我认为大家可以注意一下这个问题。