[其他ST产品] 【原创】ST评测+基于STM32G431的RTC电子时钟

[复制链接]
962|7
 楼主| jinglixixi 发表于 2020-12-11 11:08 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2020-12-11 12:55 编辑

STM32G431内部配置有RTC计时器,将它与OLED屏配合即可实现一个电子时钟。

实现图1所示效果的主程序为:
  1. int main(void)
  2. {
  3. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  4. HAL_Init();
  5. /* Configure the system clock */
  6. SystemClock_Config();
  7. GPIO_OLED_INIT();
  8. OLED_Init();
  9. OLED_Clear();
  10. OLED_ShowString(18,0,"STM32G431",16);
  11. OLED_ShowString(10,2,"OLED & RTC",16);
  12. /* Initialize all configured peripherals */
  13. MX_RTC_Init();
  14. RTCStatus = 1;
  15. while (1)
  16. {
  17. /* Display the updated Time and Date */
  18. RTC_CalendarShow(aShowTime, aShowDate);
  19. Delay(200);
  20. }
  21. }
1.jpg
                              
1  RTC电子时钟

实现RTC显示的函数为:
  1. static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)
  2. {
  3. RTC_DateTypeDef sdatestructureget;
  4. RTC_TimeTypeDef stimestructureget;
  5. /* Get the RTC current Time */
  6. HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);
  7. /* Get the RTC current Date */
  8. HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
  9. /* Display time Format : hh:mm:ss */
  10. sprintf((char *)showtime, "%2d:%2d:%2d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
  11. OLED_ShowString(26,6,showtime,16);
  12. /* Display date Format : mm-dd-yy */
  13. sprintf((char *)showdate, "%2d-%2d-%2d", 2000 + sdatestructureget.Year,sdatestructureget.Month, sdatestructureget.Date);
  14. OLED_ShowString(10,4,showdate,16);
  15. }

调用的字符串显示函数为:
  1. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
  2. {
  3.     unsigned char j=0;
  4.     while (chr[j]!='\0')
  5.     {       OLED_ShowChar(x,y,chr[j],Char_Size);
  6.             x+=8;
  7.             if(x>120){x=0;y+=2;}
  8.             j++;
  9.     }
  10. }

由于例程所设置的初始时间是2018年,故需要在函数 MX_RTC_Init()中进行修改,修改后的运行效果如图2所示。

2.jpg
2  校时后的显示效果

chenqianqian 发表于 2020-12-11 12:28 来自手机 | 显示全部楼层
不错,感谢楼主分享。
 楼主| jinglixixi 发表于 2020-12-11 12:43 | 显示全部楼层
chenqianqian 发表于 2020-12-11 12:28
不错,感谢楼主分享。

多谢支持!!!
刚看见小妲鸡 发表于 2021-3-21 10:05 | 显示全部楼层

楼主我想问你一个问题    怎么样在LCD里添加文件  我想加一个串口 .c  .h  他就报错  不和f4一样   这让我很是困惑
刚看见小妲鸡 发表于 2021-3-21 10:11 | 显示全部楼层
刚看见小妲** 发表于 2021-3-21 10:05
楼主我想问你一个问题    怎么样在LCD里添加文件  我想加一个串口 .c  .h  他就报错  不和f4一样   这让 ...

学长 留个联系方式吧  vx    17744411514
刚看见小妲鸡 发表于 2021-3-21 10:13 | 显示全部楼层
真心迫切的希望加个好友  让你教我一个这个芯片的使用
 楼主| jinglixixi 发表于 2021-3-21 16:46 | 显示全部楼层
刚看见小妲** 发表于 2021-3-21 10:05
楼主我想问你一个问题    怎么样在LCD里添加文件  我想加一个串口 .c  .h  他就报错  不和f4一样   这让 ...

在main的主文件头部用include引入*.h,再在项目列表中导入*.c即可。实在嫌麻烦的话,直接把使用的*.c中的函数放在 main主文件中以函数调用也可。
 楼主| jinglixixi 发表于 2021-3-21 16:50 | 显示全部楼层
刚看见小妲** 发表于 2021-3-21 10:13
真心迫切的希望加个好友  让你教我一个这个芯片的使用

这个找本C语言的书看看便会,因多个项目在身,就不便用时多谈了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

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