求助!STC32G的RTC初始化不正常、无法使能秒中断
本帖最后由 乐此不疲 于 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的朋友指点一下,先谢了!
用这个实验箱的 RTC 例程测试下
神农鼎 发表于 2022-12-28 20:55
用这个实验箱的 RTC 例程测试下
感谢管理员的指点,我根据你的指点升级了STC-ISP软件并下载了例程,初略测试发现秒中断有了,接下来就又可以玩耍了,多谢了! 神农鼎 发表于 2022-12-28 20:55
用这个实验箱的 RTC 例程测试下
还有一个一直疑惑的问题请教,为什么好多用途的中断都用13这个中断号,请帮忙解释一下。 乐此不疲 发表于 2022-12-29 10:38
感谢管理员的指点,我根据你的指点升级了STC-ISP软件并下载了例程,初略测试发现秒中断有了,接下来就又 ...
RTC功能建议使用外部的32.768k晶振哈,只要这个晶振够准,理论来说这个RTC的时钟误差无限接近于0!! 乐此不疲 发表于 2022-12-29 10:40
还有一个一直疑惑的问题请教,为什么好多用途的中断都用13这个中断号,请帮忙解释一下。 ...
在 Keil 目前的 C51、 C251 编译环境下,中断向量号只支持 0~31,即中断地址必须小于
0100H。 程序里使用的中断向量号超过 31, 编译时就会报错。 随着芯片的功能越来越多、 越
来越强, STC 单片机的部分中断向量号已经超出 31。 此前临时解决的方法是借用 13 号中断
向量地址, 通过汇编代码从当前中断地址跳转到 13 号中断地址执行
工具软件-深圳国芯人工智能有限公司 (stcai.com)
jwd 发表于 2022-12-29 12:40
在 Keil 目前的 C51、 C251 编译环境下,中断向量号只支持 0~31,即中断地址必须小于
0100H。 程序里使用 ...
多谢指点,如此说来我就懂了,好些功能的中断都用13号这个要归功于每个工程中必须添加的ISR.asm这个文件,我的软件在安装时已经用第三方软件扩展了中断号,所以,我如果用36号中断做秒中断函数应该是可以的。再谢! 电子DIY小家 发表于 2022-12-29 10:41
RTC功能建议使用外部的32.768k晶振哈,只要这个晶振够准,理论来说这个RTC的时钟误差无限接近于0!! ...
我现在只是在测试、验证功能,真正应用的方案是使用RX8025的32K输出端直接连接P1.7的震荡输入引脚即可,8025连接VDD、VSS、FOUT三根引线即可作为一个含有温度补偿的晶振使用。
页:
[1]