登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
Active Circuit 有源电路区
>
有源射频电路
>
STM32L15x系列 长时间睡眠无法唤醒
发帖
回复
2260
阅读
0
回复
[
互助
]
STM32L15x系列 长时间睡眠无法唤醒
离线
fuqing5542
http://www.y-ec.com/
UID :95522
注册:
2012-06-12
登录:
2012-09-26
发帖:
28
等级:
仿真新人
0楼
发表于: 2012-06-18 10:10:51
— 本帖被 hefang 从 初来乍到自我介绍 移动到本区(2012-06-18) —
TM32L15x系列芯片进入睡眠之后,长时间睡眠无法唤醒?有谁碰到过这个问题,怎么解决的?
R^"mGe\LL
我进入睡眠的程序为:
[I7=]X
d<w]>T5VW
/***************** 配置系统时钟为MSI Range 0 (65KHZ) 但是系统实际工作为32KHZ *********************/
9~y:K$NO
0 1NP
RCC_AHBENR = RCC->AHBENR; //保存外围的时钟配置
[p]UM;+
RCC_APB2ENR = RCC->APB2ENR;
(i1p6
RCC_APB1ENR = RCC->APB1ENR;
uavyms^
CY$ 1;/
RCC_DeInit(); // RCC 时钟系统重启
~g;)8X;;+
FLASH_SetLatency(FLASH_Latency_0); // 设置FLASH
Z/ L%?zH
FLASH_PrefetchBufferCmd(DISABLE); //失能外围器件的存储功能
;J:* r0
FLASH_ReadAccess64Cmd(DISABLE);// 失能64-bit使用
x{/-&`F
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR的时钟 也就是使能低功耗的时钟
/)<kG(Z
PWR_VoltageScalingConfig(PWR_VoltageScaling_Range2); // 配置低功耗是的MCU使用的电压(越低越省电)
^oNcZK>
while(PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET) // 等待Voltage 稳压器准备好
+Eel|)Z*Q
{
Y' 5X4Ks|
}
_joW%`T8
\S{ihS@J
RCC_HCLKConfig(RCC_SYSCLK_Div2); // 配置HCLK=SYSCLK/2 = 32KHZ HCLK主要是给内核工作的时钟
T&}KUX~Q/
RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2=HCLK 也就是APB2=HCLK
qggRS)a
RCC_PCLK1Config(RCC_HCLK_Div1);// PCLK1=HCLK 也就是APB1=HCLK
q d:"LS
RCC_MSIRangeConfig(RCC_MSIRange_0); // 设置MSI为65.536KHZ MSI可以有多个分频选择
b;NV vc(
RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI); //选择MSI的时钟作为系统时钟
X1BqN+=@9
while (RCC_GetSYSCLKSource() != 0x00) //等待PLL ??? 理论上应该没用到PLL,可能是AHB Prescaler 这里
Bj\Us$cZ
{
C'S_M@I=
}
;Zn&Nc7
uO1^nK
WakeUpFromLP(); //配置唤醒的中断 前面RCC_DeInit已经失能所有中断了,所有不用担心其他中断的影响
Mhc5<~?
PWR_PVDCmd(DISABLE); // 使能PWR电源
,uO_C(G/i
PWR_ClearFlag(PWR_FLAG_WU); // 清除唤醒标志位
x'SIHV4M@Q
PWR_UltraLowPowerCmd(ENABLE); // 使能可编程电源探测器
I.`DBI#-f
FLASH_SLEEPPowerDownCmd(ENABLE); //使能睡眠模式时降低电压
6X$nZM|g,
PWR_EnterSleepMode(PWR_Regulator_LowPower, PWR_SLEEPEntry_WFI); //申请进入低功耗 PWR_SLEEPEntry_WFE
'{cFr
$4og{
退出睡眠的程序:
=5uhIU0O
RCC->AHBENR = RCC_AHBENR; //恢复外围的时钟配置
5r dt
RCC->APB2ENR = RCC_APB2ENR;
/+WC6&
RCC->APB1ENR = RCC_APB1ENR;
^ (J%)&_\3
_,I~1"
SystemInit(); //系统时钟初始化
f 0~Z@\
N x^JC_
情景描述:
ch0cFF^]
我采用的是LPSleep睡眠模式,采用任意一按键中断唤醒方式。一开始启动系统之后,会等待8秒(另外程序),然后系统会进入LPSleep模式,然后按下按键,退出睡眠的程序就在按键中断函数中执行,
;";>7k/}
唤醒后,系统继续执行其他的程序,8秒钟之后又会进入低功耗系统。如此反复执行,短时间内,没问题。当时,时间一长,我经常是二十分钟到半个小时之后,再按下按键,我观察万用表,电量显示是唤醒
0T0I<t
后的电流,可是不再执行其他程序,请问各位高手碰到过这样的情况吗。 顺便请教一下,如果系统执行一小段算法,然后睡觉,1S之后又起来执行算法,然后又睡下去,执行算法的时间很短,请问如此如何
=\\rk,F
实现呢。 我自己的方法还是在中 ..
Bx.hFEL
"hZ `^"0b
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复