#申请原创# #技术资源#
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)
|