找回密码
 立即注册
查看: 2522|回复: 8

求助!STC32G的RTC初始化不正常、无法使能秒中断

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-05-01 08:46:19

45

主题

176

回帖

1721

积分

金牌会员

积分
1721
发表于 2022-12-28 20:47:42 | 显示全部楼层 |阅读模式
本帖最后由 乐此不疲 于 2022-12-28 20:49 编辑

测试了好久总是无法正常的初始化STC32G的RTC,程序总是卡在这里while(RTCCFG & 0x01); //等待初始化完成。代码是STC32G手册中的例程,以下是相关代码:



  1. void RTC_config(void)
  2. {
  3. //选择内部 32K
  4. IRC32KCR = 0x80; //启动内部 32K 振荡器
  5. while (!(IRC32KCR & 0x01)); //等待时钟稳定
  6. RTCCFG |= 0x02; //选择内部 32K 作为 RTC 时钟源
  7. INIYEAR = 21; //Y:2021
  8. INIMONTH = 12; //M:12
  9. INIDAY = 31; //D:31
  10. INIHOUR = 23; //H:23
  11. INIMIN = 59; //M:59
  12. INISEC = 50; //S:50
  13. INISSEC = 0; //S/128:0
  14. RTCCFG |= 0x01; //触发 RTC 寄存器初始化
  15. while(RTCCFG & 0x01); //等待初始化完成,需要在 "RTC 使能" 之后判断.
  16. RTCIF = 0; //清中断标志
  17. RTCIEN = 0x08; //使能 RTC 秒中断
  18. RTCCR = 0x01; // RTC 使能
  19. }
复制代码


演示现象详述如下:
1.如果使用上述完整的设置函数,程序会卡死在while(RTCCFG & 0x01);这里。
2.如果注释掉while(RTCCFG & 0x01);这句代码,则程序运行正常,RTC时钟也可以正常运行,但是,无法使能秒中断(其他中断没有测试),表现为秒中断无法触发。
如上,此前我用STC8H的板子测试过RTC功能,没发现这个问题,这个板子我弄了好久没能找到原因,请用过这个单片机RTC的朋友指点一下,先谢了!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-28 20:55:26 | 显示全部楼层
1.png

用这个实验箱的 RTC 例程测试下
  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-05-01 08:46:19

45

主题

176

回帖

1721

积分

金牌会员

积分
1721
发表于 2022-12-29 10:38:43 | 显示全部楼层
神*** 发表于 2022-12-28 20:55
用这个实验箱的 RTC 例程测试下

感谢管理员的指点,我根据你的指点升级了STC-ISP软件并下载了例程,初略测试发现秒中断有了,接下来就又可以玩耍了,多谢了!
  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-05-01 08:46:19

45

主题

176

回帖

1721

积分

金牌会员

积分
1721
发表于 2022-12-29 10:40:56 | 显示全部楼层
神*** 发表于 2022-12-28 20:55
用这个实验箱的 RTC 例程测试下

还有一个一直疑惑的问题请教,为什么好多用途的中断都用13这个中断号,请帮忙解释一下。
  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2022-12-29 10:41:59 | 显示全部楼层
乐此*** 发表于 2022-12-29 10:38
感谢管理员的指点,我根据你的指点升级了STC-ISP软件并下载了例程,初略测试发现秒中断有了,接下来就又 ...

RTC功能建议使用外部的32.768k晶振哈,只要这个晶振够准,理论来说这个RTC的时钟误差无限接近于0!!
  • 打卡等级:以坛为家II
  • 打卡总天数:518
  • 最近打卡:2025-05-01 05:52:49
已绑定手机

46

主题

1694

回帖

2540

积分

金牌会员

积分
2540
发表于 2022-12-29 12:40:14 | 显示全部楼层
乐此*** 发表于 2022-12-29 10:40
还有一个一直疑惑的问题请教,为什么好多用途的中断都用13这个中断号,请帮忙解释一下。 ...


在 Keil 目前的 C51、 C251 编译环境下,中断向量号只支持 0~31,即中断地址必须小于
0100H。 程序里使用的中断向量号超过 31, 编译时就会报错。 随着芯片的功能越来越多、 越
来越强, STC 单片机的部分中断向量号已经超出 31。 此前临时解决的方法是借用 13 号中断
向量地址, 通过汇编代码从当前中断地址跳转到 13 号中断地址执行

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2022-12-29 12:53:01 | 显示全部楼层
  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-05-01 08:46:19

45

主题

176

回帖

1721

积分

金牌会员

积分
1721
发表于 2022-12-30 14:19:26 | 显示全部楼层
jw*** 发表于 2022-12-29 12:40
在 Keil 目前的 C51、 C251 编译环境下,中断向量号只支持 0~31,即中断地址必须小于
0100H。 程序里使用 ...

多谢指点,如此说来我就懂了,好些功能的中断都用13号这个要归功于每个工程中必须添加的ISR.asm这个文件,我的软件在安装时已经用第三方软件扩展了中断号,所以,我如果用36号中断做秒中断函数应该是可以的。再谢!
  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-05-01 08:46:19

45

主题

176

回帖

1721

积分

金牌会员

积分
1721
发表于 2022-12-30 14:26:28 | 显示全部楼层
电子DI*** 发表于 2022-12-29 10:41
RTC功能建议使用外部的32.768k晶振哈,只要这个晶振够准,理论来说这个RTC的时钟误差无限接近于0!! ...

我现在只是在测试、验证功能,真正应用的方案是使用RX8025的32K输出端直接连接P1.7的震荡输入引脚即可,8025连接VDD、VSS、FOUT三根引线即可作为一个含有温度补偿的晶振使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:30 , Processed in 0.165899 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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