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

STM32H750中RTC简介及使用方法

[复制链接]
STMCU小助手 发布时间:2022-12-12 15:00

STM32H750 的实时时钟是一个独立的 BCD 定时器/计数器,且带了日历功能,它提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。

此外RTC 还有自动唤醒单元,RTC还可以补偿闰年闰月等等,还有备份区域(BKP)写保护,这些这里不细说了。


* m7 y$ i! n! A$ c) a: x# u- u

RTC 的简化框图7 U- _7 M# z/ M8 ^& x

- \6 `' [' a! w 微信图片_20221211151650.png 6 V, Z) E$ a5 h. K# J
  _3 N9 z/ i; y3 ]; x
时钟和分频

STM32H750 的 RTC 时钟源(RTCCLK)通过时钟控制器,可以从 LSE、LSI、HSE 时钟三选一,如图所示,有两个预分频器RTC_PRER

ck_spre 的时钟可由如下计算公式计算:

Fck_spre = Frtcclk/[(PREDIV_S+1)*( PREDIV_A+1)]

图中,ck_apre 也可作为 RTC 亚秒递减计数器(RTC_SSR)的时钟。

Fck_apre的计算公式如下:

Fck_apre=Frtcclk/( PREDIV_A+1)

当 RTC_SSR 寄存器递减到 0 的时候,会使用 PREDIV_S 的值重新装载 PREDIV_S,得到亚秒时间的精度是:1/256 秒,可以得到更加精确的时间数据。


6 y* ?: X3 ?) R' G0 P+ I$ f6 i/ m% [

STM32CubeIDE 配置

默认情况下是如图

9 z2 u. y' a, O2 b

微信图片_20221211151647.png
! ^" K* T0 E+ b; O! E- W6 t5 }/ x5 z4 {9 u

一般情况下使用LSE,这里我们需要在RCC使能

; f9 O: P* b7 B: C7 Y

微信图片_20221211151643.png

( \/ g6 E4 @3 e

* e9 W  I7 m7 r) b然后在RTCC中使能时钟源,如果需要日历闹钟功能的可以在这里也使能上。

2 D: b8 |" ]3 Q$ [
) a  R& A* x  e0 \) H# Q

5 L, l; k. U4 I 微信图片_20221211151640.png
/ c! P! Q$ [, f6 z
/ U0 B. z% ?+ ?8 @2 ?

公式如下:

RTC时钟频率 = RTC时钟源 / ((Asynchronous Predivider value + 1) * (Synchronous Predivider value + 1))= 1Hz,也就是1秒

之后到时钟配置里面可以看到已经使能了

- ]* n: }" }/ E8 u. C3 U, q

微信图片_20221211151636.png
& @) z$ Y: e/ j& ?- m0 @6 U$ N$ u  z+ t* Q

初始化

  1. static void MX_RTC_Init(void)
    " u7 b$ ^7 K* U; Q$ v9 f  D9 S
  2. {
    " g% K" o3 k; v! R( O  Z

  3. 6 O- F4 A4 T  I8 ~4 F; u! f3 R/ F
  4.   /* USER CODE BEGIN RTC_Init 0 */
    % z) c) n% O, y4 @, e- r
  5. 5 n2 q* v: ~7 H
  6.   /* USER CODE END RTC_Init 0 */
    / C1 z. w% X- i* D/ V. ?
  7. / `- r4 V5 F1 b5 {; ]. S
  8.   /* USER CODE BEGIN RTC_Init 1 */
    - @& `2 W, E. i0 E# Q
  9. 9 u+ M/ U* Y) \! B6 X! U) T0 v  Q
  10.   /* USER CODE END RTC_Init 1 */
    * Z) L" Y$ P& V
  11.   /** Initialize RTC Only
    0 S* {: w! P& _5 |+ u9 A7 c) X
  12.   */
    2 y) R+ U( w2 i0 ]7 t/ I# X
  13.   hrtc.Instance = RTC;
    2 Y% {* f- d9 F2 j1 m! F
  14.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;5 ]1 \# ^+ q$ A- J+ h
  15.   hrtc.Init.AsynchPrediv = 127;
    7 s8 f4 F! a  B
  16.   hrtc.Init.SynchPrediv = 255;
    2 O( G( y% m9 x
  17.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
    : T  M( d3 ?! U
  18.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
    ' |1 u5 S3 e- u
  19.   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
    2 @5 z4 I! y/ j8 K# B
  20.   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
    % ]5 j2 G+ W2 A' f' j) _- g8 G
  21.   if (HAL_RTC_Init(&hrtc) != HAL_OK)2 {& ]! D+ m8 T2 H9 E. d7 z; J
  22.   {
    # o& T4 y% f8 Q- y' W9 j" A$ k
  23.     Error_Handler();3 W" x/ \6 N8 N" Y
  24.   }9 m" }; I- K) O- l: K
  25.   /* USER CODE BEGIN RTC_Init 2 */: g) d1 F9 Z& ^6 e& ]* s( S
  26. # O* A% t6 u+ C9 M5 E8 P5 N  [
  27.   /* USER CODE END RTC_Init 2 *// d, c: _. B7 _, c7 _# z& R
  28. ( G3 }4 W) D7 Z" ~0 }. ^
  29. }
复制代码

2 u' g! V4 u9 @8 Y) a6 v4 W2 f2 R
, y+ g; |- @1 C8 D! f# K

可以看到outline里面有很多我们需要的函数,那么自己扩展就可以使用了


5 B  R1 z) h2 K$ C3 ~7 d, Y

微信图片_20221211151530.png 2 Q) G+ O  I, m6 a8 L& R
3 y3 g5 j, |& j

This function configures the hardware resources used in this example

  1. void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)
    $ e* C. k3 U! w* q; B8 H
  2. {/ Z6 H/ a3 y; t  n. `# M
  3.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};5 G' E  P9 G( d
  4.   if(hrtc->Instance==RTC)
    # B, x& A* a. M5 {+ f
  5.   {* u+ o; ?5 b9 z4 V5 b8 `
  6.   /* USER CODE BEGIN RTC_MspInit 0 */
    # b; B$ y& j6 I8 y

  7.   l, @+ c1 D4 c  L' w4 S3 N! `5 f
  8.   /* USER CODE END RTC_MspInit 0 */, J8 @+ J2 I' b/ d& s& `9 e
  9.   /** Initializes the peripherals clock
    6 R$ d' @- R; H- u( ^2 c# ?
  10.   */
    - P& C' s1 p: }
  11.     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;, r6 B( d# h1 q% }8 _# ]( C
  12.     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;- _* c" M6 s) o. k! g3 t! T
  13.     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)/ l7 _+ a! Z$ A; v3 @- X
  14.     {
    % i) i' s9 l) ~2 C
  15.       Error_Handler();( m. T# `# |- D& Y9 [: ^* [
  16.     }
    ' ^0 _) L* l7 i

  17. 0 H2 M( e& ]+ y6 A1 k5 E+ v( w) I' R
  18.     /* Peripheral clock enable */
    ; b0 P. x" }0 \
  19.     __HAL_RCC_RTC_ENABLE();
    1 F; W" [: e) B) h) @  b5 L
  20.   /* USER CODE BEGIN RTC_MspInit 1 */
    * }  Y2 C  ]2 a# v' O3 G

  21. . B1 T" K4 S" G+ Q
  22.   /* USER CODE END RTC_MspInit 1 */" r! _- j* E- O7 `! P- s, B
  23.   }
    $ o( k5 b$ R% B3 R

  24. ! V! q8 b# Y0 y. e- P% u# h* I
  25. }
复制代码
最后,可以按需定制自己的实现方式,RTC是特别实用的一个模块了。
& Z7 E: u% N1 U' G& R, }2 ]8 c8 D/ \) [/ K" t

8 m: v  T' A0 S+ v* G  j, L% x

9 |1 v* [& M: x3 G* [' j, b作者:李肖遥8 T  k0 h! ]! ^' I8 W- X
赞 收藏 评论0 发布时间:2022-12-12 15:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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