登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
Active Circuit 有源电路区
>
有源射频电路
>
STM32L15x系列 长时间睡眠无法唤醒
发帖
回复
2262
阅读
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系列芯片进入睡眠之后,长时间睡眠无法唤醒?有谁碰到过这个问题,怎么解决的?
x$QOOE]
我进入睡眠的程序为:
}\|$8~
+yiGZV/X
/***************** 配置系统时钟为MSI Range 0 (65KHZ) 但是系统实际工作为32KHZ *********************/
rBye%rQRq
9n]zh-
RCC_AHBENR = RCC->AHBENR; //保存外围的时钟配置
eLJW
RCC_APB2ENR = RCC->APB2ENR;
{'l^{"GO"
RCC_APB1ENR = RCC->APB1ENR;
U 3aY =8B
@\e2Q&O
RCC_DeInit(); // RCC 时钟系统重启
1Y$ gt
FLASH_SetLatency(FLASH_Latency_0); // 设置FLASH
}_u1'
FLASH_PrefetchBufferCmd(DISABLE); //失能外围器件的存储功能
&, hhH_W
FLASH_ReadAccess64Cmd(DISABLE);// 失能64-bit使用
5&D)W>{d
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR的时钟 也就是使能低功耗的时钟
AYeA)jk
PWR_VoltageScalingConfig(PWR_VoltageScaling_Range2); // 配置低功耗是的MCU使用的电压(越低越省电)
51W\ %aB
while(PWR_GetFlagStatus(PWR_FLAG_VOS) != RESET) // 等待Voltage 稳压器准备好
j!B+Q
{
Bf~
}
p 2It/O
wqx@/--E(
RCC_HCLKConfig(RCC_SYSCLK_Div2); // 配置HCLK=SYSCLK/2 = 32KHZ HCLK主要是给内核工作的时钟
8G; t[9
RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2=HCLK 也就是APB2=HCLK
?DzKqsS'
RCC_PCLK1Config(RCC_HCLK_Div1);// PCLK1=HCLK 也就是APB1=HCLK
sDTCV8"w
RCC_MSIRangeConfig(RCC_MSIRange_0); // 设置MSI为65.536KHZ MSI可以有多个分频选择
n"N!76
RCC_SYSCLKConfig(RCC_SYSCLKSource_MSI); //选择MSI的时钟作为系统时钟
~Os"dAgZFY
while (RCC_GetSYSCLKSource() != 0x00) //等待PLL ??? 理论上应该没用到PLL,可能是AHB Prescaler 这里
lZ.x@hDS
{
JaoRkl?F
}
5"%r,GM U
I7ZY9W(S
WakeUpFromLP(); //配置唤醒的中断 前面RCC_DeInit已经失能所有中断了,所有不用担心其他中断的影响
A6v02WG_1T
PWR_PVDCmd(DISABLE); // 使能PWR电源
(zIP@ H
PWR_ClearFlag(PWR_FLAG_WU); // 清除唤醒标志位
;:,hdFap
PWR_UltraLowPowerCmd(ENABLE); // 使能可编程电源探测器
k(+EY%
FLASH_SLEEPPowerDownCmd(ENABLE); //使能睡眠模式时降低电压
K??%Qh5l+C
PWR_EnterSleepMode(PWR_Regulator_LowPower, PWR_SLEEPEntry_WFI); //申请进入低功耗 PWR_SLEEPEntry_WFE
lCLz!k2di
v!27q*;8H
退出睡眠的程序:
7tP?([o%F
RCC->AHBENR = RCC_AHBENR; //恢复外围的时钟配置
9G_bM(q'^2
RCC->APB2ENR = RCC_APB2ENR;
8VQJUwf;
RCC->APB1ENR = RCC_APB1ENR;
Gu}|CFL\
/.9j$iK#
SystemInit(); //系统时钟初始化
Y!c RzQ
``kiAKMy
情景描述:
h}k)7
我采用的是LPSleep睡眠模式,采用任意一按键中断唤醒方式。一开始启动系统之后,会等待8秒(另外程序),然后系统会进入LPSleep模式,然后按下按键,退出睡眠的程序就在按键中断函数中执行,
Eo 5p-
唤醒后,系统继续执行其他的程序,8秒钟之后又会进入低功耗系统。如此反复执行,短时间内,没问题。当时,时间一长,我经常是二十分钟到半个小时之后,再按下按键,我观察万用表,电量显示是唤醒
f=]+\0MQ
后的电流,可是不再执行其他程序,请问各位高手碰到过这样的情况吗。 顺便请教一下,如果系统执行一小段算法,然后睡觉,1S之后又起来执行算法,然后又睡下去,执行算法的时间很短,请问如此如何
Pc#8~t}2
实现呢。 我自己的方法还是在中 ..
U+>!DtOYK
e` Z;}& ,
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复