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

STM32H750中RTC简介及使用方法

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

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

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

+ L/ o8 h  F$ {0 M

RTC 的简化框图
: `; l" U6 g0 P* H- a; R
5 a! i: j0 I3 q) s
微信图片_20221211151650.png 1 G& b) u, z7 K
6 p. s- p/ `8 D- Q' j
时钟和分频

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

3 o$ @* U- O6 Q% O

STM32CubeIDE 配置

默认情况下是如图

' p: B& V& ~- u5 g8 ^# H1 t4 {

微信图片_20221211151647.png
  j/ w/ o7 h1 g* {  x# O
5 Y, _) S9 Y7 ~" X. M2 _

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


; p! M$ G4 q, B' _' _6 D

微信图片_20221211151643.png

& f$ _4 T, V& R+ A0 z

% ?( r$ A; U: g; F2 @然后在RTCC中使能时钟源,如果需要日历闹钟功能的可以在这里也使能上。

- W( n2 M: v& [4 m6 K/ v0 u5 F" _" h+ f- `4 {, C2 u2 S

7 m$ Y2 e5 m; W2 B 微信图片_20221211151640.png
5 C6 m/ W0 D" V4 h9 p1 t  N5 C* E
+ T2 Q. V+ ~1 m6 v: A, r

公式如下:

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

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

# P9 H! U) V( m5 K

微信图片_20221211151636.png
3 z; g1 D! @' |4 W* V9 s3 R8 f% a( ]" L6 i. z! H3 S# h& e" {! z& G

初始化

  1. static void MX_RTC_Init(void)3 }) O0 E8 E8 v& j& M
  2. {5 l) j$ k2 q7 l- F! A( `4 |* T! R

  3. ' |; f9 x* C$ N* z
  4.   /* USER CODE BEGIN RTC_Init 0 */2 E" t; }4 l2 i6 N0 ?

  5. 4 r3 t4 }6 v. l9 c+ `( i2 W# g+ r
  6.   /* USER CODE END RTC_Init 0 */
    6 ?4 N2 i2 c1 N/ G, u5 O# C

  7. 9 n6 x: z% `7 p+ w5 h. l, A
  8.   /* USER CODE BEGIN RTC_Init 1 */( D6 s) ?& Y, c4 V* m: s' z
  9. : F% E  d8 M9 |' ~* z! S
  10.   /* USER CODE END RTC_Init 1 */
    + O4 l; S" k. B. T9 d# A
  11.   /** Initialize RTC Only, A+ R" m: T5 E
  12.   */* I# l# {9 K, j5 f- H* m% r. k2 M
  13.   hrtc.Instance = RTC;8 F7 w# w0 b- m. u& d0 {! `% x
  14.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
    7 j4 s2 v% u; N3 ?% v# R
  15.   hrtc.Init.AsynchPrediv = 127;
    # T! Y$ [: w( c- F1 F% T
  16.   hrtc.Init.SynchPrediv = 255;
    8 u: p8 t$ d& O
  17.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
    # v) G$ u* U1 A, f7 I( v, @
  18.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
    2 Y5 p7 E3 I/ S9 ^/ c& z
  19.   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;8 x" j9 r3 L  q  W1 U
  20.   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;: u+ E! S: ?# `& r8 q5 e
  21.   if (HAL_RTC_Init(&hrtc) != HAL_OK)
    * r5 Z; T- N; T& X8 O
  22.   {
    ' o( \0 a% m& R& F) D! i& I( ]' r
  23.     Error_Handler();
    % s1 `# v8 h/ {- O4 M" v
  24.   }
    + [0 l% X1 G" _, z3 z7 T1 E; \
  25.   /* USER CODE BEGIN RTC_Init 2 */6 n' t! b4 s# V, u6 c6 Q
  26.   ]' N  g. `$ P5 C/ A3 }
  27.   /* USER CODE END RTC_Init 2 */
    ( f7 n0 a3 X: \6 s' {3 M  f
  28. 7 m. K* o/ E* A
  29. }
复制代码
. \' `2 L/ v$ w3 c$ Z, x- J
0 j, A/ f; y0 ]6 @5 i) C

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

/ Z7 y7 o* m3 \3 D

微信图片_20221211151530.png
* }' ?( R8 o; `2 v) u& ?
5 ?1 _( q8 O7 y6 m

This function configures the hardware resources used in this example

  1. void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc)$ l1 G- P. [' {- T8 w9 W* v% h7 c
  2. {
    5 t+ ]" S, w2 |6 r& Y! i3 E. X
  3.   RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};# X2 {) C5 t9 H8 Y
  4.   if(hrtc->Instance==RTC)
    # ?3 m) \' z( p- S
  5.   {
    $ }& l/ o+ w4 |- {# R
  6.   /* USER CODE BEGIN RTC_MspInit 0 */) d# s- l; h  F- g7 M+ u5 y. w

  7. * o4 L4 v# k9 f1 E
  8.   /* USER CODE END RTC_MspInit 0 */
    2 \, i$ r2 E* s6 H. ^5 u
  9.   /** Initializes the peripherals clock0 o  W- ^3 @7 ^
  10.   */
    3 s* M' @8 l1 _
  11.     PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
    $ L  F& k$ C; W  j6 h. Q, A- g
  12.     PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;6 G1 l8 M3 Y+ |% Q% `* m1 R
  13.     if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)3 A/ z5 u9 O0 ^" U2 T% \
  14.     {
    8 o; _3 o0 C5 g& q7 O5 B" h
  15.       Error_Handler();* D9 \: X+ N3 j3 {2 Z; B  `
  16.     }6 c5 K; s& W( }# v5 O5 N
  17. 8 O8 I& t5 e% m: I2 a3 v' x
  18.     /* Peripheral clock enable */( M" U# S" {4 g* j$ d; H
  19.     __HAL_RCC_RTC_ENABLE();  v( p* q+ p$ X2 h: p  F
  20.   /* USER CODE BEGIN RTC_MspInit 1 */- H% U3 j. T7 L  Q! w$ h3 W

  21. $ Y/ |+ ?* S" i! X! _# x
  22.   /* USER CODE END RTC_MspInit 1 */6 Z& ~' b* ?6 T( }
  23.   }0 a+ t6 C+ H+ a' \, _7 ?! j& i

  24. ; m2 ~# l/ o/ m, Q$ m* `% Y* g
  25. }
复制代码
最后,可以按需定制自己的实现方式,RTC是特别实用的一个模块了。
9 S# _! u9 R: B) s3 H
) P: G; L2 }3 q1 v3 z8 c7 U& t+ C4 j- D8 [3 Q+ f' E+ a3 ~1 \" J5 o/ `

  O/ l7 b0 U: S8 b. X作者:李肖遥
! A. B9 B3 ?$ e
收藏 评论0 发布时间:2022-12-12 15:00

举报

0个回答

所属标签

相似分享

官网相关资源

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