打印
[活动]

【APM32F107VCT6 MINI开发板测评】RTC与电子时钟

[复制链接]
350|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2023-2-16 11:59 编辑

APM32F107所提供RTC与通常有一定的区别,只是一个秒计时器,并没有提供时分秒的寄存器及机制处理,为此在使用RTC时,只好借助于这个秒计时器在配上相应的变量和机制处理机制来实现电子时钟功能。
要实现下图所示的计时效果,需设置3个变量来存储时分秒的值。
uint8_thh=8,mm=30, ss=0;

电子时钟计时效果

实现显示效果的主程序为:
int main(void)
{
APM_MINI_LEDInit(LED2);
RTC_Config();
APM_MINI_OLEDInit();
OLED_Init();
OLED_line();
OLED_ShowString(20,0,"APM32F107",16);
OLED_ShowString(20,2," 8:30:00",16);
OLED_ShowString(20,4,"jinglixixi",16);
while(1)
{
         if(ss==60)
         {
                  ss=0;
                  mm=mm+1;
                  if(mm==60)
                  {
                          hh=(hh+1)%60;
                  }
         }
         OLED_ShowNum(20,2,hh,2,16);
         OLED_ShowNum(44,2,mm,2,16);
         OLED_ShowNum(68,2,ss,2,16);
         Delay_us(100000);
}
}


RTC的配置函数为:
voidRTC_Config(void)
{
RCM_EnableAPB1PeriphClock((RCM_APB1_PERIPH_T)RCM_APB1_PERIPH_PMU);
PMU_EnableBackupAccess();
RCM_EnableLSI();
while(RCM_ReadStatusFlag(RCM_FLAG_LSIRDY) == RESET);
RCM_ConfigRTCCLK(RCM_RTCCLK_LSI);
RCM_EnableRTCCLK();
RTC_WaitForSynchro();
RTC_WaitForLastTask();
RTC_EnableInterrupt(RTC_INT_SEC);
RTC_WaitForLastTask();
RTC_ConfigPrescaler(32767);
RTC_WaitForLastTask();
NVIC_EnableIRQRequest(RTC_IRQn, 0, 0);
}


对于秒计时处理是由RTC的中断处理来完成的,其内容为:
extern uint32_t ss;
voidRTC_IRQHandler(void)
{
    if (RTC_ReadIntFlag(RTC_INT_SEC) != RESET)
    {
        RTC_ClearIntFlag(RTC_INT_SEC);
        APM_MINI_LEDToggle(LED2);
        ss=ss+1;
        RTC_WaitForLastTask();
    }
}


为辅助主程序的时间显示,所配置的数值显示函数为:
voidOLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size2)
{
uint8_tt,temp;
uint8_tenshow=0;
for(t=0;t<len;t++)
{
     temp=(num/oled_pow(10,len-t-1))%10;
     if(enshow==0&&t<(len-1))
     {
            if(temp==0)
            {
                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
                 continue;
            }
            elseenshow=1;
        }
        OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
    }
}


这样就利用RTC的秒计时功能实现了电子时钟的计时效果,相对来讲还是比较简便的。

使用特权

评论回复
沙发
qiufengsd| | 2023-3-4 20:41 | 只看该作者
RTC能产生毫秒级的中断吗               

使用特权

评论回复
板凳
updownq| | 2023-3-4 21:24 | 只看该作者
RTC_SetAlarm可设置的最大值为多少

使用特权

评论回复
地板
xiaoyaodz| | 2023-3-4 22:09 | 只看该作者
APM32芯片自带的RTC和DS1302的实时时钟区别大不大

使用特权

评论回复
5
51xlf| | 2023-3-4 22:17 | 只看该作者
rtc后备电池掉电很快               

使用特权

评论回复
6
macpherson| | 2023-3-5 10:26 | 只看该作者
RTC能产生毫秒级的中断吗               

使用特权

评论回复
7
jinglixixi|  楼主 | 2023-3-5 10:36 | 只看该作者
xiaoyaodz 发表于 2023-3-4 22:09
APM32芯片自带的RTC和DS1302的实时时钟区别大不大

具体的精度需要专业的仪器,若仅是理论上的比较可查看2家的资料。

使用特权

评论回复
8
everyrobin| | 2023-3-7 20:02 | 只看该作者
APM32F107VCT6 的rtc具有哪些功能

使用特权

评论回复
9
pixhw| | 2023-3-7 21:07 | 只看该作者
rtc外接纽扣电池电压多少               

使用特权

评论回复
10
jinglixixi|  楼主 | 2023-3-8 09:56 | 只看该作者
pixhw 发表于 2023-3-7 21:07
rtc外接纽扣电池电压多少

一般是3V

使用特权

评论回复
11
jinglixixi|  楼主 | 2023-3-8 09:58 | 只看该作者
everyrobin 发表于 2023-3-7 20:02
APM32F107VCT6 的rtc具有哪些功能

感觉只是秒计时,似乎没有日历功能。

使用特权

评论回复
12
burgessmaggie| | 2023-3-9 12:40 | 只看该作者
rtc用电阻分压供电可以吗               

使用特权

评论回复
13
jinglixixi|  楼主 | 2023-3-10 00:10 | 只看该作者
burgessmaggie 发表于 2023-3-9 12:40
rtc用电阻分压供电可以吗

它是直接用的板子上3.3V电源

使用特权

评论回复
14
minzisc| | 2023-3-10 11:25 | 只看该作者
APM32芯片自带的RTC和DS1302的实时时钟区别大不大

使用特权

评论回复
15
jackcat| | 2023-3-10 12:55 | 只看该作者
RTC_SetAlarm可设置的最大值为多少

使用特权

评论回复
16
hearstnorman323| | 2023-3-10 17:11 | 只看该作者
rtc后备电池掉电很快               

使用特权

评论回复
17
jinglixixi|  楼主 | 2023-3-10 21:59 | 只看该作者
minzisc 发表于 2023-3-10 11:25
APM32芯片自带的RTC和DS1302的实时时钟区别大不大

没测试过,应该不大。

使用特权

评论回复
18
jinglixixi|  楼主 | 2023-3-10 21:59 | 只看该作者
hearstnorman323 发表于 2023-3-10 17:11
rtc后备电池掉电很快

说明功耗比较大

使用特权

评论回复
19
jinglixixi|  楼主 | 2023-3-10 22:00 | 只看该作者
jackcat 发表于 2023-3-10 12:55
RTC_SetAlarm可设置的最大值为多少

看一下数据类型可以知道个大概

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

446

主题

2677

帖子

37

粉丝