欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > HAL库源码移植与使用之低功耗模式

HAL库源码移植与使用之低功耗模式

2025/4/30 23:01:31 来源:https://blog.csdn.net/2301_80317247/article/details/140583601  浏览:    关键词:HAL库源码移植与使用之低功耗模式

低功耗特性对用电池供电的产品:     更小电池体积(降低了大小和成本)        延长电池寿命     电磁干扰更小,提高无线通信质量     电源设计更简单,无需过多考虑散热问题

电源供电区分为: 

分为VDD供电区和后备供电区和1.8v供电区

主供电区是外面3.3v直接进来的正极3.3v供电

1.8v供电区是电压调节器把3.3转成1.8v供电

后备供电区是若有主电源则主电源供电,若无主电源则有VBAT备用电源供电

 F7  F4是1.2v供电区而不是1.8v

这跟工艺硬件有关,什么样的电压能让主频稳定且达到168M或其他时钟

低功耗模式特点:

 

相关hal库函数

注:低功耗模式下一定要把systick给关了防止systick把芯片唤醒

void pwr_enter_sleep(void)
{HAL_SuspendTick();  /* 暂停滴答时钟,防止通过滴答时钟中断唤醒 */HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); /* 进入睡眠模式 */
}
void pwr_enter_stop(void)
{sys_stm32_clock_init(200, 2, 2, 4); /* 设置时钟,400Mhz,降频 *//* 当SVOS3进入停止模式时,设置稳压器为低功耗模式,等待中断唤醒 */HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}

 

//系统进入待机模式
void Sys_Enter_Standby(void)
{__HAL_RCC_APB2_FORCE_RESET();       //复位所有IO口 __HAL_RCC_PWR_CLK_ENABLE();         //使能PWR时钟__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);                  //清除Wake_UP标志HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);           //设置WKUP用于唤醒HAL_PWR_EnterSTANDBYMode();                         //进入待机模式     
}//检测WKUP脚的信号
//返回值1:连续按下3s以上
//      0:错误的触发	
u8 Check_WKUP(void) 
{u8 t=0;	//记录按下的时间LED0=0; //亮灯DS0 while(1){if(WKUP_KD){t++;			//已经按下了 delay_ms(30);if(t>=100)		//按下超过3秒钟{LED0=0;	 	//点亮DS0 return 1; 	//按下3s以上了}}else { LED0=1;return 0; //按下不足3秒}}
}  //外部中断线0中断服务函数
void EXTI0_IRQHandler(void)
{HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
}//中断线0中断处理过程
//此函数会被HAL_GPIO_EXTI_IRQHandler()调用
//GPIO_Pin:引脚
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin==GPIO_PIN_0)//PA0{if(Check_WKUP())//关机{Sys_Enter_Standby();//进入待机模式}}    
}//PA0 WKUP唤醒初始化
void WKUP_Init(void)
{GPIO_InitTypeDef GPIO_Initure;__HAL_RCC_GPIOA_CLK_ENABLE();			//开启GPIOA时钟GPIO_Initure.Pin=GPIO_PIN_0;            //PA0GPIO_Initure.Mode=GPIO_MODE_IT_RISING;  //中断,上升沿GPIO_Initure.Pull=GPIO_PULLDOWN;        //下拉GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//快速HAL_GPIO_Init(GPIOA,&GPIO_Initure);//检查是否是正常开机if(Check_WKUP()==0){Sys_Enter_Standby();//不是开机,进入待机模式}HAL_NVIC_SetPriority(EXTI0_IRQn,0x02,0x02);//抢占优先级2,子优先级2HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词