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

STM32H750中RTC简介及使用方法

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

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

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


, L& D5 ]7 i9 K! ~

RTC 的简化框图
) h" t7 J/ U+ U7 m
4 S" R% s! O; N
微信图片_20221211151650.png 6 i, M$ u) E" B' _7 }

6 H' h+ [0 `7 ?: W1 `时钟和分频

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 秒,可以得到更加精确的时间数据。

. S7 F* f  J8 y1 A8 {* v

STM32CubeIDE 配置

默认情况下是如图

; p/ }7 c- X3 a8 D+ O) R- `

微信图片_20221211151647.png , V& }* k5 B% i

4 ?' r4 u+ J, U  k% p: s0 r3 a

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


, \: ]" [5 e: g% X1 B' Z/ _  v7 Z

微信图片_20221211151643.png

) K+ y/ J" t: P, p& f

! F* q1 ]; Z/ U' a- ?- X然后在RTCC中使能时钟源,如果需要日历闹钟功能的可以在这里也使能上。
" I' y. u1 s4 [, F( i5 B* E
! g0 \, |- H. k2 k( p

2 t: {" l8 y0 u% b( Z, p 微信图片_20221211151640.png
6 N" c0 [( U8 G& E4 `5 k2 {; l" v0 Z0 h

公式如下:

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

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

! k6 d  o; o+ H# r9 N4 m

微信图片_20221211151636.png * C! G0 g3 R- M0 C8 k+ |/ h0 f

& |* N  g$ Y- K+ u' m; E: K

初始化

  1. static void MX_RTC_Init(void)" o- T! @! J2 Y5 M
  2. {
    $ ?& F! Z  D+ D, u; `

  3. # o$ _, C( V4 n, `
  4.   /* USER CODE BEGIN RTC_Init 0 */
    8 J0 H6 I8 ~$ `0 v3 r
  5. 6 f! D4 Z/ g+ {
  6.   /* USER CODE END RTC_Init 0 */
    ' z, c# K. H2 D  v

  7. + t  R% N) L1 H! H( h; N
  8.   /* USER CODE BEGIN RTC_Init 1 */
    1 y% `! e  @' X" L  L2 x6 p

  9. 6 g% H5 R' P4 Y3 Z' S
  10.   /* USER CODE END RTC_Init 1 */6 t6 ~& [6 i+ z$ w+ o+ d( A
  11.   /** Initialize RTC Only
    8 |% D% u  k  ^- F- y0 P8 C
  12.   */, w) v% S$ U( z. p4 k4 p8 x
  13.   hrtc.Instance = RTC;) V. }, [9 g/ e$ d
  14.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;+ t9 B/ e/ F, l4 q; F# K" x( B
  15.   hrtc.Init.AsynchPrediv = 127;
    - O) J* b% R2 Z# k; d1 Y5 t
  16.   hrtc.Init.SynchPrediv = 255;
    # h' f- Y/ _# A: d  ~* M+ p
  17.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
    ! k2 a, P7 E0 x9 u
  18.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
    ! {! [+ A' T- g6 d4 g6 v) E. W" e. Z
  19.   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
    / ?# l! T% W+ K
  20.   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
    , W! R2 L1 [' |) E! v  l1 {
  21.   if (HAL_RTC_Init(&hrtc) != HAL_OK)
    1 X7 ^4 |( V5 S) Y. T: [) H
  22.   {
    5 A; I  K2 A, g7 o
  23.     Error_Handler();
    7 O8 j9 q/ ?" A8 a! l7 k
  24.   }; l! V: y0 |0 @; Q" y& D
  25.   /* USER CODE BEGIN RTC_Init 2 */
    ; S8 ]0 d- v. G% A$ l' l3 K
  26. , L! U0 V; I3 ^6 j) z
  27.   /* USER CODE END RTC_Init 2 */
    % ~; P( f* E3 h2 t0 R- H, [

  28. 7 b. g+ O0 V) }! }* x' U0 F" ?
  29. }
复制代码

) x* z! @2 `6 @$ w5 B" R3 j7 T  v* m

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


. t& y% N' P0 R- M* v* o

微信图片_20221211151530.png
: c$ K; \* U( O7 h5 |9 K, ~/ |+ J& I" a7 Z: n) l8 X+ y

This function configures the hardware resources used in this example

  1. void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)& Y( X: q0 V$ m  X, i9 `
  2. {
      D) D4 i2 G& A7 Y# Y
  3.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
    : K( \& t1 K) I/ g; H/ u3 ^
  4.   if(hrtc->Instance==RTC), r4 C& ~5 Z5 @/ T7 e( X" @
  5.   {. C8 ^  n& O$ y+ z; K- G' r4 r/ y
  6.   /* USER CODE BEGIN RTC_MspInit 0 */6 F6 C: M0 |# B; J

  7. 1 Y6 B. V4 t/ ~* y2 f% k
  8.   /* USER CODE END RTC_MspInit 0 */9 ?) f% d7 D9 a# V& m3 s
  9.   /** Initializes the peripherals clock
    2 {, c! U! \" H7 E! t5 N: t1 B' K
  10.   */
    4 G- v, f4 p) }! _% c8 s/ V! E
  11.     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;5 {0 ^7 {3 b: U" V
  12.     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
      h! F+ ?7 }/ ~) |) J3 ^( s
  13.     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK), B) X* Y2 T7 F& g, x1 Z( Z  r' ]
  14.     {) V3 G6 m* u6 @" Q- ]
  15.       Error_Handler();
      K! N& j/ b1 m0 X# f3 ~
  16.     }5 s- |4 Q& T. \* n2 V" W

  17. " ^+ n7 A% v% v) a5 p0 q) ^# w  {
  18.     /* Peripheral clock enable */( S8 e. X  a+ C0 J6 f$ @# K
  19.     __HAL_RCC_RTC_ENABLE();, F, {5 p8 W$ H# r( G- Z, G; S: u
  20.   /* USER CODE BEGIN RTC_MspInit 1 *// c8 c9 A- J" \( V9 e: |2 b

  21. . i6 @0 b, T2 g2 u$ s8 `
  22.   /* USER CODE END RTC_MspInit 1 */2 H* S( N5 b8 L* y
  23.   }
    ( l6 G$ S3 N: n! U

  24. % r" U: l  A2 x( e
  25. }
复制代码
最后,可以按需定制自己的实现方式,RTC是特别实用的一个模块了。2 }$ H7 {! @3 i

8 K/ b- m! j  c, K3 h, G7 X$ X) H3 p  r# q/ ^

5 G0 }8 s: q& L作者:李肖遥
) D: v  z+ J& t; J: N! ]
收藏 评论0 发布时间:2022-12-12 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

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