打印
[应用相关]

AT32低功耗设计

[复制链接]
1046|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

睡眠模式
概念
在睡眠模式下,CPU 时钟关闭,其他时钟均正常工作,电压调节器正常工作,所有的 I/O 管脚都保持它 们在运行模式时的状态,调节器 LDO 以正常功耗模式提供 1.2V 电源(CPU 内核、内存和内嵌外设)。

当 SLEEPDEEP=0,SLEEPONEXIT=0 时,执行 WFI 或 WFE 指令,此时可立即进入睡眠模式。 SLEEP-ON-EXIT 模式
当 SLEEPDEEP=0,SLEEPONEXIT=1 时,执行 WFI 指令,此时当系统从最低优先级的中断处理程序中 退出时,可立即进入睡眠模式。
有如下两种方式进入睡眠模式

__WFI(); 中断唤醒,只要产生外设中断,都能使系统退出睡眠模式。
__WFE(); 事件唤醒,存在两种方式的唤醒事件,使系统退出睡眠模式:
使能任一外设中断(未在 NVIC 中使能)且使能 SEVONPEND 位可以产生唤醒事件。 系统唤醒后,需清除外设中断挂起位和 NVIC 通道挂起位。
配置内部 EXINT 线为事件模式来产生唤醒事件。 从执行 WFE 指令进入睡眠模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。
WFI使用
直接在主循环调用__WFI(); SLEEPDEEP和SLEEPONEXIT两个寄存器保持默认0;循环每次执行到这就会进入立刻睡眠模式,每次按键按下才会进入下一次循环。


深度睡眠模式
概念
比普通睡眠模式更加省电,在深度睡眠模式下,所有 1.2V 时钟关闭,HICK 和 HEXT 振荡器都被关闭,电压调节器以正常工作或低 功耗工作状态给 1.2V 域供电,所有 I/O 管脚都保持它们在运行模式时的状态,SRAM 和寄存器内容保持。

使用
使能PWC外设时钟crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK,TRUE);

调用函数进入深度睡眠pwc_deep_sleep_mode_enter(PWC_DEEP_SLEEP_ENTER_WFI);

【注意】进入睡眠模式之后再次烧录代码需要按一下复位键之后立即烧录


实验中会发现printf打印的全都是0或者乱码,这是因为深度睡眠模式为了省电关闭了HICK 和 HEXT 晶振所以我们在中断退出睡眠模式之后需要重新调用system_clock_config();打开晶振

待机模式
概念
待机模式可最大限度的降低系统功耗,在该模式下,电压调节器关闭,只有 VDD/VDDA 域维持供电,其 他的 1.2V 供电区域,PLL、HICK 和 HEXT 振荡器都被断电。寄存器和 SRAM 中的内容也会丢失。 通过设置 Cortex-M4 系统控制寄存器中的 SLEEPDEEP 位,设置电源控制寄存器(PWC_CTRL)中 LPSEL 位,并清除电源控制及状态寄存器(PWC_CTRLSTS)中的 SWEF 位的情况下,执行 WFI 或 WFE 指令即可进入待机模式。

唤醒方式:

发生 WKUPx 引脚的上升沿
ERTC 闹钟事件的上升沿
ERTC 入侵事件
ERTC 时间戳
NRST 引脚上外部复位
WDT 复位
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/hdhfkfnbru/article/details/133276427

2682265d6c52cdee7c.png (58.71 KB )

2682265d6c52cdee7c.png

使用特权

评论回复
沙发
尽快回复过| | 2024-2-24 16:35 | 只看该作者
在主循环中调用__WFI();使得系统在空闲时进入睡眠模式,等待中断或事件唤醒。这是一种有效的低功耗策略,特别适用于需要长时间等待事件或中断的嵌入式系统。

使用特权

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

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

480

主题

3778

帖子

47

粉丝