打印

STM32F103 怎样进入睡眠模式及唤醒

[复制链接]
22437|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eddia2000|  楼主 | 2008-8-6 08:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MDK中的例程中没有找到睡眠模式及唤醒DEMO,那位那提供或指点,谢谢!
沙发
computer00| | 2008-8-6 09:09 | 只看该作者

数据手册中应该有的吧...无非就是配置几个寄存器~~~

使用特权

评论回复
板凳
ijk| | 2008-8-6 09:43 | 只看该作者

STM32F103 怎样进入睡眠模式

  可以参考STM32的1篇文档:AN2629,STM32xxx low-power modes。它还配套有例子,并且试验过可以工作。

使用特权

评论回复
地板
ST_ARM| | 2008-8-6 09:46 | 只看该作者

进入睡眠模式的代码:

/*******************************************************************************
* Function Name  : PWR_EnterSLEEPMode
* Description    : Enters SLEEP mode.
* Input          : - SysCtrl_Set: Select the Sleep mode entry mechanism,.
*                    This parameter can be one of the following values:
*                       - 0: MCU enters Sleep mode as soon as WFI or WFE instruction is executed.
*                       - 1: MCU enters Sleep mode as soon as it exits the lowest priority ISR.
*
*                  - PWR_STOPEntry: specifies if SLEEP mode in entered with WFI or WFE instruction.
*                     This parameter can be one of the following values:
*                       - PWR_SLEEPEntry_WFI: enter STOP mode with WFI instruction
*                       - PWR_SLEEPEntry_WFE: enter STOP mode with WFE instruction
* Output         : None
* Return         : None
*******************************************************************************/
void PWR_EnterSLEEPMode(u32 SysCtrl_Set, u8 PWR_SLEEPEntry)
{
    if (SysCtrl_Set)
        *(vu32 *) SCB_SysCtrl |= SysCtrl_SLEEPONEXIT_Set;    // Set SLEEPONEXIT
    else
        *(vu32 *) SCB_SysCtrl &= ~SysCtrl_SLEEPONEXIT_Set;// Reset SLEEPONEXIT

    *(vu32 *) SCB_SysCtrl &= ~SysCtrl_SLEEPDEEP_Set;    // Clear SLEEPDEEP bit
    if(PWR_SLEEPEntry == PWR_SLEEPEntry_WFI)            // Select SLEEP mode entry
        __WFI();                                        // Request Wait For Interrupt
    else
        __WFE();                                        // Request Wait For Event
}


任何中断和事件都能将STM32唤醒。

使用特权

评论回复
5
wudingzhiying| | 2012-2-21 22:24 | 只看该作者

AN2629

3# ijk
你好,请问你是说的这个文档有没有中文版的呀?我没有找到。。。谢谢

使用特权

评论回复
6
wudingzhiying| | 2012-2-21 22:26 | 只看该作者

任何中断和事件都能将STM32唤醒。

4# ST_ARM
你好,为什么我用adc的转换结束中断却没法唤醒呢??请问你有没有睡眠进入和唤醒比较简单一点的实例呢?可否给我看看,让我学习一下?谢谢

使用特权

评论回复
7
香水城| | 2012-2-22 09:57 | 只看该作者
3# ijk  
你好,请问你是说的这个文档有没有中文版的呀?我没有找到。。。谢谢
wudingzhiying 发表于 2012-2-21 22:24


AN2629目前没有中文译文,你可以看英文版:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00171691.pdf


4# ST_ARM  
你好,为什么我用adc的转换结束中断却没法唤醒呢??请问你有没有睡眠进入和唤醒比较简单一点的实例呢?可否给我看看,让我学习一下?谢谢 ...
wudingzhiying 发表于 2012-2-21 22:26


请你按照AN2629的要求做,按照4楼给的代码做,不会有什么问题的。

使用特权

评论回复
8
leshak| | 2012-11-2 16:07 | 只看该作者
我用的是3.5的库,把唤醒代码加进去后,编译不过去....说是有几个参数没声明,库函数把10X_PWR.C加到库里面了....
编译结果
source\user\rtc.c(92): error:  #20: identifier "SCB_SysCtrl" is undefined
source\user\rtc.c(92): error:  #20: identifier "SysCtrl_SLEEPDEEP_Set" is undefined
source\user\rtc.c(93): error:  #20: identifier "PWR_SLEEPEntry_WFI" is undefined
Target not created

使用特权

评论回复
9
m__dd| | 2013-11-5 18:04 | 只看该作者
直接一句话就可以啊:__WFI();或者__WFE();前者中断唤醒,后者事件唤醒。
这种睡眠模式功耗并不理想,好处是无延迟。个人感觉适合一些通讯唤醒,而且要求数据不丢

使用特权

评论回复
10
puchuang| | 2013-11-5 20:53 | 只看该作者
就是楼上说的   就是那个寄存器的设置问题   设置一下  就行了

使用特权

评论回复
11
lijunlinv| | 2014-9-10 11:18 | 只看该作者
leshak 发表于 2012-11-2 16:07
我用的是3.5的库,把唤醒代码加进去后,编译不过去....说是有几个参数没声明,库函数把10X_PWR.C加到库里面 ...

我也遇到这种情况,请问怎么解决?谢谢

使用特权

评论回复
12
伊森亨特| | 2018-11-23 17:12 | 只看该作者
ST_ARM 发表于 2008-8-6 09:46
/******************************************************************************** Function&nbsp ...

请问这个代码在哪里找到的呢?

使用特权

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

本版积分规则

2

主题

19

帖子

0

粉丝