丽江春水 发表于 2023-1-13 20:24:35

看到时钟显示了,我去看看程序

丽江春水 发表于 2023-1-13 21:25:53

电子DIY小家 发表于 2023-1-13 16:17
屠龙刀的代码包里的科学计算器试验里有这个时钟哦,在屏保状态下会显示时钟~有兴趣可以试试 ...

把科学计算器程序里的rtc.c和rtc.h文件拷到我自己的程序里,原来正常运行的程序,只要执行rtc.c里的设置内时钟指令,就无法运行了。也就是无法打开内部时钟。
void main()
{
unsignedint c=0;
        mcu_initial();
        TFT089_init();
        TFT_clear();
        RTC_config();//只要执行这个函数就无法运行下去了
        c=ReadTemperature();

        digit6_display(0,32,c);

        while(1)
        {
        c=0;
                c=ReadTemperature();
                digit6_display(0,0,c);
c=SEC;
                digit6_display(0,64,c);
        }

wangyifan 发表于 2023-1-14 12:45:55

32G12K128,彩屏显示实时时钟,同时使用AD中断为什么会变慢呢?查询法使用AD可以。

丽江春水 发表于 2023-1-15 07:55:00

wangyifan 发表于 2023-1-14 12:45
32G12K128,彩屏显示实时时钟,同时使用AD中断为什么会变慢呢?查询法使用AD可以。 ...

求例程,我自己的程序框架可能有问题,始终玩不转切换时钟源。但找不到问题在哪,只好求助别人的例程,再移植。

丽江春水 发表于 2023-1-15 07:59:35

曾遇到这们一个情况,我自己写的两个程序,运行都正常,能实现预期结果,想把它们合成一个时,把一个程序的内容合到第二个时,出现问题,但自己找不到原因,解决不了。然后把第二个程序合到第一个时,程序能正常运行,感觉自己在某些语句的理解上存在偏差,只是总找到问题出在哪里,新人的苦呀。

wangyifan 发表于 2023-1-15 10:06:01

void RTC_config(void)
{
    INIYEAR = 23;
    INIMONTH = 1;
    INIDAY = 13;
    INISEC = S_SEC;          // RTC的时计数值
    INIMIN = S_MIN;          // RTC的分计数值
    INIHOUR = S_HOUR;          // RTC的秒计数值
    INISSEC = 0;
    //STC32G 芯片使用内部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 = 0x08;    //中断使能, 0x80:闹钟中断, 0x40:日中断, 0x20:小时中断, 0x10:分钟中断, 0x08:秒中断, 0x04:1/2秒中断, 0x02:1/8秒中断, 0x01:1/32秒中断
    RTCCR = 0x01;   //RTC使能
    while(RTCCFG & 0x01)
    {
      ;    //等待初始化完成,需要在 "RTC使能" 之后判断.
    }
    //设置RTC时间需要32768Hz的1个周期时间,大约30.5us. 由于同步, 所以实际等待时间是0~30.5us.
    //如果不等待设置完成就睡眠, 则RTC会由于设置没完成, 停止计数, 唤醒后才继续完成设置并继续计数.
}
/************************************************************************
*************************************************************************/
void RTC_Isr()interrupt 13
{
    if(RTCIF & 0x80)    //闹钟中断
    {
      RTCIF &= ~0x80;
      B_Alarm = 1;
    }
    if(RTCIF & 0x08)    //秒中断
    {
      RTCIF &= ~0x08;
      B_1s = 1;
    }

}

丽江春水 发表于 2023-1-15 18:52:24

本帖最后由 丽江春水 于 2023-1-15 18:55 编辑

多谢,已复制,利用过节时间好好研究一下,可惜是外部晶振,我手里没有这个频率的晶振,没法试。

神农鼎 发表于 2023-1-15 18:58:23

内部那个 32K, 是 20K ~ 40K 的掉电唤醒定时器用的 LIRC时钟,你可以用来 测试,实际用 RTC, 必须外部32768

丽江春水 发表于 2023-1-15 21:28:17

神农鼎 发表于 2023-1-15 18:58
内部那个 32K, 是 20K ~ 40K 的掉电唤醒定时器用的 LIRC时钟,你可以用来 测试,实际用 RTC, 必须外部32768 ...

谢谢,这个事我没想到,我的外部时钟用了11M的,没法用32K了

神农鼎 发表于 2023-1-15 21:37:55

你外部11M, RTC 就不要考虑用了; 用RTC, 则CPU用内部时钟
页: 1 [2] 3 4
查看完整版本: 想用STC32g12k128显示实时时钟,求教