low power improvement

This commit is contained in:
Yunhorn 2024-05-22 14:16:21 +08:00
parent e75eea330c
commit 516786360c
10 changed files with 36 additions and 32845 deletions

View File

@ -114,8 +114,8 @@ void MX_TOF_Init(void);
#define MEMS_RESET_Pin GPIO_PIN_4
#define MEMS_RESET_GPIO_Port GPIOB
#define POWER_OFF HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET)
#define POWER_ON HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET)
#define PME_OFF HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET)
#define PME_ON HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET)
#define TOF250_I2C_ADDR (0x52<<1)
#if defined(STM32WLE5xx) || defined(STM32WL55xx)

View File

@ -105,8 +105,8 @@
#define MajorVer 24U
#define MinorVer 03U
#define SubMinorVer 07U
#define MinorVer 05U
#define SubMinorVer 22U
#define FirmwareVersion 3U
#define YUNHORN_STS_MAX_NVM_CFG_SIZE 64U
#define YUNHORN_STS_AC_CODE_SIZE 20U

View File

@ -111,7 +111,7 @@ void MX_GPIO_Init(void)
#endif
__HAL_RCC_GPIOB_CLK_ENABLE();
/*Configure GPIO pins : TOF_C_INT_Pin */
#if defined(TOF_1)
#if (defined(TOF_1) && defined(TOF_2))
GPIO_InitStruct.Pin = TOF_C_INT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
@ -119,7 +119,7 @@ void MX_GPIO_Init(void)
#endif
/*Configure GPIO pins : TOF_L_INT_Pin */
#if defined(TOF_2)
#if (defined(TOF_2)&&!defined(TOF_1))
GPIO_InitStruct.Pin = TOF_L_INT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
@ -134,7 +134,7 @@ void MX_GPIO_Init(void)
#endif
/*Configure GPIO pins : TOF_C_XSHUT_Pin */
#if defined(TOF_1)
#if (defined(TOF_1) && defined(TOF_2))
GPIO_InitStruct.Pin = TOF_C_XSHUT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
@ -142,7 +142,7 @@ void MX_GPIO_Init(void)
HAL_GPIO_Init(TOF_C_XSHUT_GPIO_Port, &GPIO_InitStruct);
#endif
/*Configure GPIO pins : TOF_L_XSHUT_Pin */
#if defined(TOF_2)
#if (defined(TOF_2)&&!defined(TOF_1))
GPIO_InitStruct.Pin = TOF_L_XSHUT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
@ -169,7 +169,7 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pin = MEMS_POWER_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Pull = GPIO_PULLDOWN; // PULL DOWN TO DISABLE TPS
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(MEMS_POWER_GPIO_Port, &GPIO_InitStruct);
@ -202,12 +202,12 @@ HAL_GPIO_Init(SOAP_SWITCH_GPIO_Port, &GPIO_InitStruct);
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(EXTI1_IRQn);
#endif
#if defined(TOF_1)
#if (defined(TOF_1) && defined(TOF_2))
HAL_NVIC_SetPriority(TOF_C_INT_EXTI_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TOF_C_INT_EXTI_IRQn);
#endif
#if defined(TOF_2)
#if (defined(TOF_2)&&!defined(TOF_1))
HAL_NVIC_SetPriority(TOF_L_INT_EXTI_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TOF_L_INT_EXTI_IRQn);
#endif

View File

@ -80,71 +80,30 @@ const struct UTIL_LPM_Driver_s UTIL_PowerDriver =
void PWR_EnterOffMode(void)
{
#if 0
//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); /* LED OFF */
HAL_SuspendTick();
HAL_UART_DeInit(&huart2);
//LL_PWR_ClearFlag_WU();
//__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_LPMODES);
//LL_PWR_ClearFlag_WU();
HAL_PWR_EnterSTANDBYMode();
#endif
POWER_OFF;
//HAL_UART_DeInit(&huart2);
//vcom_DeInit();
HAL_GPIO_DeInit(GPIOA,GPIO_PIN_All);
HAL_GPIO_DeInit(GPIOB,GPIO_PIN_All);
HAL_GPIO_DeInit(GPIOC,GPIO_PIN_All);
HAL_SuspendTick();
HAL_PWR_EnterSTANDBYMode();
#if 0
LED_OFF;
HAL_UART_DeInit(&huart2);
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);//禁用所有使用的唤醒源:PWR_WAKEUP_PIN1 connected to PA.00
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//清除所有相关的唤醒标志
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//启用连接到PA.00的WakeUp Pin
HAL_PWR_EnterSTANDBYMode();//进入待机模式
/* USER CODE BEGIN EnterOffMode_1 */
HAL_PWR_EnterSTANDBYMode();
/* USER CODE END EnterOffMode_1 */
#endif
}
void PWR_ExitOffMode(void)
{
/* USER CODE BEGIN ExitOffMode_1 */
#if 1
POWER_ON;
HAL_ResumeTick();
//__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
//HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); /* LED ON */
return;
#endif
#if 0
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
LED_ON;
HAL_Delay(200);
#endif
/* USER CODE END ExitOffMode_1 */
}
void PWR_EnterStopMode(void)
{
/* USER CODE BEGIN EnterStopMode_1 */
POWER_OFF;
//HAL_UART_DeInit(&huart2);
//vcom_DeInit();
PME_OFF;
HAL_GPIO_DeInit(GPIOA,GPIO_PIN_All);
HAL_GPIO_DeInit(GPIOB,GPIO_PIN_All);
HAL_GPIO_DeInit(GPIOC,GPIO_PIN_All);
/* USER CODE END EnterStopMode_1 */
HAL_SuspendTick();
HAL_SuspendTick();
/* Clear Status Flag before entering STOP/STANDBY Mode */
LL_PWR_ClearFlag_C1STOP_C1STB();
LL_PWR_ClearFlag_C1STOP_C1STB();
/* USER CODE BEGIN EnterStopMode_2 */
@ -163,19 +122,19 @@ void PWR_ExitStopMode(void)
/* Resume sysTick : work around for debugger problem in dual core */
HAL_ResumeTick();
POWER_ON;
/*Not retained periph:
ADC interface
DAC interface USARTx, TIMx, i2Cx, SPIx
SRAM ctrls, DMAx, DMAMux, AES, RNG, HSEM */
/* Resume not retained USARTx and DMA */
//vcom_Resume();
vcom_Resume(); //DON'T REMOVE THIS, KKEP LOW POWER
/* USER CODE BEGIN ExitStopMode_2 */
MX_GPIO_Init();
MX_DMA_Init();
MX_I2C2_Init();
PME_ON;
/* USER CODE END ExitStopMode_2 */
}

View File

@ -343,6 +343,7 @@ void STS_YunhornSTSEventP6_Process(void)
{
APP_LOG(TS_OFF, VLEVEL_L, "\r\n P6 Testing Process\r\n");
STS_SENSOR_Power_ON(0);
HAL_Delay(50);
#ifdef LED_ONBOARD
LED_ON;
HAL_Delay(20);
@ -352,7 +353,7 @@ void STS_YunhornSTSEventP6_Process(void)
#if defined(SOAP_LEVEL_SENSOR)
HAL_GPIO_WritePin(SOAP_SWITCH_GPIO_Port, SOAP_SWITCH_Pin, GPIO_PIN_SET);
HAL_Delay(5000);
HAL_Delay(1000);
/* 2. Read sensor state */
sts_soap_level_state = 0;
sts_soap_level_state = HAL_GPIO_ReadPin(SOAP_STATUS_GPIO_Port,SOAP_STATUS_Pin);
@ -519,11 +520,7 @@ void STS_SENSOR_Power_ON(uint8_t cnt)
case 0:
case 1:
case 2:
//#if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED))
HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_SET);
//#endif
PME_ON;
break;
default:
break;
@ -536,10 +533,7 @@ void STS_SENSOR_Power_OFF(uint8_t cnt)
case 0:
case 1:
case 2:
//#if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED))
HAL_GPIO_WritePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin, GPIO_PIN_RESET);
//#endif
PME_OFF;
break;
default:
break;
@ -552,14 +546,8 @@ void STS_SENSOR_MEMS_Reset(uint8_t cnt)
case 0:
case 1:
case 2:
#if (defined(YUNHORN_STS_M7_ENABLED) || defined(YUNHORN_STS_R0_ENABLED))
HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_SET);
HAL_Delay(50);
HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_RESET);
#endif
HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_SET);
HAL_Delay(50);
HAL_GPIO_WritePin(MEMS_RESET_GPIO_Port, MEMS_RESET_Pin, GPIO_PIN_RESET);
HAL_GPIO_TogglePin(MEMS_POWER_GPIO_Port, MEMS_POWER_Pin);
break;
default:
break;

View File

@ -857,15 +857,15 @@ static void SendTxData(void)
AppData.Buffer[i++] = (uint8_t)(oo_data.state_sensor1_on_off)&0xff;
#elif defined(YUNHORN_STS_R0_ENABLED)
AppData.Buffer[i++] = (uint8_t)(0x04)&0xff; //#length of following bytes
AppData.Buffer[i++] = (uint8_t)(0x06)&0xff; //#length of following bytes
AppData.Buffer[i++] = (uint8_t)(r0_data.distance_mm >>8)&0xff; //#05
AppData.Buffer[i++] = (uint8_t)(r0_data.distance_mm)&0xff; //#06
AppData.Buffer[i++] = (uint8_t)(r0_data.distance1_mm >>8)&0xff; //#07
AppData.Buffer[i++] = (uint8_t)(r0_data.distance1_mm)&0xff; //#08
#ifdef TOF_3
AppData.Buffer[i++] = (uint8_t)(r0_data.distance2_mm >>8)&0xff; //#09
AppData.Buffer[i++] = (uint8_t)(r0_data.distance2_mm)&0xff; //#10
#endif
#ifdef SOAP_LEVEL
AppData.Buffer[i++] = (uint8_t)(sts_soap_level_state)&0xff; //#11
#endif
@ -1636,7 +1636,7 @@ void USER_APP_AUTO_RESPONDER_Parse(char *tlv_buf, size_t tlv_buf_size)
periodicity_length *= 3600;
}
TxPeriodicity = periodicity_length*1000; //translate to 1000ms=1s
HeartBeatPeriodicity = TxPeriodicity;
//HeartBeatPeriodicity = TxPeriodicity; 2024-05-22, fix issue of heart-beat interval mis-changed by Tx Interval
OnTxPeriodicityChanged(TxPeriodicity);
i = 0;

File diff suppressed because it is too large Load Diff

View File

@ -128,9 +128,9 @@ void MX_TOF_Process(void)
void STS_R0_SENSOR_Read(STS_R0_SensorDataTypeDef *r0_data)
{
r0_data->distance_mm = sts_tof_distance_data[0];
r0_data->distance1_mm = sts_tof_distance_data[1];
r0_data->distance2_mm = sts_tof_distance_data[2];
r0_data->distance_mm = (uint16_t)sts_tof_distance_data[0];
r0_data->distance1_mm = (uint16_t)sts_tof_distance_data[1];
r0_data->distance2_mm = (uint16_t)sts_tof_distance_data[2];
#ifdef ROCTEC_R5
r0_data->distance1_mm = sts_tof_distance_data[0]+sts_tof_distance_data[1]+sts_tof_distance_data[2];
#endif

View File

@ -357,7 +357,7 @@ void STS_TOF250_Range_Process(void)
status = HAL_I2C_Master_Receive(&hi2c2, TOF250_I2C_ADDR, pdata, count, i2c_time_out);
if (status == HAL_OK) {
APP_LOG(TS_OFF, VLEVEL_H, "\r\n## TOF250 ranging value %02x %02x %4d ",pdata[0],pdata[1], *pdata);
sts_tof_distance_data[2] = pdata[0]*255+pdata[1];
sts_tof_distance_data[2] = pdata[0]<<8|pdata[1];
sensor_data_ready = 1;
APP_LOG(TS_OFF, VLEVEL_H, "\r\n## Measured Range: \r\nTOF #0 = %4u mm, \r\nTOF #1 = %4u mm, \r\nTOF #2 = %4u mm\r\n",
(int)sts_tof_distance_data[0],(int)sts_tof_distance_data[1],(int)sts_tof_distance_data[2]);
@ -366,7 +366,7 @@ void STS_TOF250_Range_Process(void)
void STS_TOF_VL53L0X_Range_Process(void)
{
int status=0, i;
RangingConfig_e RangingConfig = HIGH_ACCURACY; //HIGH_ACCURACY; //LONG_RANGE;
RangingConfig_e RangingConfig = LONG_RANGE; //HIGH_ACCURACY; //LONG_RANGE;
XWL55_WLE5_53L0X_Init();
if ((nDevMask ==0) || (nSensorPresent ==0))
{
@ -411,10 +411,10 @@ void STS_TOF_VL53L0X_Range_Process(void)
}
HAL_Delay(1);
} while ((RangingMeasurementData.RangeStatus != 0)&&(rep <10));
sts_tof_distance_data[i] = (RangingMeasurementData.RangeStatus!=0)?STS_MAX_L0_RANGE:VL53L0XDevs[i].LeakyRange;
//sts_tof_distance_data[i] = (RangingMeasurementData.RangeStatus!=0)?STS_MAX_L0_RANGE:VL53L0XDevs[i].LeakyRange;
}
HAL_Delay(1);
HAL_Delay(5);
} // for i < MAX_TOF_COUNT
if (sensor_data_ready != 0) {