[活动专区] 【AT-START-F407测评】四、RTC_OLED

[复制链接]
 楼主| lisingch 发表于 2021-1-29 20:17 | 显示全部楼层 |阅读模式
      本次实验是在I2C接口的OLED驱动成功的基础上进行了RTC实验,将实时时钟数据送至OLED进行显示。
一、实验资源
1、AT-START-F407开发板;
2、keil v5.31.0.0;
3、BSP等相关资源;
4、0.91'OLED

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

RTC操作所涉及到的寄存数量不多、操作也是比较简便:
2021-01-29_181422.png

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

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

  11. //        OLED_ShowCHinese(24,0,0);//雅
  12. //        OLED_ShowCHinese(40,0,1);//特
  13. //        OLED_ShowCHinese(56,0,2);//力
  14. //        OLED_ShowCHinese(72,0,3);//科
  15. //        OLED_ShowCHinese(88,0,4);//技
  16. //       
  17. //        OLED_ShowString(12,2,"AT-START-F407",16);
  18.        
  19.   while(1)
  20.   {
  21.                 if(RTC_GetFlagStatus(RTC_FLAG_PACE) != RESET)       
  22.                 {
  23.                         /* Update current time */
  24.                         RTC_Get();
  25.                        
  26.                         hour = calendar.hour;
  27.                         min = calendar.min;
  28.                         sec = calendar.sec;
  29.                        
  30.                         OLED_ShowF16X32(0,0,hour/10);
  31.                         OLED_ShowF16X32(16,0,hour%10);
  32.                         OLED_ShowF16X32(32,0,10);
  33.                         OLED_ShowF16X32(48,0,min/10);
  34.                         OLED_ShowF16X32(64,0,min%10);
  35.                         OLED_ShowF16X32(80,0,10);
  36.                         OLED_ShowF16X32(96,0,sec/10);
  37.                         OLED_ShowF16X32(112,0,sec%10);
  38.                         /* print the current time */
  39. //                        printf("\r\n");
  40. //                        printf("%d/%d/%d ", calendar.w_year, calendar.w_month, calendar.w_date);
  41. //                        printf("%02d:%02d:%02d %s", calendar.hour, calendar.min, calendar.sec, weekday_table[calendar.week]);
  42.                
  43.                         /* Clear the RTC Second flag */
  44.                         RTC_ClearFlag(RTC_FLAG_PACE);
  45.                        
  46.                         /* Wait until last write operation on RTC registers has finished */
  47.                         RTC_WaitForLastTask();
  48.                 }
  49.   }
  50. }


五、实验结果
微信图片_20210129200708.jpg
微信图片_20210129200713.jpg

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



您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

15005

帖子

19

粉丝
快速回复 返回顶部 返回列表