STC8H使用外部32768晶振RTC,初始化卡死。(自己搞定了!)
本帖最后由 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会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.
卡死在这个位置
while (!(X32KCR & 1));//等待时钟稳定 你直接用下面这个演示程序测试,附件中是完整的项目文件
不停电下载保持RTC参数利用用户接口实现---STC8H系列 - 触摸按键/大电流LED数码管自动刷新/段码LCD/RTC实时时钟/低功耗 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
外接的32768晶振的两个脚上一定要加电容(建议22pF~47pF)
否则晶振容易不起振而卡死在这里
你可以用示波器看看你的32768是否有起振
截图如上所示:
一直卡死在while (!(X32KCR & 1));//等待时钟稳定 神农鼎 发表于 2023-4-28 07:52
你直接用下面这个演示程序测试,附件中是完整的项目文件
你这个例程用的是内部32K,我现在接的是外部32768,之前用内部的没问题,现在为了高精度用外部的。 本帖最后由 zcllom 于 2023-4-28 10:13 编辑
到底是怎么一个回事啊,是不是因为我用的EPSON晶振自带内部12.5pF电容的缘故,我外面还加了12pF电容。但是从示波器上看,给P1.7的波形挺漂亮的啊!!??
注释掉前句,去除后三句注释,先用我们的测试程序测试
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=871&extra=page%3D1
本帖最后由 zhp 于 2023-4-28 13:27 编辑
请参考这个帖子的范例
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=871&extra=page%3D1
刚刚已更新为使用外部32768,
在试验箱9.6上测试通过,外部32768晶振可正常起振,功能正常
外部晶振起振就这两句就可以了,没有其他设置
如果依然不行,可将你的完整测试代码打包上来,大家帮你看看