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

STM32H750中RTC简介及使用方法

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

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

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


5 V1 l$ ^$ Z; g' |

RTC 的简化框图0 `. V" J8 j4 a& a# a
$ z8 q" u0 |4 K+ R8 C* ^
微信图片_20221211151650.png ( Z: |; j$ X0 V+ A( p

/ x$ n8 W3 f8 }时钟和分频

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


& ?. t- o. j7 L

STM32CubeIDE 配置

默认情况下是如图

, _  D+ U. ~6 z/ J& T9 ^

微信图片_20221211151647.png
/ [8 ^. q+ Y7 C5 G3 f6 W5 Y, y( R0 {

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


/ h% x: E0 _; |

微信图片_20221211151643.png


; j2 f% ~, n- w7 B* N+ p$ ^0 o6 T  _7 `. p: t4 r/ m% a
然后在RTCC中使能时钟源,如果需要日历闹钟功能的可以在这里也使能上。
" g% W  Y% s) b4 q9 U2 o
8 o+ ^2 ?* f, Q; H8 K) n& m

$ K% x& N. Y+ Y0 h, A 微信图片_20221211151640.png
, t3 n6 W4 e% u) @" Z5 U1 W. N: C/ Z" U, S1 N

公式如下:

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

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

- F+ Z/ x& _4 T& n7 C

微信图片_20221211151636.png
2 R5 ]( q+ K9 r' u) l
* w8 Q% N$ _# C& ?" Z' W# D* r4 E

初始化

  1. static void MX_RTC_Init(void)
    % S! t. a9 V4 }8 I6 V
  2. {( C1 y: `. Z; J: K0 G+ E' K' f' X7 O
  3. : P# D* {! i/ D( T( h
  4.   /* USER CODE BEGIN RTC_Init 0 */
    " x3 g" J' r/ r$ C- [! K

  5. . [" e, C1 f9 A7 L
  6.   /* USER CODE END RTC_Init 0 */
    5 M8 D$ b' i$ K, F+ n6 U+ E: o

  7. ; H. l! B2 h3 S9 m3 x& T& B: O
  8.   /* USER CODE BEGIN RTC_Init 1 */9 T4 Q* o" x2 _. I* c

  9. ! g2 l5 E) q) F/ s
  10.   /* USER CODE END RTC_Init 1 */
      a4 d2 f2 {; H4 M, ?, e3 X9 l4 y0 O
  11.   /** Initialize RTC Only
    4 }$ Z+ G. m4 M) w5 c
  12.   */
    , A, ]& E' y4 P' A* J- V* ~
  13.   hrtc.Instance = RTC;
      t3 E& j0 o8 I  _5 k
  14.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
    " Y9 A( H: u3 G" P0 R/ t
  15.   hrtc.Init.AsynchPrediv = 127;: s% G6 f% t3 F& n
  16.   hrtc.Init.SynchPrediv = 255;
    ' O- O5 e; b5 R+ x/ B
  17.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;2 x( r0 [& Y3 C7 v) ]
  18.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;7 {% ?  ]; Z3 h: l# Y
  19.   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;6 l: _8 J, y. ~* [
  20.   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;& C- t+ b- E- r
  21.   if (HAL_RTC_Init(&hrtc) != HAL_OK)! ?; L& o) j7 V
  22.   {! F+ P# P8 M2 u3 L! T1 H
  23.     Error_Handler();% k9 w5 ?8 r; y, z* U4 J+ h1 z* I8 ~
  24.   }+ G+ ?, u% @# i: Y) N& Z
  25.   /* USER CODE BEGIN RTC_Init 2 */! y- D, Y9 `2 z# H' A. U2 C
  26. ) T4 n) [4 C, W* _+ J- A
  27.   /* USER CODE END RTC_Init 2 */
    & m# i. n+ X8 Z+ \
  28. * G  Q* b% G3 s
  29. }
复制代码

5 F$ X1 f7 P# k9 M
/ {' _9 Y, {% T/ {* O

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


1 J( i, e2 `! {( a, |

微信图片_20221211151530.png
5 m# j6 U$ l7 ^- \% Y3 R0 V4 R# ?* o& P$ o

This function configures the hardware resources used in this example

  1. void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)5 O9 I7 B4 \+ ~
  2. {5 V% _! w5 F/ L  g, I/ q& O
  3.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
    # f8 j+ y# Z! |/ p
  4.   if(hrtc->Instance==RTC)
    ; Q: g+ t: w  I" _4 Q9 d9 R) d
  5.   {6 G5 x* V% @2 D4 b2 ?5 |
  6.   /* USER CODE BEGIN RTC_MspInit 0 */
    . M7 D& R, o' T3 p; ?  y+ ~
  7. ; U" P  M. y" J: W
  8.   /* USER CODE END RTC_MspInit 0 */
    6 J* S6 q' j3 t' `- Q
  9.   /** Initializes the peripherals clock. \3 K3 P: I: _# s; v. a
  10.   */
    1 a( i  ?- u& ], l
  11.     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;' Q8 N, k) ~- E6 r8 O! S6 Y
  12.     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
    5 s/ T" F' k+ x7 \* ^4 m
  13.     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)) a* [4 L8 O* ^0 F) L* |4 c
  14.     {- Y7 k! \/ s2 E7 i) m" z1 A
  15.       Error_Handler();  G5 T/ P' R1 l0 {
  16.     }4 W8 O( X# L# A) y" W8 ]2 {% K/ T
  17. . [$ I$ T# A  b5 P: @# \* q
  18.     /* Peripheral clock enable */
    ) K9 C$ \- K" d4 Z( l8 ?
  19.     __HAL_RCC_RTC_ENABLE();
    9 {6 D9 ?$ t+ M6 _
  20.   /* USER CODE BEGIN RTC_MspInit 1 */$ Z2 u1 l2 s- E% x7 Z

  21. : G' _. E/ g; C) y" W" C
  22.   /* USER CODE END RTC_MspInit 1 */3 P$ l! o- \; k$ |! q4 J
  23.   }/ ~5 c3 w2 Y% K" v, E

  24. - O& U# g6 i" i. d' t$ o
  25. }
复制代码
最后,可以按需定制自己的实现方式,RTC是特别实用的一个模块了。
5 x# L5 {0 Z% b0 P+ }% m/ `, `. {( t9 k: k7 D! b* D) t

7 {6 P0 ?9 ?# P- Q6 a# Z

2 t- T- E( \% d$ j8 _4 A9 J# n4 i作者:李肖遥
0 [( X8 j$ A* j4 F! @! E
收藏 评论0 发布时间:2022-12-12 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

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