#STM32学习#RTC设置与低功耗(1)

 

基于L476RGTx的开发过程:

 

1、关于RTC的配置:

1.1、首先,我们要保证创建的工程正确的配置了时钟LSE

stm32 cubemx自动生成的代码中有如下体现:

1.2RTC时钟分频设置

时钟源

AsynchPrediv 

SynchPrediv 

得到

HSE_RTC =1MHz

124

7999

1Hz

LSE=32.768kHz

127

255

1Hz

LSI=32kHz

127

249

1Hz

LSI=37Khz

124

295

1Hz

//由外部32.768KHz得到1Hz的RTC

hrtc.Init.AsynchPrediv = 127; //异步预分频值 

hrtc.Init.SynchPrediv = 255; //同步预分频值

1.3RTC输入时间格式设置

#define RTC_FORMAT_BIN      0x00000000u //0~60)显然使用此格式

#define RTC_FORMAT_BCD      0x00000001u//0~90

BCD码的表示方法可知关系:BIN = BCD/10*16+BCD%10

如果RTC输入时间格式为BCD,而在读取时间的时候默认使用的却是BIN,则会导致出现 时分秒跳跃增加最大时间来到了89。如下图所示。

1.4、设置闹钟屏蔽时,屏蔽日期小时分钟只匹配秒

sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY|RTC_ALARMMASK_HOURS|RTC_ALARMMASK_MINUTES;

sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;

这样的设置,可以达到每分钟一次闹钟中断。

1.5、设置唤醒中断(此函数设置完之后,不能进入wakeup中断服务函数,正在查问题)

HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, 5, RTC_WAKEUPCLOCK_RTCCLK_DIV16) ;

 

2、关于低功耗

1、睡眠模式CPU时钟关闭,所有外围设备,包括Cortex-M4核心外围设备,如NVICSysTick等可以运行,在中断或事件发生时唤醒CPU

请参阅第5.3.4节:睡眠模式。

2低功耗运行模式:当系统时钟频率降低到2 MHz以下时,实现该模式。代码是从SRAM或闪存执行的。

3、低功耗睡眠模式:该模式是从低功耗运行模式进入的。

4Stop0stop1stop2种模式SRAM1SRAM2和所有寄存器内容被保留。在VCORE域中的所有时钟都被停止,PLLMSIHSI16HSE被禁用。

LSILSE可以保持运行。

RTC可以保持活动(停止模式+RTC,停止模式无RTC)。具有唤醒能力的一些外围设备可以在停止模式期间使HSI16 RC能够检测它们的唤醒状态。

停止2模式下,大多数VCORE域被放置在较低的泄漏模式中。

停止1提供最大数量的活动外设和唤醒源,比停止2更短的唤醒时间但是更高的消耗。

停止0模式下,主调节器保持开启,这允许最快的唤醒时间,但具有更高的消耗。有源外设和唤醒源与停止1模式相同。

当从停止0、停止1、停止2模式退出时,根据软件配置,系统时钟可以是多达48MHzMSIHSI16

5待机模式VCORE域断电。然而,当在PWR_CR3寄存器中设置位RRS时,可以保留SRAM2内容:

–具有SRAM2保留的待机模式。在这种情况下,SRAM2由低功率调节器提供。

待机模式时,在RWRYCR3寄存器中清除位RRS。在这种情况下,主调节器和低功率调节器断电。

VCORE域中的所有时钟都被停止,PLLMSIHSI16HSE被禁用。

LSILSE可以保持运行。

RTC可以保持活动(待机模式与RTC,待机模式,没有RTC)。

系统时钟,当退出待机模式,是MSI1 MHz8兆赫。请参阅第5.3.9节:待机模式。

6关闭模式VCORE域断电。VCORE域中的所有时钟都被停止,PLLMSIHSI16LSIHSE被禁用。LSE可以继续运行。

系统时钟,当退出关机模式,是MSI4兆赫。在这种模式下,电源电压监视被禁用,并且在电源电压下降的情况下不能保证产品的行为。

请参阅第5.3.10节:关机模式。

7、此外,运行模式下的功耗可以通过以下方法之一来降低:

·降低系统时钟

·在未使用时将时钟选通到APBAHB外围设备。

 

未完成,暂留这些内容,以后补充。。。

猜你喜欢

转载自blog.csdn.net/Kshine2017/article/details/84967379