2025-04-07 10:08 AM - last edited on 2025-04-07 1:27 PM by mƎALLEm
Hello,
I'm trying to measure cyclic temperature on a dedicated task with FreeRTOS. For that, I set my ADC with DMA, based on the example provided here (at DMA section: https://wiki.st.com/stm32mcu/wiki/Getting_started_with_ADC#Configure_DMA)
For now, my task is as follows
#define T1 30.0
#define T2 110.0
/*....*/
/*Some other stuff*/
/*....*/
void StartSurvTemp(void const * argument)
{
/* USER CODE BEGIN StartSurvTemp */
float cal_temp1 = (float) *(volatile uint16_t*) 0x1FF0F44C; //Cal temp 1
float cal_temp2 = (float) *(volatile uint16_t*) 0x1FF0F44E; //Cal temp 2
char buffer[50];
float temperature = 0.0;
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&raw_temp, 1);
/* Infinite loop */
for(;;)
{
temperature = T1 + (T2 - T1) * (raw_temp - cal_temp1) / (cal_temp2 - cal_temp1);
sprintf(buffer, "Raw temp : %lu, Computed temp (Celsius) : %.4f\r\n", raw_temp, temperature);
HAL_UART_Transmit(&huart3, buffer, strlen(buffer), 10);
osDelay(1000);
}
/* USER CODE END StartSurvTemp */
}
I have two major issues with this code.
First, when it's the first run of the code, I have strange calculated values, and it's solved with a press on the reset key
Raw temp : 939, Computed temp (Celsius) : 37090607759360.0000
Raw temp : 943, Computed temp (Celsius) : 7212297728.0000
Raw temp : 943, Computed temp (Celsius) : 6908214272.0000
Raw temp : 946, Computed temp (Celsius) : 7679472828416.0000
Raw temp : 947, Computed temp (Celsius) : 1783121280.0000
<<board reset>>
Raw temp : 947, Computed temp (Celsius) : 29.3626
Raw temp : 945, Computed temp (Celsius) : 30.2532
Raw temp : 946, Computed temp (Celsius) : 30.1688
Raw temp : 948, Computed temp (Celsius) : 30.0001
Raw temp : 949, Computed temp (Celsius) : 29.9157
The second one is about the value itself, Indeed, I tried to freeze the board with a freeze spray, and the temperature grew.
Raw temp : 910, Computed temp (Celsius) : 33.2068
Raw temp : 917, Computed temp (Celsius) : 32.6161
Raw temp : 921, Computed temp (Celsius) : 32.2785
<<Freeze spray>>
Raw temp : 853, Computed temp (Celsius) : 38.0169
Raw temp : 838, Computed temp (Celsius) : 39.2827
Raw temp : 840, Computed temp (Celsius) : 39.1140
Do you have any idea?
Thanks in advance
2025-04-07 12:07 PM - edited 2025-04-07 12:08 PM
Hello,
Do you have the same behaviours without RTOS?
2025-04-07 12:36 PM
Hello,
Yes, same behaviours without RTOS.
2025-04-07 1:26 PM
So if the behavior is reproduced without RTOS, I suppose there is no reason to talk about RTOS.
keep the discussion focused on the temperature reading.
This thread will be moved to STM32 MCU products forum board.
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.