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

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

[复制链接]
  • TA的每日心情
    开心
    昨天 20:27
  • 签到天数: 126 天

    [LV.7]常住居民III

    30

    主题

    107

    回帖

    932

    积分

    高级会员

    积分
    932
    发表于 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的朋友指点一下,先谢了!
    回复 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9459

    回帖

    1万

    积分

    管理员

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

    用这个实验箱的 RTC 例程测试下
  • TA的每日心情
    开心
    昨天 20:27
  • 签到天数: 126 天

    [LV.7]常住居民III

    30

    主题

    107

    回帖

    932

    积分

    高级会员

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

    感谢管理员的指点,我根据你的指点升级了STC-ISP软件并下载了例程,初略测试发现秒中断有了,接下来就又可以玩耍了,多谢了!
  • TA的每日心情
    开心
    昨天 20:27
  • 签到天数: 126 天

    [LV.7]常住居民III

    30

    主题

    107

    回帖

    932

    积分

    高级会员

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

    还有一个一直疑惑的问题请教,为什么好多用途的中断都用13这个中断号,请帮忙解释一下。
  • TA的每日心情
    开心
    昨天 11:42
  • 签到天数: 100 天

    [LV.6]常住居民II

    41

    主题

    1012

    回帖

    6959

    积分

    荣誉版主

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

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

    RTC功能建议使用外部的32.768k晶振哈,只要这个晶振够准,理论来说这个RTC的时钟误差无限接近于0!!
  • TA的每日心情
    奋斗
    昨天 07:44
  • 签到天数: 170 天

    [LV.7]常住居民III

    26

    主题

    815

    回帖

    2044

    积分

    金牌会员

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


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

    该用户从未签到

    551

    主题

    9459

    回帖

    1万

    积分

    管理员

    积分
    13999
    发表于 2022-12-29 12:53:01 | 显示全部楼层
  • TA的每日心情
    开心
    昨天 20:27
  • 签到天数: 126 天

    [LV.7]常住居民III

    30

    主题

    107

    回帖

    932

    积分

    高级会员

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

    多谢指点,如此说来我就懂了,好些功能的中断都用13号这个要归功于每个工程中必须添加的ISR.asm这个文件,我的软件在安装时已经用第三方软件扩展了中断号,所以,我如果用36号中断做秒中断函数应该是可以的。再谢!
  • TA的每日心情
    开心
    昨天 20:27
  • 签到天数: 126 天

    [LV.7]常住居民III

    30

    主题

    107

    回帖

    932

    积分

    高级会员

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

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

    本版积分规则

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

    GMT+8, 2024-5-17 06:14 , Processed in 0.069638 second(s), 64 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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