主芯片STM32F103ZET6,读取内部温度
V25跟Avg_Slope值 参考文档 stm32f103ze.pdf
Vout = Vref * (D / 2^n) 其中Vref代表参考电压, n为ADC的位数, D为ADC输入的数字信号。
参考 普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets), 先创建一个可以串口打印的项目
AD1 内部温度通道初始化, 连续转化模式打开
设置采样周期
时钟设定
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);
}
}