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

STM32CubeMX-实时时钟(RTC)

[复制链接]
STMCU-管管 发布时间:2020-10-19 12:48
STM32CubeMX-实时时钟(RTC)
; C. k4 @3 R2 G# }
- `. q) O, w$ f4 h0 L6 o
RTC简介) `& ]; K' w1 m# }
    实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供具有可编程闹钟中断功能的日历时钟 /日历。RTC 还包含具有中断功能的周期性可编程唤醒标志。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。只要芯片的备用电源一直供电,RTC上的时间会一直走。4 B, i/ F, X; \: b5 y  g1 R9 Q
新建工程
- n5 x2 w  [! j- \) v8 \    本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。点击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。RTC选择内部唤醒(Internal WakeUp)开启RTC。开启外部低速晶振,PC14,PC15配置。
$ G2 Y9 _5 ^/ F* W$ u$ F
11.png 5 Q+ L' p7 q5 ^
    RTC时钟选择为外部低速晶振(LSE),频率为32.768。
9 n1 K6 |  U4 a    在RTC配置中,设置时间和日期,其他为默认设置。此处设置时间为2016/04/16 16:25:49。8 L' _9 P2 G! ]& ^3 I9 B: w
12.png
- ~' _! E3 l- E5 T# T
    生成报告以及代码,编译程序。
9 O7 ~/ W! h* C' v$ ]. Y添加应用程序
2 q5 U+ d0 C. ?' r) y    在rtc.c文件中可以看到ADC初始化函数。在stm32f7xx_hal_rtc.h头文件中可以看到rtc时间和日期读写操作函数。# \) N9 j7 K% A) J( k/ f
13.png : N  s3 v0 a; s
    从操作函数中可以看到,时间和日期是以结构体的形式读写的。所以在main.c文件前面申明两个结构体变量存储读取的时间和日期数据。" O2 w5 T3 E& J, b# R) m) {

) m+ r  F6 q. K4 v9 @
  1. 3 D" f1 I% u. }, e7 a2 A, q$ o% ^
  2. <font size="3">/* USER CODE BEGIN PV */
    / d6 Q; `5 G" R5 a: _; a( H/ V
  3. /* Private variables --------*/
    : l3 w  s5 n" X
  4. RTC_DateTypeDef sdatestructure;
    ' C3 w* ^: k" t( U4 V0 U6 f
  5. RTC_TimeTypeDef stimestructure;6 m+ e4 y' C* m* ^3 K( Y( @% D
  6. /* USER CODE END PV */</font>
复制代码

" q6 `9 j  C  _6 m% p( G( g
0 q1 [7 p; S" l4 w4 _: f2 z. N在stm32f7xx_hal_rtc.h头文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef这两个结构体的成员变量。
0 {' u3 P3 ]. }* ?% G& r, r
14.png
0 q  I+ u  |; {* a1 P
在while循环中添加应用程序,读取当前的时间和日期,并通过串口发送到电脑上显示。- `  S1 U; y( d! \2 \( r
  1. : D5 m2 p! @. S9 W: N# w4 V  h" Z
  2. <font size="3">/* USER CODE BEGIN WHILE */
    : `6 {. ^& u, c1 H0 c* v8 ^0 P
  3. while (1)
    * j' i* X, O2 e9 W% [
  4. {
    6 O+ t. ^- l( [% ]3 W
  5. /* USER CODE END WHILE */
    5 W# W8 ~0 t$ a- j6 m
  6. /* USER CODE BEGIN 3 */
    ! s" Z7 D  V: h. Y& v5 ~
  7.       /* Get the RTC current Time ,must get time first*/
    4 D+ M; R& o$ P2 \3 t
  8.       HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);, v+ t0 E/ F6 M( m
  9.       /* Get the RTC current Date */  a3 e' |( z% E* [  T+ {
  10.       HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);
    ! d4 b2 S7 O5 l2 I$ o  N
  11.       /* Display date Format : yy/mm/dd */
    * \5 e8 P9 \) E; L
  12.       printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);
    6 d8 d1 Q7 ~5 T1 k9 u
  13.       /* Display time Format : hh:mm:ss */
      l3 C8 ?: p7 |* ~! `1 Y
  14.       printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);$ K: \, v1 x1 s
  15.       printf("\r\n");
    : v3 Z. c: X1 u( v3 s; n8 [# N# T
  16.       HAL_Delay(1000);! `! P# k# f) f0 ~
  17. }
    % W$ [0 }/ A! E
  18. /* USER CODE END 3 */</font>
复制代码

, z) k  S# M4 l4 |1 \9 k
% X8 O4 R" C% C6 m, Q- B" D程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。注意:要先读取时间再读取日期,如果先读取日期在读取时间会导致读取的时间不准确,一直都是原来设置的时间。; ]  O- w3 u. ~# Q
编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示RTC的时间日期。" w4 @0 ]) G" a, l, Q( ~
# b7 J' F) \( n1 F! E- p
9 C! f2 ]0 R$ R
% J! ?, N, A+ }4 L; x; b

8 q0 X/ a0 Q% Y5 R: R0 T- d- @. D( `# M- r/ P! \; }4 Q

4 z) w, G* a" N, o
3 n0 v! O& Q# ?$ L' W6 r# _

3 O' ^* A2 y. [( v8 X9 P9 s* k$ d$ B; J

! v4 H( c* `3 |+ D' l, h& L6 d# b: h8 V- Z' q/ k
( `+ j2 O) n; n
- i, r4 D% K  A, I+ z: v
收藏 评论0 发布时间:2020-10-19 12:48

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版