主函数内容:
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC_Init();
MX_LPUART1_UART_Init();
MX_USART1_UART_Init();
MX_RTC_Init();
WorkFinished=0;//工作没有完成
while(1)
{
LED1_ON; LED2_ON; LED3_ON;HAL_Delay (500);
printf ("Before Stop \r\n");
if(WorkFinished){
HAL_PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//进入停止模式
}
LED1_OFF; LED2_OFF; LED3_OFF;
printf ("After Stop \r\n");
}
//用于停机模式的声明
#define PWR_Regulator_LowPower ((uint32_t)0x00000001)
#define PWR_STOPEntry_WFI ((uint8_t)0x01)
//系统的停机函数
void HAL_PWR_EnterSTOPMode(uint32_t Regulator, uint8_t STOPEntry)
{
uint32_t tmpreg = 0U;
/ Check the parameters/
assert_param(IS_PWR_REGULATOR(Regulator));
assert_param(IS_PWR_STOP_ENTRY(STOPEntry));
/ Select the regulator state in Stop mode ---------------------------------/
tmpreg = PWR->CR;
/ Clear PDDS and LPDS bits/
CLEAR_BIT(tmpreg, (PWR_CR_PDDS | PWR_CR_LPSDSR));
/ Set LPSDSR bit according to PWR_Regulator value/
SET_BIT(tmpreg, Regulator);
/ Store the new value/
PWR->CR = tmpreg;
/ Set SLEEPDEEP bit of Cortex System Control Register/
SET_BIT(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk);
/ Select Stop mode entry --------------------------------------------------/
if(STOPEntry == PWR_STOPENTRY_WFI)
{
/ Request Wait For Interrupt/
WFI();
}
else
{
/ Request Wait For Event/
SEV();
WFE();
WFE();
}
/ Reset SLEEPDEEP bit of Cortex System Control Register/
CLEAR_BIT(SCB->SCR, SCB_SCR_SLEEPDEEP_Msk);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
WorkFinished=~WorkFinished;
SystemClock_Config();
printf ("Callback \r\n"); //外设中断 打印
}
程序正常启动后三个灯闪烁(PB12|PB13|PB14),按键后进入停机模式,再按键程序继续执行,再按键停机。
停机模式下耗电:148uA。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:STM32的停机模式与唤醒-创新互联
标题路径:http://scpingwu.com/article/dosihp.html