打印

STR912低功耗模式问题请教

[复制链接]
3452|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
smartsheep|  楼主 | 2007-11-6 16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这两天在调ST9睡眠模式,有些问题想请教
1. 在调用库函数SCU_EnterSleepMode();后,CPU是不是会自动关闭其它外设,然后进入睡眠状态?

2. 在被外部中断唤醒后,程序从哪里开始恢复运行? 是从SCU_EnterSleepMode();后面呢还是从外部中断服务程序里?
沙发
浪淘沙| | 2007-11-6 17:05 | 只看该作者

请打开那个库函数看看

我还没有时间看,但我认为那个函数不会自动关闭其它外设,因为它不知道有哪些外设需要关闭。

对于问题2:被外部中断唤醒后,程序从外部中断服务程序开始恢复运行。

使用特权

评论回复
板凳
浪淘沙| | 2007-11-6 17:07 | 只看该作者

所有ST的库函数的源程序都是包含在下载包中

在你安装函数包时,它们的源程序也安装到你的机器中。

使用特权

评论回复
地板
smartsheep|  楼主 | 2007-11-7 13:17 | 只看该作者

我已经看过这个函数

软件上它当然没有去关其它外设,它只是写寄存器SCU_PWRMNG;写入010告诉CPU进入睡眠模式。但是参考手册明确写着,sleep模式是所有外设关闭的,
– ARMCLK = OFF
– FMICLK = OFF
– HCLK = OFF
– PCLK = OFF
如果硬件不会自己去关闭,那调用SCU_EnterSleepMode()怎么还能进入睡眠模式呢?

这个过程是怎样的呢? CPU立即不工作吗? SCU_EnterSleepMode();这句之后的语句还能执行吗?

如果被外部中断唤醒后,程序从外部中断服务程序开始恢复运行。那中断退出后到哪里呢? 是不是到SCU_EnterSleepMode();语句之后?

非常感谢 浪淘沙

使用特权

评论回复
5
浪淘沙| | 2007-11-7 17:56 | 只看该作者

请问LZ,你是在那里看到Sleep模式是所有外设关闭的?

在参考手册(http://www.st.com/stonline/products/literature/rm/13902.pdf)的第36页,第3.3节,有这样一段:
The STM32F10xxx devices feature three low-power modes:
- Sleep mode (Cortex-M3 core stopped, peripherals kept running)
- Stop mode (all clocks are stopped)
- Standby mode (1.8V domain powered-off)

再请看参考手册的第3.3.2节“Peripheral clock gating”:To further reduce power consumption in Sleep mode the peripheral clocks can be disabled prior to executing the WFI or WFE instructions.


外部中断唤醒后,程序从外部中断服务程序开始恢复运行,中断退出后返回到WIF或WFE指令之后。

使用特权

评论回复
6
smartsheep|  楼主 | 2007-11-8 11:15 | 只看该作者

请注意我用的是 "STR912"

912参考手册P53, PCLK都OFF了, 外设还能running?

见图

使用特权

评论回复
7
浪淘沙| | 2007-11-8 11:31 | 只看该作者

不好意思,我搞错了。你的问题我要看看再回来讨论

抱歉。

使用特权

评论回复
8
浪淘沙| | 2007-11-8 14:21 | 只看该作者

关于STR912低功耗模式的问题

请看“STR912FA的技术参考手册”的第2.5.4节(Sleep mode),有这么一段:This is the lowest power mode of MCU. In this mode, all clock circuits (except RTC) and the oscillator pin (4-25MHz) are turned off. In this mode, the CPU does not continue to execute any instructions. All peripherals except the RTC have their clocks stopped. The ARM Flash Memory is put in power down mode at the same time as the ARM MCU.

有下划线的那句话说得很明确,芯片内部会自动地关闭相应部分的时钟。请注意是“关闭外设的时钟”而不是“关闭外设”,这是两个不同的概念。

使用特权

评论回复
9
smartsheep|  楼主 | 2007-11-8 14:29 | 只看该作者

我刚才写了那么多提交的怎么没显示?

使用特权

评论回复
10
smartsheep|  楼主 | 2007-11-8 14:33 | 只看该作者

再来一次

附件是我的测试程序,只用到两个IO口,P0.0输出2秒周期波形指示程序运行情况,P3.2用作外部唤醒中断。
这个程序在KEIL MDK里软件仿真执行完全正确,能够唤醒,但是在我的STR912最小系统板子上运行时唤不醒, P0.0口没有波形输出。
相关链接:https://bbs.21ic.com/upfiles/img/200711/2007118143251234.rar

使用特权

评论回复
11
smartsheep|  楼主 | 2007-11-8 14:36 | 只看该作者

睡眠模式唤醒流程

经过调试,确认STR912进入睡眠模式和唤醒的流程:

执行SCU_EnterSleepMode(); 进入睡眠
外部中断唤醒后进入外部中断服务程序,
中断退出后回到SCU_EnterSleepMode(); 之后的语句开始执行。

使用特权

评论回复
12
浪淘沙| | 2007-11-8 18:14 | 只看该作者

看样子LZ的问题已经解决了

恭喜啦!

使用特权

评论回复
13
smartsheep|  楼主 | 2007-11-9 10:00 | 只看该作者

问题还没解决啊

我上面提到,这个流程是在软件仿真环境下看到的, 程序实际下到板子上却唤不醒。

使用特权

评论回复
14
smartsheep|  楼主 | 2007-11-12 12:55 | 只看该作者

顶起来

请继续关注

使用特权

评论回复
15
FLandy| | 2007-11-14 11:09 | 只看该作者

关注...

使用特权

评论回复
16
Ahua5| | 2007-12-27 12:26 | 只看该作者

我也遇到同样的问题

严重关注:
我也遇到同样的问题

使用SCU_EnterIdleMode(),也不能wake up

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

57

帖子

0

粉丝