#申请原创#
STM32WB09KE芯片是自带芯片温度测量的,本交测试体验就来获取一下芯片温度,但不知道什么原因,计算出来的数据与实际误差很大,但我用热风枪吹芯片,采集到的adc值是有变化的,具体什么原因,暂时还不得清楚,下面先记录一下获取温度值的过程,望大侠指点一下。
要获取温度,首先用stm32 cubemx生成初始化代码。adc采用dma方式获取。下面看配置图片。
接下来就是打开工程,添加代码了,首先定义两个宏
#define VDDA_APPLI (3300UL) // mV
#define ADC_BUFFER_SIZE (1) // Only temperature sensor data
再定义两个变量
uint32_t adc_buffer[ADC_BUFFER_SIZE]; // DMA buffer
float temperature_celsius = 0;
接着要做的就是开始DMA
// Start ADC with DMA
if (HAL_ADC_Start_DMA(&hadc1, adc_buffer, ADC_BUFFER_SIZE) != HAL_OK) {
printf("ADC DMA Start Error!\n");
Error_Handler();
}
再开始ADC转换
/* Start ADC group regular conversion */
if (HAL_ADC_Start(&hadc1) != HAL_OK)
{
/* Error: ADC conversion start could not be performed */
Error_Handler();
}
最后转换成温度值
uint32_t raw_adc_value = adc_buffer[0];
// 计算温度
printf("adc: %d C\r\n", raw_adc_value);
printf("c30: %d C\r\n", (int32_t)*TEMPSENSOR_C30_ADDR);
printf("tck: %d C\r\n", (int32_t)*TEMPSENSOR_TCK_ADDR);
int temperature = __LL_ADC_CALC_TEMPERATURE(raw_adc_value, LL_ADC_DS_DATA_WIDTH_12_BIT);
printf("Temperature: %d C\r\n", temperature);
但最打印出来是只有几度
根据公式计算,也只有几度
问题暂时没有找到,有请朋友们指点一下。
|