找回密码
 立即注册
查看: 3133|回复: 10

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:533
  • 最近打卡:2025-08-06 10:41:36

46

主题

179

回帖

2176

积分

金牌会员

积分
2176
发表于 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
  • 打卡总天数:150
  • 最近打卡:2025-08-06 08:18:56

765

主题

1万

回帖

1万

积分

管理员

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

用这个实验箱的 RTC 例程测试下
  • 打卡等级:以坛为家II
  • 打卡总天数:533
  • 最近打卡:2025-08-06 10:41:36

46

主题

179

回帖

2176

积分

金牌会员

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

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

46

主题

179

回帖

2176

积分

金牌会员

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

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

47

主题

1350

回帖

8116

积分

荣誉版主

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

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

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

54

主题

1880

回帖

3474

积分

论坛元老

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


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

  • 打卡等级:常住居民III
  • 打卡总天数:150
  • 最近打卡:2025-08-06 08:18:56

765

主题

1万

回帖

1万

积分

管理员

积分
18495
发表于 2022-12-29 12:53:01 | 显示全部楼层
  • 打卡等级:以坛为家II
  • 打卡总天数:533
  • 最近打卡:2025-08-06 10:41:36

46

主题

179

回帖

2176

积分

金牌会员

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

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

46

主题

179

回帖

2176

积分

金牌会员

积分
2176
发表于 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三根引线即可作为一个含有温度补偿的晶振使用。
  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-08-06 17:34:58
已绑定手机

7

主题

81

回帖

125

积分

注册会员

积分
125
发表于 3 天前 | 显示全部楼层
我用官方的程序,也是卡在while(RTCCFG & 0x01);这里

点评

请问哪个例程卡住了? 可以试试AiCube生成 自动生成 RTC-实时时钟 演示程序, 年/月/日, 时/分/秒,AiCube@STC-ISP V6.95V - AiCube-ISP , 程序自动生成工具, 支持STC89/15/8H/32/AI8051U 国芯人工智能技术交流网站  详情 回复 发表于 3 天前
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-7 05:32 , Processed in 0.137025 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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