野火科技
直播中

RA_kjnsc

2年用户 22经验值
擅长:嵌入式技术 接口/总线/驱动 控制/MCU RF/无线
私信 关注

【野火启明6M5开发板体验】(OLED)SCI IIC & RTC

(OLED)SCI IIC & RTC

本帖最后由 RA_kjnsc 于 2023-1-5 15:24 编辑

RTC配置:点击Stacks->New Stack->timers->Realtime Clock(r_rtc)。
屏幕截图 2023-01-05 094153.png
1672883035038.jpg

IIC配置:点击Stacks->New Stack->Connectivity->I2C Master (r_sci_i2c)。
屏幕截图 2023-01-05 094737.png
屏幕截图 2023-01-05 112209.png

显示汉字需要先进行取模,生成字模前先进行设置。
屏幕截图 2023-01-05 105210.png
将取得的编码放入oledfont.h的Hzk数组中。
1672887157219.png

  1. #include "hal_data.h"
  2. #include "oled.h"
  3. FSP_CPP_HEADER
  4. void R_BSP_WARMStart(bsp_warm_start_event_t event);
  5. FSP_CPP_FOOTER

  6. uint8_t rtc_second= 56;         //秒
  7. uint8_t rtc_minute =34;         //分
  8. uint8_t rtc_hour =12;           //时
  9. uint8_t rtc_day =2;             //日
  10. uint8_t rtc_month =1;           //月
  11. uint16_t rtc_year =123;         //年
  12. rtc_time_t get_time;

  13. i2c_master_event_t i2c_event = I2C_MASTER_EVENT_ABORTED;
  14. void sci_i2c_master_callback(i2c_master_callback_args_t *p_args)
  15. {
  16.     i2c_event = I2C_MASTER_EVENT_ABORTED;
  17.     if (NULL != p_args)
  18.     {
  19.         /* capture callback event for validating the i2c transfer event*/
  20.         i2c_event = p_args->event;
  21.     }
  22. }

  23. fsp_err_t err = FSP_SUCCESS;
  24. int  timeout_ms = 100;

  25. /* rtc_time_t is an alias for the C Standard time.h struct 'tm' */
  26. rtc_time_t set_time =
  27. {
  28.     .tm_sec  = 56,      /* 秒,范围从 0 到 59 */
  29.     .tm_min  = 34,      /* 分,范围从 0 到 59 */
  30.     .tm_hour = 12,      /* 小时,范围从 0 到 23*/
  31.     .tm_mday = 2,      /* 一月中的第几天,范围从 1 到 31*/
  32.     .tm_mon  = 1,      /* 月份,范围从 0 到 11*/
  33.     .tm_year = 123,     /* 自 1900 起的年数,2021为121*/

  34. };

  35. volatile bool rtc_flag = 0;//RTC延时1s标志位

  36. void rtc_callback(rtc_callback_args_t *p_args)
  37. {
  38.     /* TODO: add your own code here */
  39.     if(p_args->event == RTC_EVENT_PERIODIC_IRQ)
  40.         rtc_flag=1;
  41. }

  42. void hal_entry(void)
  43. {
  44.     /* TODO: add your own code here */
  45.        err = R_RTC_Open(&g_rtc0_ctrl, &g_rtc0_cfg);
  46.        assert(FSP_SUCCESS == err);
  47.        R_RTC_CalendarTimeSet(&g_rtc0_ctrl, &set_time);
  48.        R_RTC_PeriodicIrqRateSet(&g_rtc0_ctrl, RTC_PERIODIC_IRQ_SELECT_1_SECOND);

  49.         /* IIC初始化*/
  50.         err = R_SCI_I2C_Open(&g_i2c0_ctrl, &g_i2c0_cfg);

  51.         assert(FSP_SUCCESS == err);
  52.         WriteCmd();//OLED初始化
  53.         OLED_Clear();//清屏

  54.         OLED_ShowCHinese(0,1,3);    //野
  55.         OLED_ShowCHinese(16,1,4);   //火
  56.         OLED_ShowString(36,1,"&",16);
  57.         OLED_ShowCHinese(48,1,5);   //电
  58.         OLED_ShowCHinese(64,1,6);   //子
  59.         OLED_ShowCHinese(80,1,7);   //发
  60.         OLED_ShowCHinese(96,1,8);   //烧
  61.         OLED_ShowCHinese(112,1,9);  //友
  62.         OLED_ShowCHinese(40,5,0);   //年
  63.         OLED_ShowCHinese(72,5,1);   //月
  64.         OLED_ShowCHinese(104,5,2);  //日
  65.         OLED_ShowString(32,3,"12:34:56",16);

  66.         while(1)
  67.             {
  68.                 if(rtc_flag)
  69.                 {
  70.                     R_RTC_CalendarTimeGet(&g_rtc0_ctrl, &get_time);//获取RTC计数时间
  71.                     rtc_flag=0;
  72.                     rtc_second=get_time.tm_sec;             //获取秒
  73.                     rtc_minute=get_time.tm_min;             //获取分
  74.                     rtc_hour=get_time.tm_hour;              //获取时
  75.                     rtc_day=get_time.tm_mday;               //获取日
  76.                     rtc_month=get_time.tm_mon;              //获取月
  77.                     rtc_year=get_time.tm_year;              //获取年
  78.                 }
  79.                     OLED_ShowNum(8,5,rtc_year+1900,4,16);   //显示年
  80.                     OLED_ShowNum(56,5,rtc_month,2,16);      //显示月
  81.                     OLED_ShowNum(88,5,rtc_day,2,16);        //显示日
  82.                     OLED_ShowNum(32,3,rtc_hour,2,16);       //显示时
  83.                     OLED_ShowNum(56,3,rtc_minute,2,16);     //显示分
  84.                     OLED_ShowNum(80,3,rtc_second,2,16);     //显示秒

  85.             }

  86. #if BSP_TZ_SECURE_BUILD
  87.     /* Enter non-secure code */
  88.     R_BSP_NonSecureEnter();
  89. #endif
  90. }

  91. /*******************************************************************************************************************//**
  92. * This function is called at various points during the startup process.  This implementation uses the event that is
  93. * called right before main() to set up the pins.
  94. *
  95. * @param[in]  event    Where at in the start up process the code is currently at
  96. **********************************************************************************************************************/
  97. void R_BSP_WarmStart(bsp_warm_start_event_t event)
  98. {
  99.     if (BSP_WARM_START_RESET == event)
  100.     {
  101. #if BSP_FEATURE_FLASH_LP_VERSION != 0

  102.         /* Enable reading from data flash. */
  103.         R_FACI_LP->DFLCTL = 1U;

  104.         /* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and
  105.          * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */
  106. #endif
  107.     }

  108.     if (BSP_WARM_START_POST_C == event)
  109.     {
  110.         /* C runtime environment and system clocks are setup. */

  111.         /* Configure pins. */
  112.         R_IOPORT_Open (&g_ioport_ctrl, g_ioport.p_cfg);
  113.     }
  114. }

  115. #if BSP_TZ_SECURE_BUILD

  116. BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ();

  117. /* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */
  118. BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ()
  119. {

  120. }
  121. #endif


RA6M5OLEDRTC.zip (3.39 MB)
(下载次数: 1, 2023-1-5 11:16 上传)


更多回帖

发帖
×
20
完善资料,
赚取积分