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

STM32H750中RTC简介及使用方法

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

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

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


! z4 u2 p" j. m! w. f) @+ _/ y

RTC 的简化框图% n; [& ]6 O# j5 G7 x
; ]5 F7 q3 y2 o9 h$ t; s9 ]* y" V/ ]
微信图片_20221211151650.png % U/ R: |3 y* @  j
+ y8 i0 G7 V* Y9 l0 v$ i
时钟和分频

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

9 }" E' y, y; k8 w: T  B/ M

STM32CubeIDE 配置

默认情况下是如图

9 N2 b+ \9 s5 O0 H; Y" L; w

微信图片_20221211151647.png ! x  N: d- l. y( n2 o- y, v3 p

4 |( p1 T) ~- U+ C2 h' W( _9 b2 d

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


$ O" Y: `8 ?& D1 J. u& P+ h: ?

微信图片_20221211151643.png

5 C, q( {& }0 H( }- l2 T
! Z8 B1 K7 l. P; Q. M( q7 \
然后在RTCC中使能时钟源,如果需要日历闹钟功能的可以在这里也使能上。
& {# f$ }  h! |

8 U; ~6 r7 h' }3 T# {0 ~5 z

5 K% p9 c6 _& l4 N7 u1 z, R 微信图片_20221211151640.png 6 V- b0 L( \8 B/ ~7 a5 H

5 r; }" @' e$ I- x$ b+ v5 T

公式如下:

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

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


3 w" z$ L( x, z* Q

微信图片_20221211151636.png
; j* V9 k# j( k( T/ ?$ i" r- ]) o9 y. j* O

初始化

  1. static void MX_RTC_Init(void)! r% t+ R7 l% x7 k; _5 o
  2. {
    - P; }( S! _1 B" s8 p% [0 E

  3. / y  m- K9 W6 K4 u/ N6 G4 |3 ~5 C5 @
  4.   /* USER CODE BEGIN RTC_Init 0 */
    : N8 e/ {2 x8 W$ d7 r. _0 {2 y4 ~

  5. * Y$ g0 A. s8 C, b2 [
  6.   /* USER CODE END RTC_Init 0 */
    3 Y7 b7 {: L) R, D8 v" F$ K4 T
  7. 6 l! E/ G  m; m' H5 |" N- ~6 g$ D
  8.   /* USER CODE BEGIN RTC_Init 1 */) T, d9 g: r% Q  @& @4 n5 O
  9. # I2 u! J2 F2 e0 Y7 x' m
  10.   /* USER CODE END RTC_Init 1 */
    1 f4 N& c/ `* Q* x( @
  11.   /** Initialize RTC Only
      L* H& W# p7 ?
  12.   */- P4 d$ n/ b/ o- ?% J) @
  13.   hrtc.Instance = RTC;1 G! w( E+ N/ Z$ h$ v6 H
  14.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
    # F; Y! \4 R8 \( A$ `& Z
  15.   hrtc.Init.AsynchPrediv = 127;
    1 j0 _: k& [2 t
  16.   hrtc.Init.SynchPrediv = 255;
    3 ]9 x. n) |7 S# ~+ Q
  17.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;+ O# v2 r  e5 b7 U8 n$ C4 n: O- @( e4 j
  18.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
    8 F$ ~, A+ c$ R9 E" g+ `: I" t
  19.   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;, R& B* a5 \+ Q
  20.   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;2 p( x1 v3 @2 _) Y
  21.   if (HAL_RTC_Init(&hrtc) != HAL_OK)1 i6 J3 A, q8 u* @1 t$ w
  22.   {+ z' }2 g2 O, c! s) y3 L  r
  23.     Error_Handler();
    . w2 ^* P% c! }) H0 ]
  24.   }
    8 @8 D2 w* {2 e
  25.   /* USER CODE BEGIN RTC_Init 2 */- @. ^4 a% J) \/ a
  26. 9 x8 [. s% f9 R# L! h. P
  27.   /* USER CODE END RTC_Init 2 */7 p  p5 w: s' N/ E3 P  i

  28. ! t- o& \4 e8 z* E5 I1 K% y; S
  29. }
复制代码
: V+ n0 N" W0 y* b  @- B
7 A  u0 i, k( M" M7 f/ F1 O

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


) E6 p- v' g4 x4 M& _) l! z

微信图片_20221211151530.png : ?8 [# s4 c- Q! a* i  a. z# v
; {6 j. k5 m- s0 E

This function configures the hardware resources used in this example

  1. void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)7 T  c. a. ]; ]# n5 u6 }0 P
  2. {& @8 _+ Y0 c% [0 \
  3.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};  D8 E! L- L' J
  4.   if(hrtc->Instance==RTC)4 I, A( P; z% d* c4 k0 I
  5.   {
    7 g+ X! ]2 E( _& v
  6.   /* USER CODE BEGIN RTC_MspInit 0 */
    7 M' r: a/ g( x3 N

  7.   @# Y5 ?# |$ \
  8.   /* USER CODE END RTC_MspInit 0 */
    & }1 r( j/ m% ^" _
  9.   /** Initializes the peripherals clock
    7 r9 Y( C4 G- L' k. T; O
  10.   */
    + r( G5 y2 ]% d. q
  11.     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
    ' k; j+ k7 k- Z. q( s
  12.     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
    4 N8 l3 C' |: z$ T7 f+ r
  13.     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
    ) R* X- V9 m( z# H
  14.     {
    1 y; R, Z+ y& r$ n/ R4 _1 q1 g
  15.       Error_Handler();3 _* Q- e1 p5 w7 w
  16.     }
    $ D( v8 v% r& M3 j% d

  17. ) X6 N# X  j+ |3 [
  18.     /* Peripheral clock enable */7 R# s3 p0 K- A9 l* T; w# E. l
  19.     __HAL_RCC_RTC_ENABLE();
    3 I) v4 V$ O4 D/ O; x5 {# |
  20.   /* USER CODE BEGIN RTC_MspInit 1 */9 M: U5 F6 S/ E) j
  21. 6 Z+ {3 e2 j3 b" s( P
  22.   /* USER CODE END RTC_MspInit 1 */
    0 y4 x! Z2 B+ V6 o
  23.   }/ S4 Y% k) W1 L
  24. 2 }0 ]1 Y0 M' w& D4 v! @/ h- P- |
  25. }
复制代码
最后,可以按需定制自己的实现方式,RTC是特别实用的一个模块了。
- N  R4 ]" y2 |" \9 Q% @2 \. i" q$ R
; `: \' ^3 p# C  ^  V

. M/ E& V3 j6 @- g5 F9 }& Q& r作者:李肖遥4 {9 e; \* \# r
收藏 评论0 发布时间:2022-12-12 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版