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

STM32CubeMX-实时时钟(RTC)

[复制链接]
STMCU-管管 发布时间:2020-10-19 12:48
STM32CubeMX-实时时钟(RTC)

4 e( x( l* L" F( }$ f, P; t9 c

; ?5 u: [" z9 ?' }, IRTC简介( ^% {% X! f3 f- q2 N
    实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供具有可编程闹钟中断功能的日历时钟 /日历。RTC 还包含具有中断功能的周期性可编程唤醒标志。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。只要芯片的备用电源一直供电,RTC上的时间会一直走。/ L2 ^# A* D: K+ ]) @+ ]' ^
新建工程& u% P# E8 o0 |& B  o
    本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。点击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。RTC选择内部唤醒(Internal WakeUp)开启RTC。开启外部低速晶振,PC14,PC15配置。( O4 g1 o/ L2 T- W2 Q
11.png / `& B" `" o" f, ?7 m' x
    RTC时钟选择为外部低速晶振(LSE),频率为32.768。
! q' P) U" s  h; k( _2 C' h# w; ~    在RTC配置中,设置时间和日期,其他为默认设置。此处设置时间为2016/04/16 16:25:49。
5 P; w, D- ]8 K/ i1 d
12.png 2 Y/ t3 T( F2 |! {( }, W
    生成报告以及代码,编译程序。
3 C$ w, S) j2 Q! K6 a添加应用程序
; G% m7 O; O, n" r1 y) G  N- h    在rtc.c文件中可以看到ADC初始化函数。在stm32f7xx_hal_rtc.h头文件中可以看到rtc时间和日期读写操作函数。
5 i) O. d" a" w
13.png , {) l: H1 w9 b  h2 m
    从操作函数中可以看到,时间和日期是以结构体的形式读写的。所以在main.c文件前面申明两个结构体变量存储读取的时间和日期数据。* u) k0 y* A% I" |
4 P  z, P3 X4 P9 A
  1. 2 |9 x: h, z$ O/ e2 P
  2. <font size="3">/* USER CODE BEGIN PV */
    + u# m6 a/ r) j$ R' S& ]
  3. /* Private variables --------*/
    6 ^  ]" ~4 B: |( ^" N
  4. RTC_DateTypeDef sdatestructure;
    * C; Z* J3 K; \% a2 h, F
  5. RTC_TimeTypeDef stimestructure;
    1 T- G# m- \; j0 k7 \
  6. /* USER CODE END PV */</font>
复制代码
3 s; A5 t5 b0 G: k6 I

# i- J7 {  ~! U! [8 X5 k在stm32f7xx_hal_rtc.h头文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef这两个结构体的成员变量。5 k$ l  N! @! d; N6 _$ q0 f! J/ k
14.png . t1 p7 S# [) E/ P6 F& r# Z5 O2 g
在while循环中添加应用程序,读取当前的时间和日期,并通过串口发送到电脑上显示。
$ N- @2 Z+ p, Q3 Q
  1. " E2 T' @; n* f% q, o
  2. <font size="3">/* USER CODE BEGIN WHILE */
    . e; J0 D6 a6 o( k
  3. while (1)
    . \4 }% _, `- E/ ]$ h
  4. {
    7 G: e# H: g, D$ L& e$ |
  5. /* USER CODE END WHILE */
    9 r: H" {: I3 p1 d4 O2 w
  6. /* USER CODE BEGIN 3 *// \1 v- P" Y$ [0 W: l
  7.       /* Get the RTC current Time ,must get time first*/8 K. C* n( I, o. Z0 l* i
  8.       HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
    , w. q; m% [  c% y5 I
  9.       /* Get the RTC current Date */& r! K7 s" c1 M! i0 r
  10.       HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);, _& H3 `3 h+ J+ j7 x4 T6 o" M
  11.       /* Display date Format : yy/mm/dd */: e  {' e  w; u$ `1 |$ B; i5 H
  12.       printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);; W9 l6 M! j6 w; R5 s5 M* }2 m
  13.       /* Display time Format : hh:mm:ss */: I& n0 R( y* G
  14.       printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);: P8 p/ J* D  y1 e3 ]4 \
  15.       printf("\r\n");2 t6 \1 {; U( o% [' ?/ g
  16.       HAL_Delay(1000);
    7 U  r+ b/ F4 P! ?$ _- s
  17. }& |! a; T/ Z- a1 a# s8 P6 o
  18. /* USER CODE END 3 */</font>
复制代码
( H# I8 n# T6 Y  u% J1 f/ ^* S5 y2 Z
7 Z1 Z6 I& C. G6 }9 \7 o' q
程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。注意:要先读取时间再读取日期,如果先读取日期在读取时间会导致读取的时间不准确,一直都是原来设置的时间。# v& K+ Q. i; F0 S4 U1 H7 F
编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示RTC的时间日期。
* U6 n( l1 Y, J$ b5 X4 ^3 @0 X' F" W& o3 h$ c7 ~( A# v3 G. g
- F2 F# y0 |0 }7 q. g( L" T, {

% s5 z# q/ s8 X, U

5 c, d  H6 @. X- I
3 j+ S% i. f  c* M5 P$ d

  |) a# |/ J0 x+ f
( v6 ^7 k) ~' L$ z8 R
+ p8 |' Z# |& e# [/ }% s
! r. y" w6 z; e. c7 `# _

/ c9 B3 \( K- c7 P
; @* ?  Y5 z1 g$ i- r9 G8 h
3 b  O/ v6 s! L# ]* w2 A( t2 Y

+ T- I+ g, x/ O
收藏 评论0 发布时间:2020-10-19 12:48

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版