STM32H743+CubeMX-使用ADC(16bit分辨率)模数转换器读取CPU的温度(串行方式)

这篇博客详细记录了如何使用STM32CubeMX配置STM32H743的ADC,通过内部温度传感器获取CPU温度。文中提到,必须注意ADC工作时的频率限制,并提供了完整的代码示例,包括`MX_ADC3_Init`函数的用户代码和`get_CPU_Temperature`函数,用于计算温度。博主还提醒,公式计算温度的前提是参考电压为3.3V,对于不同参考电压的情况,需要找到相应的计算方法。
摘要由CSDN通过智能技术生成

一、前言


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,否则会不准。我认为大家可以注意一下这个问题。
在这里插入图片描述

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值