tryp low power standby mode

This commit is contained in:
Yunhorn 2024-06-28 20:03:11 +08:00
parent 3edb98355e
commit 01f2be75ed
5 changed files with 69 additions and 3 deletions

View File

@ -85,7 +85,20 @@ int main(void)
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LoRaWAN_Init();
if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) == RESET)
{
MX_LoRaWAN_Init();
} else {
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
//MX_LoRaWAN_Init();
SystemApp_Init();
UTIL_TIMER_Start(&TxTimer);
MX_LoRaWAN_Process();
}
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */

View File

@ -51,6 +51,19 @@ const struct UTIL_LPM_Driver_s UTIL_PowerDriver =
/* USER CODE BEGIN PTD */
extern RTC_HandleTypeDef hrtc;
void CPUcontextSave(void); /* this function is implemented in startup assembly file */
void SystemClock_Config(void);
void PeriphCommonClock_Config(void);
/* Private function prototypes -----------------------------------------------*/
//static void ExitLowPower(void);
#if (CFG_LPM_STANDBY_SUPPORTED != 0)
static void ExitLowPower_standby(void);
#endif
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
@ -80,6 +93,31 @@ void PWR_EnterOffMode(void)
/* USER CODE BEGIN EnterOffMode_1 */
/* USER CODE END EnterOffMode_1 */
/**
* The systick should be disabled for the same reason than when the device enters stop mode because
* at this time, the device may enter either OffMode or StopMode.
*/
HAL_SuspendTick();
__HAL_RCC_CLEAR_RESET_FLAGS();
/************************************************************************************
* ENTER OFF MODE
***********************************************************************************/
/*
* There is no risk to clear all the WUF here because in the current implementation, this API is called
* in critical section. If an interrupt occurs while in that critical section before that point,
* the flag is set and will be cleared here but the system will not enter Off Mode
* because an interrupt is pending in the NVIC. The ISR will be executed when moving out
* of this critical section
*/
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
/* Enter the Standby mode */
HAL_PWR_EnterSTANDBYMode();
/* USER CODE BEGIN PWR_EnterOffMode_2 */
/* USER CODE END PWR_EnterOffMode_2 */
return;
}
void PWR_ExitOffMode(void)
@ -87,6 +125,13 @@ void PWR_ExitOffMode(void)
/* USER CODE BEGIN ExitOffMode_1 */
/* USER CODE END ExitOffMode_1 */
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
HAL_ResumeTick();
/* USER CODE BEGIN PWR_ExitOffMode_2 */
/* USER CODE END PWR_ExitOffMode_2 */
return;
}
void PWR_EnterStopMode(void)

View File

@ -30,7 +30,7 @@ void sts_weight_scale_init(void)
{
HX711_Init();
Get_GrossWeight();
HAL_Delay(500);
HAL_Delay(100);
Get_GrossWeight();
}

View File

@ -102,7 +102,7 @@ void SystemApp_Init(void)
UTIL_TIMER_Init();
SYS_TimerInitialisedFlag = 1;
/* Initializes the SW probes pins and the monitor RF pins via Alternate Function */
DBG_Init();
//DBG_Init();
/*Initialize the terminal */
UTIL_ADV_TRACE_Init();

View File

@ -37,6 +37,9 @@
/* USER CODE BEGIN Includes */
#ifdef STS_WS
#include "stm32_lpm.h"
#include "timer_if.h"
#include "utilities_def.h"
#include "sts_weight_scale.h"
#endif
/* USER CODE END Includes */
@ -734,6 +737,9 @@ static void OnTxData(LmHandlerTxParams_t *params)
}
}
/* USER CODE END OnTxData_1 */
HAL_Delay(2000);
UTIL_LPM_SetOffMode((1 << CFG_LPM_APPLI_Id), UTIL_LPM_ENABLE);
UTIL_LPM_SetOffMode((1 << CFG_LPM_UART_TX_Id), UTIL_LPM_ENABLE);
}
static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
@ -764,6 +770,8 @@ static void OnJoinRequest(LmHandlerJoinParams_t *joinParams)
APP_LOG(TS_OFF, VLEVEL_H, "###### U/L FRAME:JOIN | DR:%d | PWR:%d\r\n", joinParams->Datarate, joinParams->TxPower);
}
/* USER CODE END OnJoinRequest_1 */
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
}
static void OnBeaconStatusChange(LmHandlerBeaconParams_t *params)