zcllom 发表于 2023-4-28 11:51:55

STC8H4K初始化外部32768晶振的RTC卡死,心里烦。(已解决!)

本帖最后由 zcllom 于 2023-4-29 11:21 编辑

已在STC的论坛发了贴,还没解决。
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会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.

zcllom 发表于 2023-4-28 11:54:23

外部引脚接了两个12pF电容



晶振用的是EPSON的内置负载电容12.5pF


晶振输出到STC8H的P1.7脚波形很漂亮

zcllom 发表于 2023-4-28 12:08:53

一直卡死在这个地方:while (!(X32KCR & 1));      //等待时钟稳定

国学芯用 发表于 2023-4-28 13:11:47

本帖最后由 国学芯用 于 2023-4-28 13:18 编辑

zcllom 发表于 2023-4-28 12:08
一直卡死在这个地方:while (!(X32KCR & 1));      //等待时钟稳定
(引用自3楼)

我去看了 STC技术已经在线解答了,如有疑问 可以继续跟帖
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=2045&highlight=RTC

小李非刀 发表于 2023-4-28 17:53:01

STC官方有RTC例子,都很好用的。

zcllom 发表于 2023-4-28 20:57:48

本帖最后由 zcllom 于 2023-4-29 02:40 编辑

实验证明,用官方的例子一样不行。

zcllom 发表于 2023-4-29 11:19:18

本帖最后由 zcllom 于 2023-4-29 11:22 编辑

结案了,keil的C51编译器错误定位功能不行,实际上不是卡死在这个位置。
经过昼夜调试,发现开了“秒”中断,就会卡死,于是明白了肯定是中断标记没有清零,反复进中断,但是,明明在中断里已经把标记清零了,怎么还不行?
后来查得STC8H的RTC中断向量为0123H(中断号为36),而超过31的向量号无法直接处理,必须做个手脚转换一下,于是搞好了!

lb0857 发表于 2023-4-29 16:11:28

查得STC8H的RTC中断向量为0123H(中断号为36),而超过31的向量号无法直接处理,必须做个手脚转换一下

手册上面有注明吗{:loveliness:}

rz007 发表于 2023-4-29 17:00:01

zcllom 发表于 2023-4-29 11:19
结案了,keil的C51编译器错误定位功能不行,实际上不是卡死在这个位置。
经过昼夜调试,发现开了“秒”中断 ...
(引用自7楼)

我在国民的芯片上,刚刚遇到类似的问题,也是中断后,很小的概率清除不了中断,导致死机了
页: [1]
查看完整版本: STC8H4K初始化外部32768晶振的RTC卡死,心里烦。(已解决!)