设计需求
使用ADC,获取芯片内部的温度
一、基础知识
STM32MP157可以通过ADC2的通道19设置为获取芯片内部温度
二、硬件设计
不涉及电路设计
三、STM32CubeIDE开发
MX设置
ADC有两个时钟方案:一个是来自adc_hclk(AHB时钟),一个是来自adc_ker_ck(ADC Kernel时钟)。两个时钟源独立且异步
程序设计
创建“ DemoDriver”目录,在里面新建“ driver_adc.c”,在该文件里调用“ HAL_ADC_Start()”启动
ADC,调用“ HAL_ADC_PollForConversion()”等待 ADC 转换结束,调用“ HAL_ADC_GetValue()”获取 ADC 的
结果,最后再将 ADC 值转换为温度值,转换公式在手册写有如下:
driver_adc.h
#ifndef DRIVER_ADC_H_
#define DRIVER_ADC_H_
#include "main.h"
#include "stm32mp1xx_hal.h"
extern ADC_HandleTypeDef hadc2;
int GetTemperatureValue(void);
#endif /* DRIVER_ADC_H_ */
driver_adc.c
#include "driver_adc.h"
#include "stm32mp1xx_hal_adc.h"
//获取ADC的采样到的内部温度
int GetTemperatureValue(void){
uint16_t nData=0;
int nValue=0;
HAL_ADC_Start(&hadc2);//开启ADC
HAL_ADC_PollForConversion(&hadc2,100);//轮询查看转换是否完成
//第二个参数表示超时时间,防止CPU卡死
nData=HAL_ADC_GetValue(&hadc2);//获取采集数据的值
//157的参考电压是3.3V;采样位是16bit
nValue=__HAL_ADC_CALC_TEMPERATURE(3300UL,nData,ADC_RESOLUTION_16B);
return nValue;
}
main.c
项目结构
运行结果