2023-04-08 11:43 AM - edited 2023-11-20 08:42 AM
I have completed the code and uploaded it to the following GitHub repository: https://github.com/gamarrita/Nucleo-L452_Azure_RTOS/tree/master/01_stop_mode_1
In my code, I am using the RTC and its wakeup capability to control sleep time. I am only using one thread, which sleeps for 5 seconds and then wakes up to sleep again.
The code works fine if I turn the power off and on again, but the CPU keeps entering and exiting a very high frequency if I just press the run or debug button.
Why stop mode works fine in one situation and fails in others?
And more important, how I can figure out, debug technique, to find out what is making CPU wakeup?
void App_ThreadX_LowPower_Timer_Setup(ULONG count)
{
/* USER CODE BEGIN App_ThreadX_LowPower_Timer_Setup */
// Wakeup Counter = 2048
g_stop_ticks = count;
HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,
(g_stop_ticks * 2048) / TX_TIMER_TICKS_PER_SECOND,
RTC_WAKEUPCLOCK_RTCCLK_DIV16);
/* USER CODE END App_ThreadX_LowPower_Timer_Setup */
}
/**
* @brief App_ThreadX_LowPower_Enter
* @param None
* @retval None
*/
void App_ThreadX_LowPower_Enter(void)
{
/* USER CODE BEGIN App_ThreadX_LowPower_Enter */
HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_RESET);
HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);
/* USER CODE END App_ThreadX_LowPower_Enter */
}
/**
* @brief App_ThreadX_LowPower_Exit
* @param None
* @retval None
*/
void App_ThreadX_LowPower_Exit(void)
{
/* USER CODE BEGIN App_ThreadX_LowPower_Exit */
HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
// SystemClock_Config();
HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_SET);
/* USER CODE END App_ThreadX_LowPower_Exit */
}
/**
* @brief App_ThreadX_LowPower_Timer_Adjust
* @param None
* @retval Amount of time (in ticks)
*/
ULONG App_ThreadX_LowPower_Timer_Adjust(void)
{
/* USER CODE BEGIN App_ThreadX_LowPower_Timer_Adjust */
return g_stop_ticks;
/* USER CODE END App_ThreadX_LowPower_Timer_Adjust */
}
/* USER CODE BEGIN 1 */
VOID refresh_thread_entry(ULONG initial_input)
{
while(1)
{
tx_thread_sleep(500);
}
}
2024-01-15 12:09 AM
I got it working here by simply ignore all attempts to sleep for 0 ticks and changing to 1000 ticks/sec.