STM32H743ZIT6 INTERNAL TEMPERATURE SENSOR READING
I AM USING A STM32H743ZIT6 CONTROLLER IN THERMAL CAMERA BUT I READ A INTERNAL TEMPERATURE 138 CELCIUS BUT IN NUCLEO BOARD INTERNAL TEMPERATURE CAME 35 TO 40 CELCIUS (I AM USING 400 MHZ BOTH NUCLEO BOARD AND THERMAL CAMERA) SO WHY IT CAME IN THERMAL CAMERA INTERNAL TEMPERATURE IS A 138 CELCIUS SO I AM GIVEN A MY CODE BELOW ,SO CAN YOU GIVE ME SOLUTION HOW TO MAINTAIN CURRECT TEMPERATURE OF STM32H743ZIT6
MAIN.C
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_ADC2_Init();
MX_ADC3_Init();
MX_USART3_UART_Init();
while (1)
temperature = Get_Temperature();
HAL_Delay(100);
}
}
float Get_Temperature(void)
{
HAL_ADCEx_Calibration_Start(&hadc3, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);
// Start ADC conversion
HAL_Delay(100);
HAL_ADC_Start(&hadc3);
HAL_ADC_PollForConversion(&hadc3, HAL_MAX_DELAY);
adcValue = HAL_ADC_GetValue(&hadc3);
HAL_ADC_Stop(&hadc3);
// // Read calibration values
cal1 = *TEMPSENSOR_CAL1_ADDR;
cal2 = *TEMPSENSOR_CAL2_ADDR;
// Calculate temperature
temperature_1 = ((float)(TEMPSENSOR_CAL2_TEMP - TEMPSENSOR_CAL1_TEMP) /
(float)(cal2 - cal1)) * (float)(adcValue - cal1) +
TEMPSENSOR_CAL1_TEMP;
return temperature_1;
}
void MX_ADC3_Init(void)
{
ADC_ChannelConfTypeDef sConfig = {0};
/** Common config
*/
hadc3.Instance = ADC3;
hadc3.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV6;
hadc3.Init.Resolution = ADC_RESOLUTION_16B;
hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc3.Init.LowPowerAutoWait = DISABLE;
hadc3.Init.ContinuousConvMode = ENABLE;
hadc3.Init.NbrOfConversion = 1;
hadc3.Init.DiscontinuousConvMode = DISABLE;
hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
hadc3.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc3) != HAL_OK)
{
Error_Handler();
}
/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_TEMPSENSOR;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_810CYCLES_5;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK)
{
Error_Handler();
}
}