登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
Active Circuit 有源电路区
>
有源射频电路
>
STM32L15x系列 长时间睡眠无法唤醒
发帖
回复
2261
阅读
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系列芯片进入睡眠之后,长时间睡眠无法唤醒?有谁碰到过这个问题,怎么解决的?
*U.$=4Az
我进入睡眠的程序为:
J9)wt ?%j
"8ILV`[
/***************** 配置系统时钟为MSI Range 0 (65KHZ) 但是系统实际工作为32KHZ *********************/
r=n|MT^O
}U7>_b2
RCC_AHBENR = RCC->AHBENR; //保存外围的时钟配置
m}:";>?#
RCC_APB2ENR = RCC->APB2ENR;
ItDe_|!L
RCC_APB1ENR = RCC->APB1ENR;
%=/Y~ml?
_t6siB_u
RCC_DeInit(); // RCC 时钟系统重启
0(Y$xg
FLASH_SetLatency(FLASH_Latency_0); // 设置FLASH
g,Kb9['
FLASH_PrefetchBufferCmd(DISABLE); //失能外围器件的存储功能
@pQv}%
FLASH_ReadAccess64Cmd(DISABLE);// 失能64-bit使用
v|VY5vN
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR的时钟 也就是使能低功耗的时钟
-kZz,pNQ,
PWR_VoltageScalingConfig(PWR_VoltageScaling_Range2); // 配置低功耗是的MCU使用的电压(越低越省电)
j$T2ff6
while(PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET) // 等待Voltage 稳压器准备好
~53E)ilB
{
'97)c7E
}
XtT;UBE
$qD8vu )|j
RCC_HCLKConfig(RCC_SYSCLK_Div2); // 配置HCLK=SYSCLK/2 = 32KHZ HCLK主要是给内核工作的时钟
-Hh$3Uv
RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2=HCLK 也就是APB2=HCLK
F){f{-@)
RCC_PCLK1Config(RCC_HCLK_Div1);// PCLK1=HCLK 也就是APB1=HCLK
Q&(?D
RCC_MSIRangeConfig(RCC_MSIRange_0); // 设置MSI为65.536KHZ MSI可以有多个分频选择
[ w
RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI); //选择MSI的时钟作为系统时钟
|o~FKy1'z\
while (RCC_GetSYSCLKSource() != 0x00) //等待PLL ??? 理论上应该没用到PLL,可能是AHB Prescaler 这里
{-^>) iJqt
{
[4 g5{eX
}
C@pDX>~2=b
$Bz |[=
WakeUpFromLP(); //配置唤醒的中断 前面RCC_DeInit已经失能所有中断了,所有不用担心其他中断的影响
, Ot3N\%yn
PWR_PVDCmd(DISABLE); // 使能PWR电源
|O\(<n S
PWR_ClearFlag(PWR_FLAG_WU); // 清除唤醒标志位
q\O'r[&V
PWR_UltraLowPowerCmd(ENABLE); // 使能可编程电源探测器
4en&EWUr
FLASH_SLEEPPowerDownCmd(ENABLE); //使能睡眠模式时降低电压
rr3NY$W
PWR_EnterSleepMode(PWR_Regulator_LowPower, PWR_SLEEPEntry_WFI); //申请进入低功耗 PWR_SLEEPEntry_WFE
LoOyqJ,
_E)xR
退出睡眠的程序:
cmt3ceCb
RCC->AHBENR = RCC_AHBENR; //恢复外围的时钟配置
0MMY{@n
RCC->APB2ENR = RCC_APB2ENR;
I m_yY
RCC->APB1ENR = RCC_APB1ENR;
R"5/
y 97QqQ^
SystemInit(); //系统时钟初始化
L}nj#z4g
\4K8*`$
情景描述:
?@|1>epgd
我采用的是LPSleep睡眠模式,采用任意一按键中断唤醒方式。一开始启动系统之后,会等待8秒(另外程序),然后系统会进入LPSleep模式,然后按下按键,退出睡眠的程序就在按键中断函数中执行,
TMKemci
唤醒后,系统继续执行其他的程序,8秒钟之后又会进入低功耗系统。如此反复执行,短时间内,没问题。当时,时间一长,我经常是二十分钟到半个小时之后,再按下按键,我观察万用表,电量显示是唤醒
vMzR3@4e
后的电流,可是不再执行其他程序,请问各位高手碰到过这样的情况吗。 顺便请教一下,如果系统执行一小段算法,然后睡觉,1S之后又起来执行算法,然后又睡下去,执行算法的时间很短,请问如此如何
[Qy]henK
实现呢。 我自己的方法还是在中 ..
KK(x)(
WaWT 5|A
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复