#申请原创# #技术资源#
APM32F051和APM32F072等M0+系列MCU都具有Vbat引脚功能,能够只有Vbat引脚供电的情况下,能有较低的功耗继续RTC实时时钟计数,芯片复位休眠也不受影响。但用SDK测试时发现芯片VDD断电和复位状态,RTC并没有继续运行而是暂停的计数。查看数据手册后发现了原因。
在数据手册电源方案这一块中可以看到,Vbat能在VDD、VDDA掉电后继续给LSECLK、RTC、备份寄存器供电。但是LSI时钟在RC振荡器是由VDDA供电,掉电和复位状态LSI就停止了,无法继续为RTC提供时钟源。
由此在需要Vbat供电的情况下,需要外接32.768Khz的外部低速晶振LSE在做时钟源,精度更高,并且能只用Vbat供电。将SDK中的RTC初始化修改如下。
- void RTC_Init(void)
- {
- RTC_Config_T Struct;
- /* Enable PMU Periph Clock */
- RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_PMU);
- /* Backup Access */
- PMU_EnableBackupAccess();
- /* Enable LSE*/
- RCM_ConfigLSE(RCM_LSE_OPEN);
- /* Wait until LSI is ready */
- while (RCM_ReadStatusFlag(RCM_FLAG_LSERDY) == RESET)
- {
- }
- /* Select LICT as RCM clock */
- RCM_ConfigRTCCLK(RCM_RTCCLK_LSE);
- /* Enable RTC clock */
- RCM_EnableRTCCLK();
- /* Disable RTC write Protection */
- RTC_DisableWriteProtection();
- /* Wait Synchro */
- RTC_WaitForSynchro();
- /* set LSI Prediv */
- RTC_ConfigStructInit(&Struct);
- Struct.AsynchPrediv = 0x7F;
- Struct.SynchPrediv = 0xFF;
- RTC_Config(&Struct);
- }
APM32F0xx_SDK_v1.7 - RTC.zip
(3.18 MB, 下载次数: 3)
|