找回密码
 立即注册
查看: 1921|回复: 19

STC8H使用外部32768晶振RTC,初始化卡死。(自己搞定了!)

[复制链接]

该用户从未签到

12

主题

36

回帖

200

积分

中级会员

积分
200
发表于 2023-4-28 02:51:09 | 显示全部楼层 |阅读模式
本帖最后由 zcllom 于 2023-4-29 11:23 编辑

STC8H使用外部32768晶振RTC,初始化卡死在一个while等待中。


    INIYEAR = 21;     //Y:2021
    INIMONTH = 12;    //M:12
    INIDAY = 31;      //D:31
    INIHOUR = 23;     //H:23
    INIMIN = 59;      //M:59
    INISEC = 50;      //S:50
    INISSEC = 0;      //S/128:0

//STC8H8K64U B版本芯片使用内部32K时钟,休眠无法唤醒
//    IRC32KCR = 0x80;   //启动内部32K晶振.
//    while (!(IRC32KCR & 1));  //等待时钟稳定
//    RTCCFG = 0x03;    //选择内部32K时钟源,触发RTC寄存器初始化

    X32KCR = 0x80 + 0x40;   //启动外部32K晶振, 低增益+0x00, 高增益+0x40.
    while (!(X32KCR & 1));  //等待时钟稳定
    RTCCFG = 0x01;    //选择外部32K时钟源,触发RTC寄存器初始化

    RTCIF = 0x00;     //清中断标志
    //RTCIEN = 0x88;    //中断使能, 0x80:闹钟中断, 0x40:日中断, 0x20:小时中断, 0x10:分钟中断, 0x08:秒中断, 0x04:1/2秒中断, 0x02:1/8秒中断, 0x01:1/32秒中断
    RTCIEN = 0x08;
    RTCCR = 0x01;     //RTC使能

    while(RTCCFG & 0x01);        //等待初始化完成,需要在 "RTC使能" 之后判断.
    //设置RTC时间需要32768Hz的1个周期时间,大约30.5us. 由于同步, 所以实际等待时间是0~30.5us.
    //如果不等待设置完成就睡眠, 则RTC会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.

回复 送花

使用道具 举报

该用户从未签到

12

主题

36

回帖

200

积分

中级会员

积分
200
 楼主| 发表于 2023-4-28 02:52:05 | 显示全部楼层
卡死在这个位置
   while (!(X32KCR & 1));  //等待时钟稳定
回复 支持 反对 送花

使用道具 举报

该用户从未签到

555

主题

9652

回帖

1万

积分

管理员

积分
14135
发表于 2023-4-28 07:52:04 | 显示全部楼层
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    昨天 12:57
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2598

    积分

    超级版主

    积分
    2598
    发表于 2023-4-28 09:04:46 | 显示全部楼层
    外接的32768晶振的两个脚上一定要加电容(建议22pF~47pF)
    否则晶振容易不起振而卡死在这里
    你可以用示波器看看你的32768是否有起振
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    12

    主题

    36

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2023-4-28 09:36:16 | 显示全部楼层
    EPSON.PNG


    jinz.PNG


    SHIBOQI.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    12

    主题

    36

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2023-4-28 09:50:01 | 显示全部楼层
    截图如上所示:
    一直卡死在  while (!(X32KCR & 1));  //等待时钟稳定
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    12

    主题

    36

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2023-4-28 09:52:44 | 显示全部楼层
    神农鼎 发表于 2023-4-28 07:52
    你直接用下面这个演示程序测试,附件中是完整的项目文件

    你这个例程用的是内部32K,我现在接的是外部32768,之前用内部的没问题,现在为了高精度用外部的。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    12

    主题

    36

    回帖

    200

    积分

    中级会员

    积分
    200
     楼主| 发表于 2023-4-28 10:02:38 | 显示全部楼层
    本帖最后由 zcllom 于 2023-4-28 10:13 编辑

    到底是怎么一个回事啊,是不是因为我用的EPSON晶振自带内部12.5pF电容的缘故,我外面还加了12pF电容。但是从示波器上看,给P1.7的波形挺漂亮的啊!!??
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    555

    主题

    9652

    回帖

    1万

    积分

    管理员

    积分
    14135
    发表于 2023-4-28 12:51:19 | 显示全部楼层
    1.png
    注释掉前句,去除后三句注释,先用我们的测试程序测试

    https://www.stcaimcu.com/forum.p ... &extra=page%3D1

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 12:57
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    16

    主题

    724

    回帖

    2598

    积分

    超级版主

    积分
    2598
    发表于 2023-4-28 13:21:14 | 显示全部楼层
    本帖最后由 zhp 于 2023-4-28 13:27 编辑

    请参考这个帖子的范例
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=871&extra=page%3D1
    刚刚已更新为使用外部32768,
    在试验箱9.6上测试通过,外部32768晶振可正常起振,功能正常

    外部晶振起振就这两句就可以了,没有其他设置

    1.png

    如果依然不行,可将你的完整测试代码打包上来,大家帮你看看

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-29 12:09 , Processed in 0.069271 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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