基于L476RGTx的开发过程:
1.1、首先,我们要保证创建的工程正确的配置了时钟LSE。
在stm32 cubemx自动生成的代码中有如下体现:
1.2、RTC时钟分频设置
时钟源
|
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.3、RTC输入时间格式设置
#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) ;
1、睡眠模式:CPU时钟关闭,所有外围设备,包括Cortex∈-M4核心外围设备,如NVIC、SysTick等可以运行,在中断或事件发生时唤醒CPU。
请参阅第5.3.4节:睡眠模式。
2、低功耗运行模式:当系统时钟频率降低到2 MHz以下时,实现该模式。代码是从SRAM或闪存执行的。
3、低功耗睡眠模式:该模式是从低功耗运行模式进入的。
4、Stop0,stop1,stop2种模式:SRAM1、SRAM2和所有寄存器内容被保留。在VCORE域中的所有时钟都被停止,PLL、MSI、HSI16和HSE被禁用。
LSI和LSE可以保持运行。
RTC可以保持活动(停止模式+RTC,停止模式无RTC)。具有唤醒能力的一些外围设备可以在停止模式期间使HSI16 RC能够检测它们的唤醒状态。
停止2模式下,大多数VCORE域被放置在较低的泄漏模式中。
停止1提供最大数量的活动外设和唤醒源,比停止2更短的唤醒时间但是更高的消耗。
停止0模式下,主调节器保持开启,这允许最快的唤醒时间,但具有更高的消耗。有源外设和唤醒源与停止1模式相同。
当从停止0、停止1、停止2模式退出时,根据软件配置,系统时钟可以是多达48MHz的MSI或HSI16。
5、待机模式:VCORE域断电。然而,当在PWR_CR3寄存器中设置位RRS时,可以保留SRAM2内容:
–具有SRAM2保留的待机模式。在这种情况下,SRAM2由低功率调节器提供。
- 待机模式时,在RWRYCR3寄存器中清除位RRS。在这种情况下,主调节器和低功率调节器断电。
在VCORE域中的所有时钟都被停止,PLL、MSI、HSI16和HSE被禁用。
LSI和LSE可以保持运行。
RTC可以保持活动(待机模式与RTC,待机模式,没有RTC)。
系统时钟,当退出待机模式,是MSI从1 MHz至8兆赫。请参阅第5.3.9节:待机模式。
6、关闭模式:VCORE域断电。VCORE域中的所有时钟都被停止,PLL、MSI、HSI16、LSI和HSE被禁用。LSE可以继续运行。
系统时钟,当退出关机模式,是MSI在4兆赫。在这种模式下,电源电压监视被禁用,并且在电源电压下降的情况下不能保证产品的行为。
请参阅第5.3.10节:关机模式。
7、此外,运行模式下的功耗可以通过以下方法之一来降低:
·降低系统时钟
·在未使用时将时钟选通到APB和AHB外围设备。
未完成,暂留这些内容,以后补充。。。