Hack in support for other boards/microcontrollers, add GpioDriver
There's definitely plenty of cleanup work to be done (see: "ifdefs").
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
#include "Bsp/Drivers/LowPower.h"
|
||||
#include "Bsp/macros.h"
|
||||
|
||||
#include "stm32l0xx.h"
|
||||
#include "Mcu.h"
|
||||
|
||||
uint32_t wakeups = 0;
|
||||
|
||||
@@ -56,7 +56,12 @@ ReturnCode LowPower::disable_debug()
|
||||
CLR(DBGMCU->CR, DBGMCU_CR_DBG_SLEEP);
|
||||
CLR(DBGMCU->CR, DBGMCU_CR_DBG_STANDBY);
|
||||
|
||||
#if defined(STM32L0XX)
|
||||
CLR(RCC->APB2SMENR, RCC_APB2SMENR_DBGSMEN);
|
||||
#elif defined(STM32L4XX)
|
||||
#else
|
||||
#error "Unsupported device type"
|
||||
#endif
|
||||
|
||||
return ReturnCode::OK;
|
||||
}
|
||||
@@ -70,12 +75,24 @@ ReturnCode LowPower::sleep()
|
||||
|
||||
ReturnCode LowPower::stop()
|
||||
{
|
||||
#if defined(STM32L0XX)
|
||||
SET(PWR->CR, PWR_CR_CWUF); // clear wakeup flag
|
||||
while(PWR->CSR & PWR_CSR_WUF) {};
|
||||
|
||||
CLR(PWR->CR, PWR_CR_PDDS); // Enter stop mode when the CPU enters deepsleep
|
||||
CLR(RCC->CFGR, RCC_CFGR_STOPWUCK); // MSI oscillator is wake-up from stop clock
|
||||
SET(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk); // low-power mode = stop mode
|
||||
#elif defined(STM32L4XX)
|
||||
SET(PWR->SCR, PWR_SCR_CWUF1); // clear wakeup flag
|
||||
|
||||
while(PWR->SR1 & PWR_SR1_WUF1) {};
|
||||
SET_TO(PWR->CR1, PWR_CR1_LPMS, 1 << PWR_CR1_LPMS_Pos); // Enter stop mode 1 when the CPU enters deepsleep
|
||||
CLR(RCC->CFGR, RCC_CFGR_STOPWUCK); // MSI oscillator is wake-up from stop clock
|
||||
SET(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk); // low-power mode = stop mode
|
||||
|
||||
#else
|
||||
#error "Unsupported device type"
|
||||
#endif
|
||||
__WFI(); // enter low-power mode (Wake from interrupt)
|
||||
|
||||
wakeups++;
|
||||
|
||||
Reference in New Issue
Block a user