STM32L-Power control(PWR)

来源:互联网 发布:阿里巴巴标题优化技巧 编辑:程序博客网 时间:2024/05/20 06:23

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>配置比较器产生事件

0 0
原创粉丝点击