请选择 进入手机版 | 继续访问电脑版

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

STM32CubeMX-实时时钟(RTC)

[复制链接]
STMCU-管管 发布时间:2020-10-19 12:48
STM32CubeMX-实时时钟(RTC)
3 ]) i. g# ^+ S7 Q6 R

! a; F; }" z! ]6 Y4 q' LRTC简介  @. L( [6 R  ^( n5 B4 u
    实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供具有可编程闹钟中断功能的日历时钟 /日历。RTC 还包含具有中断功能的周期性可编程唤醒标志。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。只要芯片的备用电源一直供电,RTC上的时间会一直走。
5 \+ @8 W9 H- w9 `: l新建工程4 O, o: |  s3 e7 L2 y  \
    本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。点击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。RTC选择内部唤醒(Internal WakeUp)开启RTC。开启外部低速晶振,PC14,PC15配置。8 k2 h  j5 R- g4 j) C: U! i
11.png ( ~+ X. y! s& I$ ?4 E% b" j4 m
    RTC时钟选择为外部低速晶振(LSE),频率为32.768。
* Y9 G1 Q7 P6 L* _7 U3 r% P, T    在RTC配置中,设置时间和日期,其他为默认设置。此处设置时间为2016/04/16 16:25:49。
% _" t$ S8 j7 d$ y6 z4 k
12.png
- P* T5 H8 S( w' h- Z+ l; C
    生成报告以及代码,编译程序。2 l% J$ C* W1 ~! y* t/ E
添加应用程序+ I2 f$ U! @8 h: ^
    在rtc.c文件中可以看到ADC初始化函数。在stm32f7xx_hal_rtc.h头文件中可以看到rtc时间和日期读写操作函数。; z* I# x# q& }' e- t0 v: d
13.png
& m/ T0 w$ B& c7 b; O
    从操作函数中可以看到,时间和日期是以结构体的形式读写的。所以在main.c文件前面申明两个结构体变量存储读取的时间和日期数据。
. M4 N  M* J2 S: f% {/ w/ x3 v* }6 Y6 E
  1. / t7 _; ^! r$ l( ~
  2. <font size="3">/* USER CODE BEGIN PV */* a2 X  B" H  m( \, X2 C5 Y
  3. /* Private variables --------*/: u9 u# f3 P! ?0 W* [
  4. RTC_DateTypeDef sdatestructure;" o( b8 c0 L) w+ p3 {
  5. RTC_TimeTypeDef stimestructure;( ^8 r% Y9 }* x: ~3 i+ w5 `! w6 [7 f
  6. /* USER CODE END PV */</font>
复制代码

* T* y1 N& ]9 C  x( B, r3 r: e$ |6 T# u. P, G% n. ^9 M5 L
在stm32f7xx_hal_rtc.h头文件中,可以找到RTC_TimeTypeDef,RTC_DateTypeDef这两个结构体的成员变量。
+ b" r2 r; [8 N1 ^. a
14.png
( I& B& n# S3 S
在while循环中添加应用程序,读取当前的时间和日期,并通过串口发送到电脑上显示。1 `' l* P$ D( {8 L  p/ U9 I

  1. 2 v0 F8 F& H  H& {* L7 q0 E4 Y( T
  2. <font size="3">/* USER CODE BEGIN WHILE */
    - C  q% `3 k8 U# ~0 ^% y# b
  3. while (1)
    % W" _7 I  [, A! G$ H! A
  4. {  `5 r3 \* q6 G" L/ m" F
  5. /* USER CODE END WHILE */+ M0 ?6 E7 b8 X! K# c. _
  6. /* USER CODE BEGIN 3 */( a# I' ]6 s: v
  7.       /* Get the RTC current Time ,must get time first*/9 P+ n, p9 f! ^. e( [7 q  H7 Z
  8.       HAL_RTC_GetTime(&hrtc, &stimestructure, RTC_FORMAT_BIN);
    ' u+ [5 R: s$ h0 m/ O
  9.       /* Get the RTC current Date */: ~- Z' k3 L6 W" [
  10.       HAL_RTC_GetDate(&hrtc, &sdatestructure, RTC_FORMAT_BIN);
    - l8 p& p  I( q& ?
  11.       /* Display date Format : yy/mm/dd */
    ) j) o7 ]( X2 H+ z8 t( K
  12.       printf("%02d/%02d/%02d\r\n",2000 + sdatestructure.Year, sdatestructure.Month, sdatestructure.Date);# [% x9 d( T# ]
  13.       /* Display time Format : hh:mm:ss */
    4 }0 E4 ?, s! ^5 _2 A' T4 \6 V
  14.       printf("%02d:%02d:%02d\r\n",stimestructure.Hours, stimestructure.Minutes, stimestructure.Seconds);. _" Z9 a$ G2 Z5 B2 i- ?
  15.       printf("\r\n");, \9 ?1 {, J5 k+ `
  16.       HAL_Delay(1000);
    3 k9 m% p3 a9 @4 V& e
  17. }( b4 h" ~* X2 N! v, F: c  B
  18. /* USER CODE END 3 */</font>
复制代码
3 x$ y+ a% D2 x* t
! z- C: P- V3 B! a: J
程序中使用HAL_RTC_GetTime(),HAL_RTC_GetDate()读取时间和日期,并保存到结构体变量中,然后通过串口输出读取的时间和日期。注意:要先读取时间再读取日期,如果先读取日期在读取时间会导致读取的时间不准确,一直都是原来设置的时间。0 D) r# ?# ]- \" y. y9 M/ h
编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示RTC的时间日期。
! J0 |; a# S+ E) I& M
" D6 f9 A5 T. m

8 P. w2 S4 [5 @% G
& _& L. K. r( {* m: G4 l0 p

% M1 E% c. O5 B% p5 q: b) U$ q+ l; G- Q! X  h0 v" [8 x; Q

. i3 s0 k  B  L' H
: {0 B8 o* \/ T0 T% a+ y) j

2 I' z! v9 G1 f3 T& h
: u" m. \* m" v$ Z# Y0 d# n. Y
0 F% O/ a9 g& @
  S. m0 I! z, @8 O7 T/ l: n

( }3 c( C& Z% c! R$ y
8 n4 k4 q. q* [( R& {# j- D
收藏 评论0 发布时间:2020-10-19 12:48

举报

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