GD32E230 RTC 使用内部低速时钟

GD32E230官方的RTC demo存在的问题

官方的RTC例子,时钟源没有做分频,导致时间更新非常快,时间不正确。

我移植过来的RTC初始化函数
/***************************************************************************************************
 * @fn      bsp_InitRTC
 *
 * @brief   RTC初始化
 *
 * @param	无
 *
 * @return	无 
 */
void bsp_InitRTC(void)
{
    uint32_t prescaler_s;
    uint32_t prescaler_a;
    
    rcu_periph_clock_enable(RCU_PMU);
    pmu_backup_write_enable();
    
    rcu_osci_on(RCU_IRC40K);  //使能内部低速时钟
    
    rcu_osci_bypass_mode_enable(RCU_IRC40K);
    
    rcu_rtc_clock_config(RCU_RTCSRC_IRC40K);
    
    //等待内部时钟稳定
    if(rcu_osci_stab_wait(RCU_IRC40K) == SUCCESS)
    {
        rcu_rtc_clock_config(RCU_RTCSRC_IRC40K);
    }
    
    rcu_periph_clock_enable(RCU_RTC);  //使能RTC外设时钟
    
    rtc_register_sync_wait(); //等待RTC寄存器与APB时钟同步
    
    rtc_deinit();
    
    g_tRTC.rtc_year           = 0x18 ;
    g_tRTC.rtc_month          = RTC_MAY ;
    g_tRTC.rtc_date           = 0x13 ;
    g_tRTC.rtc_day_of_week    = RTC_FRIDAY ;
    g_tRTC.rtc_hour           = 0x12;
    g_tRTC.rtc_minute         = 0x00;
    g_tRTC.rtc_second         = 0x00;
    g_tRTC.rtc_display_format = RTC_24HOUR;

    
    //RTC时钟分频系数(这里必须分频,否则时间不准确)
    prescaler_s = 0x18F;
    prescaler_a = 0x63;
    
    g_tRTC.rtc_factor_asyn = prescaler_a;
    g_tRTC.rtc_factor_syn = prescaler_s;
    
    rtc_refclock_detection_enable();
    
    rtc_init(&g_tRTC);   

}
秒处理函数
/***************************************************************************************************
 * @fn      SEC_Handler
 *
 * @brief   秒事务处理函数
 *
 * @param	无
 *
 * @return	无 
 */
void SEC_Handler(void)
{
    rtc_parameter_struct s_RTC;
    
    rtc_current_time_get(&s_RTC);
    
    
    if (s_RTC.rtc_second != g_tRTC.rtc_second)
    {
        g_tRTC = s_RTC;
        rtc_current_time_get(&g_tRTC);        
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值