STM32L-Power control(PWR)
STM32L-Power control(PWR)
缩写解析:
BOR : brown out reset(欠压复位)
RTC : real-time clock(实时时钟)
POR : power on reset(上电复位)
PDR : power down reset(断电复位)
PVD : programming voltage detector(可编程电压检测器)
1. 电源供应
如果BOR是有效的,设备的工作电压为:1.8~3.6V(VDD),当电压低于1.65V时,设备会掉电无法工作;如果BOR是无效的,设备的工作电压为:1.65~3.6V(VDD)。
一个嵌入式线性稳压器为内部提供1.2~1.8V的电压
-
VDD
如果BOR是有效的,VDD电压范围为:1.8(power on)/1.65(power down)~3.6V;如果BOR是无效的,VDD电压范围为:1.65V~3.6V。
VDD为外部IO和内部稳压器提供电压。
-
Vcore
Vcore=1.2~1.8V,Vcore为数字外围设备、SRAM和Flash memory提供电压。它是有内部稳压器产生的。Vcore范围是可选的(与VDD相关)
-
VSSA , VDDA
如果BOR是有效的,VSSA,VDDA电压范围为:1.8(power on)/1.65(power down)~3.6V;如果BOR是无效的,VSSA,VDDA电压范围为:1.65V~3.6V。
VDDA为外围模拟设备提供电压:ADC,DAC,复位模块,RC振荡器和PLL。当需要使用ADC时,VDDA电压不能小于1.8V
-
VRET-,VERF+
VREF+为输入参考电压。只有在LQFP144,UFBGA132,LQFP100,UFBGA100和TFBGA64封装的才是有效的,其他封装情况下,默认连接到VSSA和VDDA上
-
VLCD
VLCD=2.5~3.6V。LCD控制器可由VLCD外部接口或者内部嵌入式升压转换器提供电压。
(1)独立的AD和DAC 转换器供给和参考电压
为了提高转换精度,ADC和DAC有独立的电压供给,可分别的进行电源滤波和隔离PCB中的噪声
- 单独的VDDA为ADC提供电压
- 分离的VSSA为地
在BGA 64封装和所有100接口封装及以上的设备有以下特性:在低电压情况下,为了保证较高的转换精度,用户可以将VERF+连接到一个外部电压上(低于VDD)。对于ADC或DAC,VREF+为最大输入输出电压值。
- ADC
-- 2.4V =< VREF+ = VDDA ,全速(ADCCLK=16MHZ,1Msps)
-- 1.8V =< VREF+ = VDDA ,中速(ADCCLK=8MHZ,500Ksps)
-- 2.4V =< VREF+ < VDDA ,中速(ADCCLK=8MHZ,500Ksps)
-- 1.8V =< VREF+ < VDDA ,低速(ADCCLK=4MHZ,250Ksps)
-- 当设备电压范围选择为3(Vcore=1.2V)时,ADC为低速(ADCCLK=4MHZ,250Ksps)
-
DAC
-- 1.8V =< VREF+ < VDDA
-
当VDDA高于2.4V时,VREF+电压范围应为:2.4V~VDDA
-
当VDDA低于2.4V时,VREF+必须等于VDDA
(2)独立的LCD供给电压
VLCD可用于控制LCD的对比度。该接口可用于以下两种情况:
-
可接收有外部电路提供理想的最大电压(通过MCU为段式或一线LCD提供电压)
-
同样可以连接到一个外部电容上,用于MCU的升压转换器上。该升压转换器由软件控制,并为段式或一线LCD提供电压
提供给段式或一线LCD的电压决定了LCD的对比度。你可以通过控制其占空比或死区来减少对比度。
-
当一个外部电压为VLCD提供电压时,其电压范围应为:2.56~3.6V,且与VDD无关
-
当LCD机遇内部升压转化器时,VLCD应该连接到一个电容上(见产品数据手册)
(3)RTC和RTC备份寄存器
RTC是一个独立的BCD计时器。RTC提供时钟和日历、两个可编程闹钟中断、一个可编程周期性唤醒标志及中断功能。RTC包含了20个数据备份寄存器(80 bytes)(in medium density devices)或 32个数据备份寄存器(128 bytes)(in high and medium+ density devices)。当篡改事件发生时,这些寄存器会被复位。
RTC寄存器使用:
刚复位时,RTC寄存器处于写保护状态,为了使用RTC寄存器,需要进行按照以下步骤进行操作:
1. 使能电源接口时钟(设置RCC_APB1ENR寄存器中的PWREN)
2. 设置PWR_CR寄存器中的DBP位
3. 配置RCC_CSR寄存器中的RTCSEL[1:0]选择RTC时钟源
4. 使能RTC时钟(设置RCC_CSR寄存器中的RTCEN位)
(4)电压调整器
一个内嵌线性电压调整器可用于所有数字电路(除了待机中的电路)。调整器的输出电压(Vcore)可以通过编程设置为三种不同的范围(1.2-1.8V)
复位后,电压调整器一般是使能的。它更具应用的模式可以工作在三种不同的模式下:main(MR),low power(LPR)和power down
-
-
在运行模式下,调整器处于main(MR)模式下,并为Vcore domain提供全功率(core、memories和digital peripherals)
-
在低功耗运行模式下,调整器处于low power(LWR)模式下,并为Vcore domain 提供低功耗,保留寄存器及内部SRAM数据
-
在睡眠模式下,调整器处于main(MR)模式下,并为Vcore domain提供全功率,保留寄存器及内部SRAM的数据
-
在低功耗睡眠模式下,调整器处于low power(LWR)模式下,并未Vcore domain提供低功耗,保留寄存器及内部SRAM数据
-
在待机模式下,调整器处于关闭状态,除了待机电路之后,寄存器及SRAM中的数据都会丢失
-
(5)动态电压调节管理
动态电压调节管理是一项电源管理技术,根据不同的情况,增加或减少Vcore的电压。增加Vcore类似于过压,其用于提高设备的性能;减少Vcore类似于欠压,其用于节省能源。
Range 1:
Range 1为高性能范围。电压调整器输出1.8V电压(VDD电压为2.0V)。在该范围内,Flash编程和擦除操作均可操作。
Range 2 和 3:
调整器可被编程为输出1.5V(range 2)和1.2V (range 3)(VDD电压无任何限制1.65V~3.6V)
-
-
在1.5V的时候,Flash 存储器仍是有效的,但读取时间为中等。这是一个中等性能的范畴。编程和擦除Flash 存储器仍是可操作的。
-
在1.2V的时候,Flash 存储器仍是有效的,但读取时间较慢。这是一个低性能的范畴。编程和擦除Flash存储器是不可操作的。
-
(6)动态电压调节配置
为了修改电压调整器ranges,需要按照以下步骤操作:
1. 检测VDD以确认可使用那些ranges
2. 轮询VOSF位直到该位为0(PWR_CSR寄存器)
3. 通过配置VOS[12:11]位来配置电压范围(PWR_CR寄存器)
4. 轮询VOSF位直到该位为0(在配置期间系统时钟是停止的,直达VOSF=0)
(7)当VDD低于2.0V时,电压调整器和时钟管理
当Vcore range 1 被选中且VDD 降到低于2.0V时,应用必需重新配置系统。按照以下三个操作步骤进行系统的重新配置:
1. 检测VDD降到低于2V:使用PVD来检测VDD电压和当电压低于所选择的范围则会产生一个终端。为了检测2.0V的电压阀值,应用可以选择PVD临界值2(典型为:2.26V)
2. 修改时钟频率(与下面选中的电压 range有关:低于2.0V,系统时钟频率被限制在16MHZ(range 2)和4MHZ(range 3))
3. 选择需要的电压范围,注意电压低于2.0V,只能选择range 2 或者range 3
(如果当前电压range为2/3,当电压下降到低于2.0V时,系统无需重新配置仍可正常工作)
(8)当修改Vcore range时,电压调整器和时钟管理
当VDD高于2.0V时,三种电压范围均可选择:
-
当前电压范围大于目标电压范围时(如:range 2/3)
a)修改时钟频率
b)选择所需的电压范围
-
当电压低于目标电压范围时(如:range 1)
a)选择所需的电压范围
b)如有必要的可调整时钟频率
当VDD低于2.0V时,只可选择range 2/3
-
从 range 2 切换到 range 3
a)修改时钟频率关联到range 3
b)选择电压 range 3
-
从 range 3 切换到 range 2
a)选择电压 range 2
b)如有必要可调整时钟频率
2. 电源检测
设备有内部的上电复位(POR)/掉电复位(PDR),欠压复位(BOR)电路。当设备工作在1.8~3.6V之间时,BOR默认情况下是使能的,并且保证了从1.8V开始正常工作。当电压到达了1.8V的伐值时,将引起复位(the option byte loading process starts),确认或者修改默认伐值,或者永久关闭BOR(在这种情况下,VDD最小值为1.65V)。当设备工作在1.65~3.6V之间时,BOR是永久失效的。因此,设备的启动时间可以减少到1ms。
5种BOR的阀值(1.65~3V)可以通过选择字节进行配置。为了减少待机模式下的功耗,内部电压参考VERFINT可以自动关闭。当VDD低于指定的阈值时(VPOR,VPDR,VBOR),设备保持在复位模式,并且无需任何外部复位电路。
设备有一个内嵌的可编程的电压检测器,用于监测VDD/VDDA的电压和跟VPVD阀值进行比较。7中不同的PVD(1.85~3.05V,200mv步进)可以通过应用选择。当VDD/VDDA低于或者高于VPVD阀值的时候会产生一个中断,中断可以例行的可以产生警告信息或者令MCU进入到安全的状态中.需要通过应用来使能PVD。
各种的电源检测如下:
(1)Power on reset(POR)/ Power down reset(PDR)
设备具有内部的POR/PDR电路,且允许在1.5V低压下工作。
当上电时,VDD/VDDA低于一个特定的阀值VPOR时,设备保持在复位状态,且不需要多余的外部复位电路。POR默认是使能的,且POR的默认阀值为1.5V。
当掉电时,VDD下降到低于VPDR阀值时,PDR让设备保持在复位状态。PDR默认是使能的,且PDR默认的阀值为1.5V。
只有当BOR是无效时才可使用POR和PDR。为了保证最新的工作电压(1.65V),BOR需要配置在BOR Level 0。当BOR时生效时,一个灰色区域存在于最小工作电压1.65V和VPOR/VPDR阀值之间,这意味着VDD可以低于1.65V,且只有当到达VPDR阀值时设备才会复位。
(2)Brown out reset(BOR)
设备上电后,BOR会让设备保持在复位状态知道电压到达VBOR阀值。
当设备工作在1.65~3.6V时,BOR是无效的且电压检测用于POR/PDR。由于POR/PDR阀值为1.5V,一个灰色区域存在于最小工作电压1.65V和VPOR/VPDR阀值之间。
当设备工作在1.8~3.6V时,BOR在上电后就是使能的,且其阀值为1.8V。
当设备不再处于复位状态后,BOR level 可以通过选项字节进行重新配置或者使其失效。
如果BOR level 保持在最低水平(1.8V power on和1.65V power down)。系统复位完全由BOR管理,且设备工作电压处于安全范围内。
当通过选项字节使BOR无效时,power down 则由PDR控制,且在1.65V和VPDR之间存在灰色区域。
VBOR可以通过选项字节进行修改,默认情况下为Level 4 阀值。VBOR阀值可配置为以下5种情况:
-
-
BOR Level 0(VBOR0):复位阀值为:1.69~1.80 V
-
BOR Level 1(VBOR1):复位阀值为:1.94~2.1 V
-
BOR Level 2(VBOR2):复位阀值为:2.3~2.49 V
-
BOR Level 3(VBOR3):复位阀值为:2.54~2.74 V
-
BOR Level 4(VBOR4):复位阀值为:2.77~3.0 V
-
当VDD下降到低于所选择的VBOR阀值,则会产生复位。当VDD上升到高于VBOR上限时,则会释放复位,设备启动。
BOR可以通过选项字节使其失效。为了失效BOR功能,需要在VDD>VBOR0的情况下运行选项字节编程时序。
BOR阀值滞回约100mv
(3)可编程电压检测器(PVD)
你可以使用PVD来检测VDD电源,且与一个阀值进行比较(通过PWR_CR的PLS[2:0]位进行选择)。
PVD可以用于外部模拟电压输入(PVD_IN),会与内部VERFINT进行比较。当PLS[2:0]=111时,需要配置PVD_IN(PB7)为模拟模式。可以通过置位PVDE为来使用PVD。
PVODO标志是有效的(位于PWR_CSR),可用于识别VDD是低于还是高于PVD阀值。该事件连接到了EXTI16,若配置了EXTI寄存器则可产生中断。当VDD上升到高于PVD阀值或者下降到低于PVD阀值时(与EXTI16上的边缘配置有关)会产生中断。可应用于通过中断服务处理紧急的关机任务。
(4)内部参考电压(VERFINT)
跟内部参考电压相关联的功能有:BOR、PVD、ADC、LCD和比较器(comparators)。内部参考电压默认是生效的。
内部参考电压的功耗并不是可忽略的,尤其是在停止和待机模式下。为了减少功耗,可以通过PWR_CR寄存器的ULP位令内部参考电压失效。然而,在这种情况下,当退出停止/待机模式时,在内部参考电压启动过程中(达3ms),由内部参考电压管理的功能是不可靠的。
为了减少唤醒的时间,设备可以再退出停止/待机模式时不等待内部参考电压启动。在进入停止/待机模式前,需要设置PWR_CR寄存器中的FWU(fast wakeup)位。
如果ULP被置位了,在进入到停止/待机模式前,所有相关功能将会失效,另外无论FWU为多少,只有当内部参考电压完全启动之后才会再次生效。可通过PWR_CSR寄存器中的VERFINTRDYF位来判断内部参考电压是否已经准备就绪。
3. 低功耗模式
默认情况下,在经过一个系统/power on复位后,MCU处于运行模式。在运行模式下,CPU时钟由HCLK驱动,同时程序代码将会被执行。当CPU不需要保持在运行模式下时,有多种低功耗模式可供选择以节省功耗(例如等待一个外部事件时)。这由用户来选择所运行的模式以在低功耗、性能、启动时间和可用唤醒源上做出最好的衡量。
设备提供了五种低功耗模式:
-
-
低功耗运行模式:调整器处于低功耗模式下,限制了时钟频率和可运行外设的数量
-
睡眠模式:Cortex-M3 core 处于停止,外设保持运行
-
低功耗睡眠模式:Cortex-M3 core 处于停止,限制了时钟频率和可运行外设的数量,调整器处于低功耗模式下,RAM 掉电,Flash停止
-
停止模式:所有时钟停止,调整器继续运行,并处于低功耗模式下
-
待机模式:Vcore domain 关机
-
另外,可以通过以下操作减少在运行时的功耗:
-
-
减少系统时钟频率
-
关闭不使用的外设时钟
-
(1)低功耗模式下的时钟行为
APB外设和DMA时钟可以通过软件进行关闭。
a)睡眠和低功耗睡眠模式
在睡眠和低功耗睡眠模式下,CPU的时钟处于停止状态。寄存器接口时钟(FLITF和RAM接口)和所有外设时钟均可通过软件进行关闭。当处于低功耗睡眠模式时,FLITF接口时钟处于停止状态,而RAM接口时钟处于掉电状态。AHB总线到APB总线的桥时钟可以通过硬件进行关闭(当所有外设时钟均处于关闭状态时)。
b)停止和待机模式
在停止和待机模式下,系统时钟和所有高速时钟均是处于停止状态:
-
-
PLL 无效
-
内部RC 16MHZ(HSI)振荡器无效
-
外部1~24MHZ(HSE)振荡器无效
-
内部65KHZ~4MHZ(MSI)振荡器无效
-
当通过中断退出停止模式或者复位退出待机模式时,内部MSI被选择为系统时钟。当设备退出停止模式时,之前的MSI配置仍是有效的(range和trimming value)。当设备退出待机模式时,range和trimming value被重置为默认的2MHZ
如果当前正在执行Flash操作或者存取APB domain,停止和待机模式将会延迟到以上操作完成后。
(2)减少系统时钟
在运行时,可以通过分频器来减少系统的时钟(SYSCLK,HCLK,PCLK1,PCLK2)。在进入睡眠模式前,也可以通过这些分频器来让外设减速
(3)关闭外设时钟
在运行时,提供给独立外设的HCLK和PCLK可在任何时候进行关闭操作以降低功耗。
为了在睡眠模式下进一步减少功耗,可在执行WFI或者WFE指令前关闭外设时钟。
外设时钟受以下寄存器控制:AHB peripheral clock enable register(RCC_AHBENR)、APB2 peripheral clock enable register(RCC_APB2ENR)、APB1 peripheral clock enable register(RCC_APB1ENR)
在睡眠模式时,为了关闭外设时钟可以通过复位RCC_AHBLPENR和RCC_APBxLPENR相应的位
(4)低功耗模式--Low power run mode(LR run)
在运行时,为了进一步减少功耗,调整器可以配置为低功耗模式,在该模式下,系统的频率不应超过 f_MSI range 1
Note:当APB1时钟频率低于7倍的RTC时钟,为了读取RTC日历寄存器,应用需要读取calendar time和data寄存器两次。如果第二次读取到RTC_TR的数据域第一次读取到的一致,则可保证数据的正确性,否则需要进行第三次读取操作。
只有当Vcore处于range 2 时才可进入到低功耗模式下。另外,当运行在低功耗模式下,禁止使用动态电压调节。只有低功耗模式被选中时,停止和睡眠模式+调整器处于低功耗模式才是被允许。
Note:在低功耗模式下,所有的IO接口跟在运行模式下保持一样的状态
a)进入低功耗模式
可通过以下步骤进入低功耗模式:
-
-
通过RCC_APBxENR和RCC_AHBENR寄存器使能或者关闭每一个数字IP时钟
-
系统时钟频率需要下降到不得超过f_MSI range 1
-
通过置位LPRUN和LPSDSR强制让调整器运行在低功耗模式下
-
b)退出低功耗模式
可通过以下步骤退出低功耗模式:
-
-
配置调整器运行在main regulator mode
-
如果有需要,开启Flash存储器
-
按需要增加系统时钟频率
-
(5)睡眠模式
a)进入睡眠模式
通过执行WFI(wait for interrupt)或WEF(wait for event)执行可以进行到睡眠模式下,睡眠模式的进入机制有两种选择(根据cortex-M3 system control register 的SLEEPONEXIT位)
-
-
sleep-now:如果SLEEPONEXIT被清除,当WFI/WEF指令被执行时,MCU则进入睡眠模式
-
sleep-on-exit:如果SLEEPONEXIT被置位,当最低优先级的ISR退出时,MCU则进入睡眠模式
-
b)退出睡眠模式
如果是通过WFI进入到睡眠模式的,发生任何能被NVIC所确认的外设中断均会将设备从睡眠模式中唤醒
如果是通过WEF进入到睡眠模式的,一检测到有事件发生时,设备将从睡眠模式中唤醒
唤醒事件可由以下产生:
-
-
在外设控制寄存器中使能一个中断(在NVIC中不使能该中断),使能Cortex-M3系统控制寄存器中的SEVONPEND位。当MCU被WFI唤醒时,外设中断状态位和外设NVIC IRQ状态位(使用NVIC 中断状态清除寄存器)需要清除。
-
配置一个外部或者内部EXTI为事件模式,当MCU被WFE唤醒时,由于事件行中的状态位没有置位,所以不需要清除外设中断状态位和外设NVIC IRQ状态位
-
该模式提供了最短的唤醒事件,由于没有时间消耗在进入或退出中断中。
(6)低功耗睡眠模式(LP sleep)
a)进入低功耗睡眠模式
通过配置电压调整器处于低功耗模式,并且执行WFI/WEF指令,则可进入到低功耗睡眠模式。在该模式下,Flash memory是不可用的,但RAM存储器则是可用的。
在该模式下,系统时钟频道不应高于 f_MSI range 1。
只有当Vcore 处于range 2 时,才可进入低功耗睡眠模式。
Note:当APB1时钟频率低于7倍的RTC时钟,为了读取RTC日历寄存器,应用需要读取calendar time和data寄存器两次。如果第二次读取到RTC_TR的数据域第一次读取到的一致,则可保证数据的正确性,否则需要进行第三次读取操作。
低功耗睡眠模式的进入机制有两种选择(根据cortex-M3 system control register 的SLEEPONEXIT位)
-
-
sleep-now:如果SLEEPONEXIT被清除,当WFI/WEF指令被执行时,MCU则进入睡眠模式
-
sleep-on-exit:如果SLEEPONEXIT被置位,当最低优先级的ISR退出时,MCU则进入睡眠模式
-
根据以下步骤进行操作以进入低功耗睡眠模式:
-
-
可通过控制位使Flash memory关闭(FLASH_ACR寄存器中的SLEEP_PD位,更多详情可查看PM0062),该操作虽然减少了功耗,但是会增加唤醒时间
-
通过RCC_APBxENR和RCC_AHBENR寄存器使能或者关闭每一个数字IP时钟
-
必需减少系统时钟频率
-
强制调整器进入到低功耗模式(LPSDSR位)
-
执行WFI/WEF 指令以进入到睡眠模式
-
Note:在低功耗睡眠模式下,所有的IO接口跟在运行模式下保持一样的状态
b)退出低功耗睡眠模式
如果是通过WFI进入到睡眠模式的,发生任何能被NVIC所确认的外设中断均会将设备从睡眠模式中唤醒
如果是通过WEF进入到睡眠模式的,一检测到有事件发生时,设备将从睡眠模式中唤醒
唤醒事件可由以下产生:
-
-
在外设控制寄存器中使能一个中断(在NVIC中不使能该中断),使能Cortex-M3系统控制寄存器中的SEVONPEND位。当MCU被WFI唤醒时,外设中断状态位和外设NVIC IRQ状态位(使用NVIC 中断状态清除寄存器)需要清除。
-
配置一个外部或者内部EXTI为事件模式,当MCU被WFE唤醒时,由于事件行中的状态位没有置位,所以不需要清除外设中断状态位和外设NVIC IRQ状态位
-
当通过中断或时间推出低功耗睡眠模式时,调整器配置为main regulator mode,如果需要可以开启Flash memory,同时可提高系统时钟频率。
当调整器运行在低功耗模式时,从低功耗睡眠模式下唤醒时额外增加了启动延时。
(7)停止模式
停止模式基于Cortex-M3深度睡眠模式(combined with peripheral clock gating)。电压调整期可以配置为正常或者低功耗模式。
在停止模式时,所有位于Vcore domain的时钟将备停止,PLL、MSI、HSI和HSE 均无效。内部SRAM和寄存器将被保留。
为了在停止模式下获取更低功耗,内部Flash存储器一般进入到低功耗模式下。当Flash存储器为低功耗模式时,从停止模式唤醒时会增加额外的唤醒时间。
为了在停止模式下获取最小功耗,在进入停止模式前,可关闭VREFINT,BOR,PVD和温度传感器。在退出停止模式时(using ULP bit in the PWR_CR register),可以通过软件设置使之前关闭的功能重新开启
Note:在停止模式下,所有的IO将保持正常模式下的状态
a)进入停止模式
为了进一步减少停止模式下的功耗,内部电压调整器可以设置为低功耗模式(通过配置PWR_CR寄存器的LPSDSR位)
如果Flash存储器编程/访问APB正在运行当中,进入停止模式会延迟到存储器/访问APB完成之后。
在停止模式下,以下特性均可进行独立配置选择:
-
-
独立看门狗(IWDG):写其主要的寄存器或者硬件选项来启动IWDG。启动之后无法停止(除非复位)
-
实时时钟(RTC):配置RCC_CSR寄存器的RTCEN位
-
内部RC振荡器(LSI RC):配置RCC_CSR寄存器的LSION位
-
外部32.768kHZ振荡器(LSE OSC):配置RCC_CSR寄存器的LSEON位
-
ADC,DAC或LCD在停止模式也会消耗能源,除非在进入停止模式前它们是无效的。为了使它们无效化,ADC_CR2寄存器的ADON和DAC_CR寄存器的ENx位需要配置为0
b)退出停止模式
当退出停止模式时会产生一个中断或者唤醒时间,MSR RC振荡器被选择为系统时钟。
当电压调整器处于低功耗模式时,从停止模式唤醒时会增加额外的唤醒时间。通过保持内部调整器在停止模式下也是生效的,会增加功耗但唤醒时间会减少。
(8)待机模式
待机模式下会得到最低的功耗。其基于Cortex-M3深度睡眠模式,且电压调整器是关闭的。Vcore domain是关闭的。PLL,MSI,HSI和HSE均是失效的。SRAM和寄存器上下文均被丢失(除了RTC寄存器、RTC备份寄存器,待机电路)。
a)进入待机模式
在待机模式下,以下特性均可单独进行配置:
-
-
独立看门狗(IWDG):写其主要的寄存器或者硬件选项来启动IWDG。启动之后无法停止(除非复位)
-
实时时钟(RTC):配置RCC_CSR寄存器的RTCEN位
-
内部RC振荡器(LSI RC):配置RCC_CSR寄存器的LSION位
-
外部32.768kHZ振荡器(LSE OSC):配置RCC_CSR寄存器的LSEON位
-
b)退出待机模式
当外部复位、IW复位、WKUP捕获到上升沿、RTC 警报、篡改事件或者时间戳事件被检测到时,MCU则会退出待机模式。当从待机状态唤醒时,除了PWR power control/status 寄存器,其他寄存器均处于复位状态。
当退出待机模式后,程序将跟复位后一样的进行运行。PWR_CSR寄存器中的SBF状态为会标示MCU处于待机状态。
b)待机状态下的IO状态
待机模式下,所有的IO处于高阻抗状态,除了以下IO端口:
-
-
Reset pad(仍有效)
-
RTC_AF1(PC13)如果配置为WKUP2,tamper,time-stamp,RTC Alarm out或者RTC clock calibration out)
-
WKUP1(PA0)和WKUP3(PE6)(若是使能的)
-
c)调试模式
缺省状态下,当应用让MCU进入到停止或者待机模式下时,调试连接将会丢失(当调试功能被使用)。这是由于Cortex-M3内核已经没有时钟了。
(9)使用RTC和比较器使设备从停止或者待机模式下唤醒
当RTC Alarm event,RTC Wakeup event,tamper evnet,time-stamp event 或者comparator event 发生时(没有外部中断(自动唤醒模式)),MCU从低功耗模式下唤醒。
RTC复选功能可以使系统从停止和待机低功耗模式下唤醒(comparator events 只可使系统从停止模式中唤醒)。
同样可以使用RTC Alarm或RTC wakeup events使系统从低功耗模式中唤醒(没有外部中断)。
RTC可基于时间编程使系统从停止或待机模式下定期唤醒。为了实现该功能,RTC三个可选的时钟源中有两个可以被选择(通过配置RCC_CSR寄存器的RTCSEL[1:0]):
-
-
低功耗32.768kHZ 外部晶振(LSE OSC),该时钟在低功耗模式下提供了精准的时间
-
低功耗内部RC振荡器(LSI RC),该时钟有可以节省32.768kHZ晶振的消耗。该内部RC振荡器设计的目的为了使用最低的功耗
-
a)RTC auto-wakeup(AWU) from the stop mode
为了通过RTC alarm 事件使系统从停止模式中唤醒,以下步骤是必须的:
<1> 配置EXIT17为上升沿触发(中断/事件模式)
<2>使能RTC alarm中断(RTC_CR)
<3> 配置RTC产生RTC alarm
为了通过RTC Tamper或Time-Stamp事件使系统从停止模式中唤醒,以下步骤是必须的:
<1> 配置EXIT19为上升沿触发(中断/事件模式)
<2> 使能RTC Time-Stamp中断(RTC_CR)或RTC Tamper 中断(RTC_TCR)
<3> 配置RTC检测tamper或者time-stamp事件
为了通过RTC Wakeup事件使系统从停止模式中唤醒,以下步骤是必须的:
<1> 配置EXTI20为上升沿触发(中断/事件模式)
<2> 使能RTC Wakeup中断(RTC_CR)
<3> 配置RTC产生RTC Wakeup事件
b)RTC auto-wakeup(AWU) from the standby mode
为了通过RTC alarm事件使系统从待机模式中唤醒,以下步骤是必须的:
<1> 使能RTC Alarm中断(RTC_CR)
<2> 配置RTC产生RTC Alarm
为了通过RTC Tamper或Time-Stamp事件使系统从待机模式中唤醒,以下步骤是必须的:
<1> 使能RTC Time-Stamp中断(RTC_CR)或RTC Tamper 中断(RTC_TCR)
<2> 配置RTC检测tamper或者time-stamp事件
为了通过RTC Wakeup事件使系统从停止模式中唤醒,以下步骤是必须的:
<1> 使能RTC Wakeup中断(RTC_CR)
<2> 配置RTC产生RTC Wakeup事件
c)Comparator auto-wakeup(AWU) from the stop mode
为了通过比较器1或比较器2唤醒事件使系统从停止模式中唤醒,以下步骤是必须的:
<1> 配置EXIT21--比较器1或者EXTI22--比较器2检测的边沿模式(上升沿、下降沿或者上下沿)
<2>配置比较器产生事件