打印
[活动专区]

【AT-START-F407测评】四、RTC_OLED

[复制链接]
440|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
      本次实验是在I2C接口的OLED驱动成功的基础上进行了RTC实验,将实时时钟数据送至OLED进行显示。
一、实验资源
1、AT-START-F407开发板;
2、keil v5.31.0.0;
3、BSP等相关资源;
4、0.91'OLED

二、相关知识学习
      AT32F407VGT7的RTC模块功能比较强大,应用比较灵活。其工作时钟可配置为HSELSELSI三种中的一种;支持闹钟、秒、溢出等中断:




RTC操作所涉及到的寄存数量不多、操作也是比较简便:


三、硬件连接
      硬件部分只是在I2C1端口连接了一只0.91'、分辨率为128*32的OLED显示器,详见上篇实验https://bbs.21ic.com/icview-3068734-1-1.html

四、程序实现
      程序代码主要源自“BSP”中的“RTC”部分,只是在本次实验中进行了小的修改。主要代码:
int main(void)
{
        uint8_t hour,min,sec;
       
  AT32_Board_Init();
        UART_Print_Init(115200);
        I2Cx_Init(I2C1);
        OLED_Init();
        RTC_Init();
        OLED_Clear();

//        OLED_ShowCHinese(24,0,0);//雅
//        OLED_ShowCHinese(40,0,1);//特
//        OLED_ShowCHinese(56,0,2);//力
//        OLED_ShowCHinese(72,0,3);//科
//        OLED_ShowCHinese(88,0,4);//技
//       
//        OLED_ShowString(12,2,"AT-START-F407",16);
       
  while(1)
  {
                if(RTC_GetFlagStatus(RTC_FLAG_PACE) != RESET)       
                {
                        /* Update current time */
                        RTC_Get();
                       
                        hour = calendar.hour;
                        min = calendar.min;
                        sec = calendar.sec;
                       
                        OLED_ShowF16X32(0,0,hour/10);
                        OLED_ShowF16X32(16,0,hour%10);
                        OLED_ShowF16X32(32,0,10);
                        OLED_ShowF16X32(48,0,min/10);
                        OLED_ShowF16X32(64,0,min%10);
                        OLED_ShowF16X32(80,0,10);
                        OLED_ShowF16X32(96,0,sec/10);
                        OLED_ShowF16X32(112,0,sec%10);
                        /* print the current time */
//                        printf("\r\n");
//                        printf("%d/%d/%d ", calendar.w_year, calendar.w_month, calendar.w_date);
//                        printf("%02d:%02d:%02d %s", calendar.hour, calendar.min, calendar.sec, weekday_table[calendar.week]);
               
                        /* Clear the RTC Second flag */
                        RTC_ClearFlag(RTC_FLAG_PACE);
                       
                        /* Wait until last write operation on RTC registers has finished */
                        RTC_WaitForLastTask();
                }
  }
}


五、实验结果



六、总结
      RTC实验看上去很简单,其实这主要得意于"BSP"提供的RTC实验例程,这部分代码非常值得借鉴学习。



使用特权

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

本版积分规则

99

主题

14984

帖子

17

粉丝