Added ADC auto off, use LPSleep mode.
continuous-integration/drone/push Build is passing Details

Signed-off-by: Yilin Sun <imi415@imi.moe>
This commit is contained in:
Yilin Sun 2023-07-09 23:59:51 +08:00
parent 7ff480e16a
commit 5de15c2631
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
4 changed files with 13 additions and 13 deletions

View File

@ -49,7 +49,7 @@ void MX_ADC_Init(void)
hadc.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc.Init.LowPowerAutoWait = DISABLE;
hadc.Init.LowPowerAutoPowerOff = DISABLE;
hadc.Init.LowPowerAutoPowerOff = ENABLE;
hadc.Init.ContinuousConvMode = DISABLE;
hadc.Init.NbrOfConversion = 1;
hadc.Init.DiscontinuousConvMode = DISABLE;

View File

@ -79,7 +79,7 @@ void SystemClock_Config_FreqDown(void) {
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.AHBCLK3Divider = RCC_SYSCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) {
Error_Handler();
}

View File

@ -3,7 +3,8 @@ ADC.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_8
ADC.ClockPrescaler=ADC_CLOCK_ASYNC_DIV16
ADC.ContinuousConvMode=DISABLE
ADC.EnableRegularConversion=ENABLE
ADC.IPParameters=NbrOfConversion,SelectedChannel,ContinuousConvMode,EnableRegularConversion,Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,OversamplingMode,ClockPrescaler,SamplingTimeCommon1
ADC.IPParameters=NbrOfConversion,SelectedChannel,ContinuousConvMode,EnableRegularConversion,Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,OversamplingMode,ClockPrescaler,SamplingTimeCommon1,LowPowerAutoPowerOff
ADC.LowPowerAutoPowerOff=ENABLE
ADC.NbrOfConversion=1
ADC.NbrOfConversionFlag=1
ADC.OversamplingMode=DISABLE

View File

@ -162,13 +162,12 @@ int main(void) {
for (;;) {
HAL_SuspendTick();
SystemClock_Config_FreqDown();
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_PWREx_DisableLowPowerRunMode();
SystemClock_Config();
HAL_ResumeTick();
if (s_ranging_irq) {
@ -179,13 +178,6 @@ int main(void) {
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
HAL_ADC_Start(&hadc);
HAL_ADC_PollForConversion(&hadc, 1000);
if (HAL_ADC_GetState(&hadc) & HAL_ADC_STATE_EOC_REG) {
vbat = HAL_ADC_GetValue(&hadc);
}
VL53L1_GetMeasurementDataReady(&s_ranging, &ranging_ready);
if (ranging_ready) {
VL53L1_GetRangingMeasurementData(&s_ranging, &ranging_result);
@ -194,6 +186,13 @@ int main(void) {
}
}
HAL_ADC_Start(&hadc);
HAL_ADC_PollForConversion(&hadc, 1000);
if (HAL_ADC_GetState(&hadc) & HAL_ADC_STATE_EOC_REG) {
vbat = HAL_ADC_GetValue(&hadc);
}
if (ims_bme280_read(&s_dht, &dht_result) != IMS_SUCCESS) {
goto dead_loop;
}