[国产单片机] 【东软载波ES32F369x+真RTC】

[复制链接]
 楼主| freeelectron 发表于 2021-1-23 20:41 | 显示全部楼层 |阅读模式
依稀记得stm32f10x系列的rtc需要自己把秒转换成年、月、日、时、分、秒,今天我们来试试es32f369的rtc,用起来很简单,配置好参数后,直接输出时间和日期,还可以根据自己的喜好设置12小时制还是24小时制。

在上节【东软载波ES32F369x+驱动0.96OLED】的基础上进行扩展,实时显示RTC。


核心代码
  1. #include "periph_rtc.h"
  2. #include "md_bkpc.h"
  3. #include "md_rtc.h"
  4.        
  5. md_rtc_time_t time;
  6. md_rtc_date_t date;

  7. void RTC_Init()
  8. {
  9.         md_rtc_init_t init;

  10.         /* Set LOSM as RTC clock */
  11. //        md_bkpc_rtc_clock_config(MD_BKPC_PREH_CLK_LOSM);

  12.         /* Initialize RTC */
  13.         md_rtc_struct_init(&init);
  14.         md_rtc_init(&init);
  15.        
  16.         /* Initialize time/date */
  17.         md_rtc_time_struct_init(&time);
  18.         md_rtc_date_struct_init(&date);
  19.        
  20.         date.year=21;
  21.         date.month=1;
  22.         date.day=23;
  23.         date.week=6;
  24.        
  25.         time.hour=19;
  26.         time.minute=11;
  27.         time.second=30;
  28.         time.sub_sec=10;
  29.        
  30.         md_rtc_set_time(&time, MD_RTC_FORMAT_DEC);
  31.         md_rtc_set_date(&date, MD_RTC_FORMAT_DEC);

  32. }
  33. /*
  34.         uint8_t hour;               
  35.         uint8_t minute;               
  36.         uint8_t second;               
  37.         uint16_t sub_sec;       

  38.         uint8_t week;       
  39.         uint8_t day;       
  40.         uint8_t month;       
  41.         uint8_t year;       
  42. */
  43. void Get_Rtc(uint8_t *buff)
  44. {
  45.                 md_rtc_get_time(&time, MD_RTC_FORMAT_DEC);
  46.                 md_rtc_get_date(&date, MD_RTC_FORMAT_DEC);
  47.        
  48.         buff[0]=date.year;
  49.         buff[1]=date.month;
  50.         buff[2]=date.day;
  51.         buff[3]=date.week;
  52.        
  53.         buff[4]=time.hour;
  54.         buff[5]=time.minute;
  55.         buff[6]=time.second;
  56. }
复制代码


循环获取时间和日期:
  1. while (1)
  2.         {
  3.                 md_delay_1ms(400);
  4.                
  5.                 md_gpio_set_pin_low(GPIOF, MD_GPIO_PIN_0);
  6.                 md_gpio_set_pin_low(GPIOF, MD_GPIO_PIN_1);
  7.                        
  8.                 md_delay_1ms(400);

  9.                 md_gpio_set_pin_high(GPIOF, MD_GPIO_PIN_0);
  10.                 md_gpio_set_pin_high(GPIOF, MD_GPIO_PIN_1);

  11.     Get_Rtc(buff);
  12.                
  13.                 OLED_ShowCN(40,1,4);
  14.     OLED_ShowCN(56,1,5);
  15.     OLED_ShowCN(72,1,buff[3]+5);
  16.                
  17.           memset(str,' ',sizeof(str));
  18.                 sprintf(str,"20%02d-%02d-%02d",buff[0],buff[1],buff[2]);
  19.           OLED_ShowString(24,3,str,16);
  20.                
  21.                 memset(str,' ',sizeof(str));
  22.                 sprintf(str,"%02d:%02d:%02d",buff[4],buff[5],buff[6]);
  23.                
  24.                 OLED_ShowString(32,5,str,16);

  25.         }
复制代码


发现论坛传不了视频。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
caizhiwei 发表于 2021-1-25 17:00 | 显示全部楼层
l楼主V5
 楼主| freeelectron 发表于 2021-1-27 09:58 | 显示全部楼层
Kelan 发表于 2021-1-27 11:06 | 显示全部楼层
RTC 精度如何? 每天最多误差多少时间呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:stm32/LoRa物联网:304350312

65

主题

785

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部