打印
[APM32F0]

APM32F0xx RTC实时时钟的注意点

[复制链接]
625|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Alden|  楼主 | 2024-7-30 23:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创# #技术资源#
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)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

83

帖子

1

粉丝