OpenEdv-开源电子网

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

GD32F4系列 RTC使用外部低速晶振配置时钟问题

[复制链接]

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
发表于 2022-2-10 11:21:31 | 显示全部楼层 |阅读模式
10金钱
参照官方例程配置RTC时钟如下,使用外部32.768KHZ晶振,在自己的板子上仿真发现,程序在rtc_register_sync_wait();时钟同步这一步出现问题,无法同步。导致后面设置RTC时间失败。但是我将程序烧录到demo板上测试是没问题的,有哪位大佬知道这是什么问题?
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_LXTAL);  //使用外部晶振32.768K
    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();
}
硬件检查线路也没查出什么问题,晶振也是正常起振的。

最佳答案

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

现在问题已经解决了,我在其它论坛上把这个问题放上去,按照网友给的建议方法来做。问题已得到解决。我的板子上是带有备份电池的,解决问题时没想到要把电池也拆下来彻底断电,导致备份域寄存器没法复位。 问题解决方法连接: https://bbs.21ic.com/icview-3197106-1-1.html 有遇到类似问题的网友可以参考一下。卡了我一周的问题终于解决了,心情一下子舒畅了很多。
天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-2-10 11:21:32 | 显示全部楼层
现在问题已经解决了,我在其它论坛上把这个问题放上去,按照网友给的建议方法来做。问题已得到解决。我的板子上是带有备份电池的,解决问题时没想到要把电池也拆下来彻底断电,导致备份域寄存器没法复位。
问题解决方法连接: https://bbs.21ic.com/icview-3197106-1-1.html
有遇到类似问题的网友可以参考一下。卡了我一周的问题终于解决了,心情一下子舒畅了很多。
天道酬勤
回复

使用道具 举报

4

主题

896

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4305
金钱
4305
注册时间
2019-9-4
在线时间
896 小时
发表于 2022-2-10 11:31:08 | 显示全部楼层
没用过GD32的,应该是STM32的差不多,你仿真下看下寄存器的值,和手册对比一下排除看看
回复

使用道具 举报

3

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
金钱
306
注册时间
2018-1-10
在线时间
48 小时
发表于 2022-2-10 17:20:23 | 显示全部楼层
是不是晶振没起振
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-2-12 14:25:52 | 显示全部楼层
993389738 发表于 2022-2-10 17:20
是不是晶振没起振

用示波器看晶振已经起振了的,有波形
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-2-12 14:34:47 | 显示全部楼层
A571157242 发表于 2022-2-10 11:31
没用过GD32的,应该是STM32的差不多,你仿真下看下寄存器的值,和手册对比一下排除看看

昨天芯片供应商技术人员也过来看过了,也是单步仿真然后看寄存器值,然后跟手册对比。发现寄存器的值就是不对。但是换成开发板上单步仿真看寄存器值,它又是正确的。如果说是软件有问题,那么在开发板上寄存器值也应该是错误的才合理。如果说是自己板子的问题,但是板子上RTC部分的电路也就一个晶振两个电容,没有其它的东西,这样看起来也不太象是硬件的问题。
天道酬勤
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-2-13 18:39:02 | 显示全部楼层
紫气东升 发表于 2022-2-12 14:34
昨天芯片供应商技术人员也过来看过了,也是单步仿真然后看寄存器值,然后跟手册对比。发现寄存器的值就是 ...

原厂都过来了? 换个板子试试
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-2-14 08:56:06 | 显示全部楼层
正点原子 发表于 2022-2-13 18:39
原厂都过来了? 换个板子试试

已经换了几块板了,都是行不通,晶振,电容都换了试了,依然不行。
天道酬勤
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-2-15 01:06:26 | 显示全部楼层
紫气东升 发表于 2022-2-14 08:56
已经换了几块板了,都是行不通,晶振,电容都换了试了,依然不行。

那不应该了,原厂没解决?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2019-11-12
在线时间
77 小时
发表于 2022-2-15 10:23:37 | 显示全部楼层
我用f3的没啥问题, 是停在同步函数里的while循环吗
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-2-16 09:10:07 | 显示全部楼层
正点原子 发表于 2022-2-15 01:06
那不应该了,原厂没解决?

没有,由于只有一个下午时间,时间有限,没能找出问题点。不过问题现在已经解决了。我把结果发出来
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-2-16 09:14:06 | 显示全部楼层
nstopb 发表于 2022-2-15 10:23
我用f3的没啥问题, 是停在同步函数里的while循环吗

rtc_register_sync_wait()函数没有用while循环,这个函数里面做了超时处理的,如果同步不成功,计数超时时间到就会跳出这个函数。现在问题已经解决。
天道酬勤
回复

使用道具 举报

4

主题

83

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2019-11-12
在线时间
77 小时
发表于 2022-2-16 10:13:45 | 显示全部楼层
紫气东升 发表于 2022-2-16 09:14
rtc_register_sync_wait()函数没有用while循环,这个函数里面做了超时处理的,如果同步不成功,计数超时 ...

那可能给的等待时间太短了,如果是从低端st移植过去的程序容易出现这种问题,主频高了,需要增加滴答数才能等待相同的时间。
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
840
金钱
840
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2022-2-17 09:07:47 | 显示全部楼层
nstopb 发表于 2022-2-16 10:13
那可能给的等待时间太短了,如果是从低端st移植过去的程序容易出现这种问题,主频高了,需要增加滴答数才 ...

不是这个原因,我也试过加个while循环,结果就是一直在循环里。所以不是时间短的问题。
天道酬勤
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 03:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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