OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4639|回复: 4

GD32F4系列 RTC时钟配置问题

[复制链接]

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
发表于 2022-1-26 10:28:51 | 显示全部楼层 |阅读模式
5金钱
芯片使用GD32F405,按照官方例程配置RTC时钟代码如下,在测试中发现,读出来的时间比实际的时间要慢。有谁知道prescaler_a,prescaler_s分频需要怎么配置才能让RTC计时精准?
void rtc_pre_config(void)
{
    /* enable access to RTC registers in backup domain */
    rcu_periph_clock_enable(RCU_PMU);  //使能PMU电源管理单元时钟
    pmu_backup_write_enable();  //使能电源备份源,RTC需要此备份域

    rcu_osci_on(RCU_IRC32K);  //使用内部晶振32K
    while(ERROR == rcu_osci_stab_wait(RCU_IRC32K));
    rcu_rtc_clock_config(RCU_RTCSRC_IRC32K);  //配置RTC时钟源为内部晶振32K
    prescaler_a = 0x63;  //ck_apre频率 = RTC_CLOCK/(prescaler_a+1) = 32000/(99+1)=320HZ
    prescaler_s = 0x13F;  //ck_spre频率 = ck_apre/(prescaler_s+1) = 320/(319+1)=1HZ

    rcu_periph_clock_enable(RCU_RTC);  //使能RTC外设时钟
    rtc_register_sync_wait();
}

最佳答案

查看完整内容[请看2#楼]

内部晶振有20%的误差,用来做RTC就别想了
天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2142

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4858
金钱
4858
注册时间
2015-1-10
在线时间
609 小时
发表于 2022-1-26 10:28:52 | 显示全部楼层
内部晶振有20%的误差,用来做RTC就别想了
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-1-28 08:56:02 | 显示全部楼层
听芯片供应商说,使用内部时钟不准确。决定用外部32.768K晶振再试试。结果,测试出来的时间依然是慢的,跟用内部32K晶振没区别。
void rtc_pre_config(void)
{
    rcu_osci_on(RCU_LXTAL);  //使用外部晶振32.768K
    while(ERROR == rcu_osci_stab_wait(RCU_LXTAL));
    rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);  //配置RTC时钟源为外部晶振32.768K
    prescaler_a = 0x7F;  //ck_apre频率 = RTC_CLOCK/(prescaler_a+1) = 32768/(127+1)=256HZ
    prescaler_s = 0xFF;  //ck_spre频率 = ck_apre/(prescaler_s+1) = 256/(255+1)=1HZ
    rcu_periph_clock_enable(RCU_RTC);  //使能RTC外设时钟
    rtc_register_sync_wait();
}
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-1-28 08:58:14 | 显示全部楼层
听芯片供应商说,使用内部时钟不准确。决定用外部32.768K晶振再试试。结果,测出来的时间依然是慢的,跟用内部32K的没区别。
void rtc_pre_config(void)
{
    rcu_osci_on(RCU_LXTAL);  //使用外部晶振32.768K
    while(ERROR == rcu_osci_stab_wait(RCU_LXTAL));
    rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);  //配置RTC时钟源为外部晶振32.768K
    prescaler_a = 0x7F;  //ck_apre频率 = RTC_CLOCK/(prescaler_a+1) = 32768/(127+1)=256HZ
    prescaler_s = 0xFF;  //ck_spre频率 = ck_apre/(prescaler_s+1) = 256/(255+1)=1HZ
    rcu_periph_clock_enable(RCU_RTC);  //使能RTC外设时钟
    rtc_register_sync_wait();
}
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-2-9 10:34:02 | 显示全部楼层
本帖最后由 紫气东升 于 2022-2-9 10:37 编辑
阿侑kevin 发表于 2022-1-30 18:13
内部晶振有20%的误差,用来做RTC就别想了

对的,偏差多少不清楚,反正很大,我也问了芯片供应商技术人员。他们建议使用外部低速时钟32.768KHZ
天道酬勤
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-6 11:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表