普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)

简介

主芯片STM32F103ZET6,读取内部温度

其他知识

内部温度所在ADC通道

普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)_第1张图片

温度计算公式

普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)_第2张图片
V25跟Avg_Slope值 参考文档 stm32f103ze.pdf
普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)_第3张图片

电压计算公式

Vout = Vref * (D / 2^n) 其中Vref代表参考电压, n为ADC的位数, D为ADC输入的数字信号。

实现步骤

创建项目

参考 普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets), 先创建一个可以串口打印的项目

获取内部温度前初始化

AD1 内部温度通道初始化, 连续转化模式打开
普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)_第4张图片
设置采样周期
普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)_第5张图片
时钟设定
普中STM32-PZ6806L开发板(HAL库函数实现-读取内部温度)_第6张图片

添加用户代码

main.c

float temp_celsius_calculator(uint16_t value)
{
	// {(V25 - VSENSE) / Avg_Slope} + 25.
	float res = 0.0;
	float v25 = 1.43, avg_slope = 4.3/1000;
	float vref = 3.3;
	float vsense = vref * ((float)(value) / 4096.0);
	
	res = ((v25 - vsense) / avg_slope) + 25.0;
	
	return res;
}

int main()
{
uint16_t val = 0;
float celsius = 0;

HAL_ADC_Start(&hadc1);  // ADC开启
...

...

while(1)
{
	HAL_ADC_PollForConversion(&hadc1, 0xffff);// 触发转化
    val = HAL_ADC_GetValue(&hadc1); // 读取转化值
    celsius = temp_celsius_calculator(val); 
		
	printf("read_value: %d, %0.2f ℃\r\n", val, celsius); // 打印到串口
	HAL_Delay(2000);
}
}

共赏

代码

不需要下载, 基本代码上面都提供了

参考

普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)

你可能感兴趣的:(普中STM32-PZ6806L,stm32,嵌入式硬件,单片机)