3049|5

1462

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

NUCLEO_F767ZI实现RTC实时时钟 [复制链接]

利用NUCLEO_F767ZI开发板自身所具备的RTC,配以OLED显示屏可实现实时时钟计时功能,其效果如图1所示。
为了便于在OLED屏上实现中文显示,可以PCtoLCD2002字模提取软件来构建小字库,其排列顺序如图2所示。
                图1 RTC实时时钟

                    图2 字模提取

在构建小字库后,可通过下面的程序来实现显示界面的布局。
  1. void jm()
  2. {
  3.         OLED_Clear();
  4.         OLED_ShowString(18,0,"RTC",16);
  5.         OLED_ShowCHinese(42,0,14);  
  6.         OLED_ShowCHinese(60,0,3);  
  7.         OLED_ShowCHinese(78,0,3);  
  8.         OLED_ShowCHinese(96,0,15);
  9.         OLED_ShowString(0,2,"2016",16);
  10.         OLED_ShowCHinese(32,2,0);   
  11.         OLED_ShowString(50,2,"11",16);
  12.         OLED_ShowCHinese(68,2,1);
  13.         OLED_ShowString(86,2," 7",16);
  14.         OLED_ShowCHinese(104,2,2);  
  15.         OLED_ShowString(16,4,"12",16);
  16.         OLED_ShowCHinese(32,4,3);   
  17.         OLED_ShowString(50,4,"30",16);
  18.         OLED_ShowCHinese(68,4,4);
  19.         OLED_ShowString(86,4,"00",16);
  20.         OLED_ShowCHinese(104,4,5);   
  21.         OLED_ShowCHinese(40,6,6);  
  22.         OLED_ShowCHinese(60,6,7);         
  23.         OLED_ShowCHinese(80,6,8);
  24. }
复制代码
    在使用HAL库的基础上,通过对RTC设置与读取函数的调用,可实现RTC的实时时钟计时功能,其主函数的内容如下:
  1. int main(void)
  2. {
  3.       RTC_TimeTypeDef RTC_TimeStruct;
  4.       RTC_DateTypeDef RTC_DateStruct;
  5.       u8 t=0;                 
  6.       HAL_Init();                                              
  7.       Stm32_Clock_Init(432,25,2,9);   
  8.       delay_init(216);               
  9.       LED_Init();        //  LED初始化               
  10.       RTC_Init();        //  RTC初始化                 
  11.       RTC_Set_WakeUp(RTC_WAKEUPCLOCK_CK_SPRE_16BITS,0);
  12.              OLED_Init();             //        OLED初始化         
  13.              OLED_Clear();      //   清屏
  14.              jm();               //   显示界面

  15.      RTC_Set_Time(12,30,0,RTC_HOURFORMAT12_AM);   //  设置时间
  16.      RTC_Set_Date(16,11,7,1);                            //   设置日期
  17.      while(1)
  18.      {
  19.                 t++;
  20.                 if((t%10)==0)       
  21.                 {    //  读取时间值
  22.           HAL_RTC_GetTime(&RTC_Handler,&RTC_TimeStruct,RTC_FORMAT_BIN);
  23.           //  显示时间值
  24.                         OLED_ShowNum(16,4,RTC_TimeStruct.Hours,2,16);
  25.                         OLED_ShowNum(50,4,RTC_TimeStruct.Minutes,2,16);
  26.           OLED_ShowNum(86,4,RTC_TimeStruct.Seconds,2,16);       
  27.           //        读取日期值               
  28.           HAL_RTC_GetDate(&RTC_Handler,&RTC_DateStruct,RTC_FORMAT_BIN);
  29.           //    显示日期值
  30.                         OLED_ShowNum(16,2,RTC_DateStruct.Year,2,16);
  31.                         OLED_ShowNum(50,2,RTC_DateStruct.Month,2,16);
  32.           OLED_ShowNum(86,2,RTC_DateStruct.Date,2,16);                                     
  33.                         if(RTC_DateStruct.WeekDay<7)                 //   读取星期值并显示              
  34.              OLED_ShowCHinese(80,6,7+RTC_DateStruct.WeekDay);
  35.                         else OLED_ShowCHinese(80,6,2);
  36.                     }
  37.                 if((t%20)==0)  LED0_Toggle;                       //    指示灯闪烁提示
  38.      delay_ms(10);
  39.         }  
  40. }
复制代码
    受开发板上只有一个USER键的制约,这里没有提供RTC的时钟校正处理,只是以指定数值的方式设置RTC的初始值。若再扩展一个输入键,则可实时地对RTC的值进行调整。

此帖出自stm32/stm8论坛

最新回复

电磁是?   详情 回复 发表于 2016-11-17 09:03

赞赏

1

查看全部赞赏

点赞 关注(1)
 

回复
举报

190

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
万年历怎么实时的更新,有误差没
此帖出自stm32/stm8论坛

点评

转个电磁  详情 回复 发表于 2016-11-15 12:18
NUCLEO_F767ZI内部自带RTC,在不断电情况下自动运行更新时间,误差肯定会有,但非常小而已。  详情 回复 发表于 2016-11-15 11:26
 
 

回复

6070

帖子

4

TA的资源

版主

板凳
 
NUCLEO_F767ZI是好玩,学习了!
此帖出自stm32/stm8论坛
 
 

回复

1462

帖子

1

TA的资源

五彩晶圆(初级)

4
 
huihuihaha 发表于 2016-11-15 09:40
万年历怎么实时的更新,有误差没

NUCLEO_F767ZI内部自带RTC,在不断电情况下自动运行更新时间,误差肯定会有,但非常小而已。
此帖出自stm32/stm8论坛
 
 
 

回复

1702

帖子

4

TA的资源

纯净的硅(初级)

5
 
huihuihaha 发表于 2016-11-15 09:40
万年历怎么实时的更新,有误差没

转个电磁
此帖出自stm32/stm8论坛
 
 
 

回复

190

帖子

1

TA的资源

一粒金砂(中级)

6
 
电磁是?
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表