关于8H8K64U单片机内置RTC的启动会绕过X32KCR寄存器开启外部32.768K晶振的问题
<p>关于题目中所说的有个疑问,</p><p>1手册中描述的说在使用单片机内置的RTC时配置RTC使用的外部时钟源时需要先启动外部32K晶振,</p>
<p><img src="data/attachment/forum/202502/24/152745lmhm8962bh6hbzaw.png" alt="image.png" title="image.png" /></p>
<p>那么如果我没有启动外部32K晶振,RTC是否还能工作?</p>
没时钟,当然不工作 DebugLab 发表于 2025-2-24 16:03
没时钟,当然不工作
你确定? 我测试了一下,没有启动外部晶振的情况下,RTC运行会卡死.
具体卡死的语句是 while(RTCCFG & 0x01); //等待初始化完成
所以没有启动外部32K晶振的情况下,RTC是不能正常工作的 王昱顺 发表于 2025-2-24 18:31
我测试了一下,没有启动外部晶振的情况下,RTC运行会卡死.
具体卡死的语句是 while(RTCCFG & 0x01); // ...
外置晶振也是存在的吗? 王昱顺 发表于 2025-2-24 18:31
我测试了一下,没有启动外部晶振的情况下,RTC运行会卡死.
具体卡死的语句是 while(RTCCFG & 0x01); // ...
<p>可以尝试运行一下这个程序么?<a href="forum.php?mod=attachment&aid=85867" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:8hrtc.zip</a></p>
<p>程序基础是ISP软件上的8H的范例程序,仅修改了IO的工作模式,,,神TM的原例程把晶振用到的引脚配置成了准双向,,</p>
<p><img src="data/attachment/forum/202502/25/084521hzt45v4z6dgqovv6.png" alt="image.png" title="image.png" /></p>
<p>这个是输出的运行结果,,很奇特。。。外置晶振控制器在没有使能的情况下,RTC正常运行了。我一开始的理解和楼上Debug哥的想法是一致的,没有时钟应该是不工作的。但现在的情况和预期的不一样,再开启RTC之前X32KCR寄存器读取的值都为0(把RTC配置函数注释掉也是如此),开启了RTC并且初始化完成之后X32KCR的晶振稳定标志位却置1了。和你的实验情况也不一样。。</p>
<p>我这里用的是STC8H8K64U D版单片机 固件版本7.4.8U。下载的信息如下。</p>
<p><img src="data/attachment/forum/202502/25/084956t7zt4oi7z47za97i.png" alt="image.png" title="image.png" /></p>
<p>晶振使用的是12.5pF的32.768KHz 圆柱型3*8的晶振,具体是是哪个厂家的就不知道了。</p>
我记得手册上有配置步骤 小白爱上51 发表于 2025-2-25 10:21
我记得手册上有配置步骤
现在是遇到了一点儿,有冲突的地方,, _奶咖君_ 发表于 2025-2-25 08:57
可以尝试运行一下这个程序么? 附件:8hrtc.zip
程序基础是ISP软件上的8H的范例程序,仅修改了IO的工作模 ...
我测试了一下,确实如果你所说,8H单片机上会出现这个直接开启RTC就能用的情况。
应该是单片机内部设计上,开启RTC后,去帮忙初始化了这个外部32K时钟。
我之前是在AI8051U上测试的RTC程序,不初始化外部32K时钟的时候确实会卡死。
所以应该是设计上的不同,为了保险起见,还是要手动做一下开启外部时钟的操作。
王昱顺 发表于 2025-2-25 12:26
我测试了一下,确实如果你所说,8H单片机上会出现这个直接开启RTC就能用的情况。
应该是单片机内部设计上 ...
<p>那我觉得既然是设计上的如此,那么是不是最好在手册上 也说明一下。</p>
<p>还有就是ISP软件范例程序上 《AI8H 系列 - 串口打印RTC时钟范例 - C》 中加入外部晶振使能的操作。正是这里没有使能外部晶振才有了这个帖子。。<br />
以及范例中对所有的IO均设置为准双向的操作是否正确(我这里测试如果按照范例原样下载RTC是不会运行的,然后我把1.6 1.7设置为高阻模式之后RTC跑起来了)。</p>
<p><img src="data/attachment/forum/202502/25/140503khhtpvrxulnhmsyv.png" alt="image.png" title="image.png" /></p>
<p>最后发散了一下思维,先说结论,内置的RTC选择外部晶振作为时钟源时能否工作起来,其实并不在于使能的是外部高速晶振还是低速晶振。</p>
<p>我把32K晶振换了一个22.1184MHz的晶振上去。程序中使能外部振荡器控制寄存器(XOSCCR),然后主时钟依然选择内部高速IRC。这样的配置下开启RTC,原想既然RTC只能配置外部的低速晶振作为时钟源(不能用外部高速晶振作为时钟源),那么RTC应该是不能工作的吧,但是测试结果是,RTC依旧跑起来了,而且是按照22.1184M 的速度跑起来了。猜想RTC把外部高速时钟作为32K时钟了,这。。。。。顺手再原有的秒中断中加入一个计数变量,设置变量加到675次之后再将标志位置1。</p>
<p><img src="data/attachment/forum/202502/25/141230ec2bzbw8bx2b2bvy.png" alt="image.png" title="image.png" /></p>
<p>AUV,您猜怎么着儿。输出的频率又便成了1秒一次。不过可以看的出RTC的时间寄存器们在疯狂上涨,毕竟现实的1秒等于了RTC的11分钟零15秒。。</p>
<p><img src="data/attachment/forum/202502/25/141530f7w97sv4we4wkwkl.png" alt="image.png" title="image.png" /></p>
<p>回头又看了看手册上的时钟树,,,是不是这里就可以连起来了。。哈哈哈哈(bushi</p>
<p><img src="data/attachment/forum/202502/25/142259eogmr38ww834dyv3.png" alt="image.png" title="image.png" /></p>
页:
[1]