diff --git a/src/main.c b/src/main.c --- a/src/main.c +++ b/src/main.c @@ -54,9 +54,9 @@ int main(void) led_blink(4); uint16_t blink_rate = BLINK_FAST; -// uint8_t state = SYSTEM_GPSACQ; + uint8_t state = SYSTEM_GPSACQ; //DEBUG: - uint8_t state = SYSTEM_IDLE; +// uint8_t state = SYSTEM_IDLE; uint32_t gps_polltimer = 0; uint32_t fix_acq_starttime = 0; @@ -72,9 +72,10 @@ int main(void) adc_stop(); HAL_Delay(1000); - __DBGMCU_CLK_ENABLE() ; // (RCC->APB2ENR |= (RCC_APB2ENR_DBGMCUEN)) - HAL_EnableDBGStopMode(); // SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); +// __DBGMCU_CLK_ENABLE() ; // (RCC->APB2ENR |= (RCC_APB2ENR_DBGMCUEN)) +// HAL_EnableDBGStopMode(); // SET_BIT(DBGMCU->CR, DBGMCU_CR_DBG_STOP); + uint32_t idle_blink_last = 0; while (1) { @@ -120,16 +121,29 @@ int main(void) // Idling: sleep and wait for RTC timeslot trigger case SYSTEM_IDLE: { - blink_rate = BLINK_SLOW; + // Don't blink normally + blink_rate = 9999; //BLINK_SLOW; - // Actually sleep for real: disable systick and sleep until RTC interrupt -// HAL_SuspendTick(); + // If we haven't blinked for a while, blink now + if(HAL_GetTick() - idle_blink_last > 10 * 1000) + { + HAL_GPIO_WritePin(LED_BLUE, 1); + HAL_Delay(20); + HAL_GPIO_WritePin(LED_BLUE, 0); + idle_blink_last = HAL_GetTick(); + } // Enter sleep mode: wait for interrupt //HAL_PWR_EnterSLEEPMode(0, PWR_SLEEPENTRY_WFI); __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); + HAL_SuspendTick(); + HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); + // We probably stopped for a second + HAL_IncTickBy(1000); // maybe check the RTC before and after this, increment tick by the delta? + HAL_ResumeTick(); + // We have woken up! Clear wakeup flag __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); @@ -189,7 +203,7 @@ int main(void) } } break; - + // Wait for wspr timeslot and start transmitting case SYSTEM_WSPRTX: { @@ -241,13 +255,13 @@ int main(void) } #ifndef LED_DISABLE - if(HAL_GetTick() - led_timer > blink_rate) + if((blink_rate != BLINK_DISABLE) && (HAL_GetTick() - led_timer > blink_rate)) { ledpulse(); led_timer = HAL_GetTick(); } - if(statled_ontime && HAL_GetTick() - statled_ontime > 10) + if((blink_rate != BLINK_DISABLE) && (statled_ontime && HAL_GetTick() - statled_ontime > 10)) { HAL_GPIO_WritePin(LED_BLUE, 0); statled_ontime = 0;