本帖最后由 乐此不疲 于 2022-12-28 20:49 编辑
测试了好久总是无法正常的初始化STC32G的RTC,程序总是卡在这里while(RTCCFG & 0x01); //等待初始化完成。代码是STC32G手册中的例程,以下是相关代码:
- void RTC_config(void)
- {
- //选择内部 32K
- IRC32KCR = 0x80; //启动内部 32K 振荡器
- while (!(IRC32KCR & 0x01)); //等待时钟稳定
- RTCCFG |= 0x02; //选择内部 32K 作为 RTC 时钟源
- 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
- RTCCFG |= 0x01; //触发 RTC 寄存器初始化
- while(RTCCFG & 0x01); //等待初始化完成,需要在 "RTC 使能" 之后判断.
- RTCIF = 0; //清中断标志
- RTCIEN = 0x08; //使能 RTC 秒中断
- RTCCR = 0x01; // RTC 使能
- }
复制代码
演示现象详述如下:
1.如果使用上述完整的设置函数,程序会卡死在while(RTCCFG & 0x01);这里。
2.如果注释掉while(RTCCFG & 0x01);这句代码,则程序运行正常,RTC时钟也可以正常运行,但是,无法使能秒中断(其他中断没有测试),表现为秒中断无法触发。
如上,此前我用STC8H的板子测试过RTC功能,没发现这个问题,这个板子我弄了好久没能找到原因,请用过这个单片机RTC的朋友指点一下,先谢了!
|