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

STM32CubeMX-实时时钟(RTC)

[复制链接]
STMCU-管管 发布时间:2020-10-19 12:48
STM32CubeMX-实时时钟(RTC)
# O8 W* y8 C+ H

+ \# \- d# u9 \5 Z: tRTC简介- q' i; N6 j6 R6 f: E, ^. V' v0 G
    实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供具有可编程闹钟中断功能的日历时钟 /日历。RTC 还包含具有中断功能的周期性可编程唤醒标志。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。只要芯片的备用电源一直供电,RTC上的时间会一直走。- \0 m, b' D. v' E- I* e- l2 j
新建工程5 u$ f' I" M2 {( C& ?- E% Q
    本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。点击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。RTC选择内部唤醒(Internal WakeUp)开启RTC。开启外部低速晶振,PC14,PC15配置。2 r0 [; \/ x' i+ h- K- ^
11.png ) t& H* M. ^5 @( }0 E# \+ |
    RTC时钟选择为外部低速晶振(LSE),频率为32.768。
. T. f# e2 D0 ~* b# y    在RTC配置中,设置时间和日期,其他为默认设置。此处设置时间为2016/04/16 16:25:49。: p+ t* m; F  v. H4 M6 Y
12.png
7 Z% h: g- T# ]6 l) A, T) @
    生成报告以及代码,编译程序。# ?: u6 G) N6 z; P* S. J  Z; q
添加应用程序
! ?# g" T5 b( W$ o: d    在rtc.c文件中可以看到ADC初始化函数。在stm32f7xx_hal_rtc.h头文件中可以看到rtc时间和日期读写操作函数。
4 \& Z& V5 Y3 u' m; f9 q
13.png 4 s/ Y/ N- a' j+ X7 N
    从操作函数中可以看到,时间和日期是以结构体的形式读写的。所以在main.c文件前面申明两个结构体变量存储读取的时间和日期数据。
+ B* F& [" Z, m: f1 ^2 P; ^, w
3 e# s2 y3 @3 w0 [# v' E8 w

  1. 8 u0 E# X* N& v" R0 M9 s  _8 c
  2. <font size="3">/* USER CODE BEGIN PV */+ i4 g. Y6 i2 W, f
  3. /* Private variables --------*/: Z2 ^8 s4 p# W, ?& Z- [0 |1 [+ P5 H! d
  4. RTC_DateTypeDef sdatestructure;: F) v1 Y# z# X  }- O
  5. RTC_TimeTypeDef stimestructure;
      O8 v/ o: z& a, O+ X
  6. /* USER CODE END PV */</font>
复制代码

2 A8 {' ~8 W' x6 k
& w( @- F: J' `9 \" x7 v在stm32f7xx_hal_rtc.h头文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef这两个结构体的成员变量。7 M2 ~$ w* N& J7 D$ ^9 ?( n
14.png : i0 H$ s9 [- j, x/ X4 s# U
在while循环中添加应用程序,读取当前的时间和日期,并通过串口发送到电脑上显示。
' j& W" G1 S- R- t' \3 `7 y# J

  1. 0 f2 n' f% A7 n9 X0 l) t- r
  2. <font size="3">/* USER CODE BEGIN WHILE */0 g# ]% F' `; U2 [! `5 A
  3. while (1)
    . R% S$ e) [4 a7 E8 O) p$ e' r' {
  4. {
    % p: @8 o' v; F
  5. /* USER CODE END WHILE */7 c. ~: |$ V) C, u
  6. /* USER CODE BEGIN 3 */% Q( c+ w7 o. v8 E( G3 v9 E; w
  7.       /* Get the RTC current Time ,must get time first*/: O: K5 W/ M4 |3 q( _
  8.       HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
    " y/ R5 c/ [* z  d/ Q4 \
  9.       /* Get the RTC current Date */
    ) E! H) Y  w) T2 D$ S) p
  10.       HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);. E5 g* s1 t" V* x6 j
  11.       /* Display date Format : yy/mm/dd */
    . P2 K" ?$ t/ c
  12.       printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);
    ! o5 |* Z2 f& k3 W) a9 V
  13.       /* Display time Format : hh:mm:ss */
    3 o, ]8 f' K5 X  W" I4 W! y/ Q
  14.       printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);- H9 i/ W/ p7 _. y9 a
  15.       printf("\r\n");- P: `& y. j4 m: e4 G9 |
  16.       HAL_Delay(1000);% m, ]# m  V. g! [+ K$ d3 v
  17. }' }7 v6 {5 ~4 ~1 _
  18. /* USER CODE END 3 */</font>
复制代码

( m& N! l% {4 G" E' l2 I; _9 |# l
程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。注意:要先读取时间再读取日期,如果先读取日期在读取时间会导致读取的时间不准确,一直都是原来设置的时间。! Y7 h+ R( t0 j; O9 ?/ [, Y
编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示RTC的时间日期。+ d: l; J, O8 H% ^; f

0 ?+ g+ i. m  b2 d

1 E5 }, P; x1 q" C+ `! i  U
* t# v5 t& r' c3 P/ e9 H7 P
' l& v: E' b: n% U7 e

7 B3 ^( z' @6 O: N. x9 k2 e
& l% B7 j: k: a

8 l) D' j2 I3 l: w
1 \! G# B# c# R. Q" E
. Y  y6 v& ?3 t9 d) t

0 M$ B& z- t1 G% A
( K3 Z& X+ F# a9 C
1 h9 G" d* N7 F( [  O4 h$ I  q

9 T" a& q0 u7 O) c
赞 收藏 评论0 发布时间:2020-10-19 12:48

举报

0个回答

所属标签

相似技术帖

官网相关资源

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