Sleep mode with FreeRTOS enabled
I want to be able to make the STM32G474 go to sleep when certain conditions are met.
I've created a small project to test the feature. The `app-freertos.c` file is like this:
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"
#include "usart.h"
#include "lptim.h"
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
.name = "defaultTask",
.priority = (osPriority_t) osPriorityNormal,
.stack_size = 128 * 4
};
void StartDefaultTask(void *argument);
void MX_FREERTOS_Init(void);
static uint32_t rccCfgrSave;
static uint32_t rccCrSave;
__weak void PreSleepProcessing(uint32_t ulExpectedIdleTime)
{
HAL_UART_Transmit(&huart3, "pre sleep\r\n", 11, 10);
HAL_SuspendTick();
HAL_LPTIM_TimeOut_Start_IT(&hlptim1, 0xFFFF, ulExpectedIdleTime);
}
__weak void PostSleepProcessing(uint32_t ulExpectedIdleTime)
{
HAL_LPTIM_TimeOut_Stop_IT(&hlptim1);
HAL_ResumeTick();
HAL_UART_Transmit(&huart3, "post sleep\r\n", 12, 10);
}
void MX_FREERTOS_Init(void) {
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
}
void StartDefaultTask(void *argument)
{
for(;;)
{
HAL_UART_Transmit(&huart3, "test\r\n", 7, 10);
osDelay(2000);
}
}The default task `StartDefaultTask` works as expected, but the `PreSleepProcessing`is always being called, and `PostSleepProcessing` is NEVER called.
I've followed many videos and tutorials from ST and I'm sure I did not overlooked anything.
Any help is appreciated!
Thanks.
