你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32CubeMX-实时时钟(RTC)

[复制链接]
STMCU小助手 发布时间:2022-6-21 18:02
RTC简介
    实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供具有可编程闹钟中断功能的日历时钟 /日历。RTC 还包含具有中断功能的周期性可编程唤醒标志。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。只要芯片的备用电源一直供电,RTC上的时间会一直走。
新建工程
    本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。点击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。RTC选择内部唤醒(Internal WakeUp)开启RTC。开启外部低速晶振,PC14,PC15配置。
5.png
    RTC时钟选择为外部低速晶振(LSE),频率为32.768。
    在RTC配置中,设置时间和日期,其他为默认设置。此处设置时间为2016/04/16 16:25:49。
4.png
    生成报告以及代码,编译程序。
添加应用程序
    在rtc.c文件中可以看到ADC初始化函数。在stm32f7xx_hal_rtc.h头文件中可以看到rtc时间和日期读写操作函数。) q7 q+ Y' c4 H
3.png
    从操作函数中可以看到,时间和日期是以结构体的形式读写的。所以在main.c文件前面申明两个结构体变量存储读取的时间和日期数据。
  1. /* USER CODE BEGIN PV */9 l4 t; w4 i) H" j
  2. /* Private variables --------*/, O* `/ m8 q' n
  3. RTC_DateTypeDef sdatestructure;0 M$ l, j4 l( S, F
  4. RTC_TimeTypeDef stimestructure;6 `# |3 O7 ~+ G, e/ E% D7 l
  5. /* USER CODE END PV */
复制代码
$ L# j0 B+ Q1 x

2 C( p3 j1 Q5 v, O- L# P2 w. ~
    在stm32f7xx_hal_rtc.h头文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef这两个结构体的成员变量。3 m0 }. h  a) d
2.png
    在while循环中添加应用程序,读取当前的时间和日期,并通过串口发送到电脑上显示。
  1. /* USER CODE BEGIN WHILE */
    9 P8 P% X) c: Z% ^3 W6 |: @2 o8 i
  2. while (1)
    ; {& W* q$ T) E9 j3 K" d" x
  3. {! p. g, r/ I9 k! a; N% ~
  4. /* USER CODE END WHILE */1 _- M! v9 d  W5 U: E+ l
  5. /* USER CODE BEGIN 3 */8 s* w- v9 d- h6 Y' M, A: J
  6.       /* Get the RTC current Time ,must get time first*/
    " }1 {# z# U7 A" m: b0 y
  7.       HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
    # u4 M4 Z( r3 b/ _& t% I" u( |
  8.       /* Get the RTC current Date */; M9 i" ~+ a) n4 M; v1 f+ w
  9.       HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);
    " T! |3 U( L' k# i. H
  10.       /* Display date Format : yy/mm/dd */
    ! j  k. z6 h  F+ N7 a3 _
  11.       printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);  v6 c9 L* Y$ z6 H, B$ L: \* @0 S. i. O0 Y
  12.       /* Display time Format : hh:mm:ss */
    5 r( p, C; t# j
  13.       printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);: `4 h; a5 |0 V% z- }; w" f0 B
  14.       printf("\r\n");. j( N8 \( k4 \5 `" M, D
  15.       HAL_Delay(1000);/ S5 M- V# k2 i' O- C' H
  16. }
    ; g2 J( U- R$ B0 I% ?
  17. /* USER CODE END 3 */
复制代码
4 l4 ^/ C* x0 p7 f
    程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。注意:要先读取时间再读取日期,如果先读取日期在读取时间会导致读取的时间不准确,一直都是原来设置的时间。
3 |, R: R$ o6 x% h1 q: o) G6 J1 ]* y' m

. f8 Q1 j2 w& ~; S! t1 y
实验效果
    编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示RTC的时间日期。
1.png

6 h0 T' Z. ~. K5 s
赞 收藏 评论0 发布时间:2022-6-21 18:02

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版