stm32L151开发心得(一)
前言
最近结束了一个STM32L151的项目,项目基本条件就是电池供电、物联化,还有一堆通讯式的外设。我以前主要以榨干单片机性能的项目为主,这个项目刚好相反,要求低功耗,而且STM32L151我也是第一次使用,写几篇文章纪念一下。
这个项目在启动之初,照旧还是各路神仙争夺硬件配置制高点的批斗大会。对于单片机的选型,要么是NXP的LPC系列,要么是ST的L1系列,最后为减少我自己的学习量,还是选了L1系列的单片机。
STM32低功耗的三种模式
STM32,包括F1和L1系列(其他系列没研究过低功耗部分),低功耗模式有三种:
(1) 睡眠模式:Cortex-M3内核停止,外围器件保持运行状态,比如RTC一直运行。
(2) 停机模式:所有的时钟停止,电源低功耗运行。
(3)待机模式:内核断电。

三种模式我都对比功耗,待机模式应该是功耗最低的模式。但是,停机模式下,任意的外部中断都能唤醒单片机,而且唤醒后内存内的数据依然保存为停机前的值,这两点对我的项目而言非常重要,我最终的选择就是使用停机模式。
进入停机模式前,还是有很多工作要做的,包括:
(1)停止所有不含唤醒所需外部中断的外部设备的供电,诸如关闭LED、停止给电机IC、通信模块供电等等。
(2)片上外设在唤醒时用不上的全部关闭并且DeInit。
(3)把唤醒时用不上的GPIO管脚全部改为输入,这一点很重要。STM32的管脚原理图如下:

(4)如果有需要,在停机前要先设置RTC的唤醒时间。
(5)最后一步才是执行停机指令。
/*系统进行停机模式以及唤醒后的时钟操作*/
void sys_sleep_wakeup(void)
{
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* 关闭滴答定时器 */
portENTER_CRITICAL();
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFE);
//唤醒后
RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RE

本文分享了STM32L151项目中实现低功耗的经验,详细介绍了三种低功耗模式:睡眠模式、停机模式和待机模式,并重点讲解了停机模式的应用。此外,文章还提供了降低电路板功耗的硬件设计技巧。

310

被折叠的 条评论
为什么被折叠?



