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

STM32G431RBTx 基本模块 RTC

[复制链接]
STMCU小助手 发布时间:2023-3-1 20:42
前言6 I( ~; N2 [+ j( N
由于第八届赛题中出现了要求使用单片机的RTC功能。
0 }2 n$ r1 G1 @7 E/ I* [7 `& s# }0 o2 j2 H" j7 O; T
3157b8e6bd02447c9d3d6cf3124558ef.png 8 A( m% T9 |& N

8 T. [( Z) @% i5 i* O所以本节我们学习RTC的使用。
8 [* h) h& @* S# p+ G+ g: y9 j/ _* U5 \1 w' P8 s/ K

2 b9 Q8 m  w( G1.CubeMx的配置步骤- r" m- G# d. t( U% @1 r& L0 X) R
修改之前的UART的ioc文件来生成工程。: h4 y. f, P( ~) |- `+ c, j

/ r6 Q  v# B2 H. m
c2a2c77b01a04368a514ce14dd939dac.png 7 v' r- u: C# l3 U" i

2 N6 i' Y; k- f/ m; ~
8d23fe7214084b268bdb57fc70403110.png * ]; n7 |9 H- Q3 @0 ?1 N
# w9 u; a. S, X& S; L' u. Q
2.生成工程7 f! X9 a! q# D+ ]. h8 s. ]- K
点击GENERATER CODE生成工程Project即可。  U: e! z* Y. ~; I+ \, r9 D1 p# v

' D$ G3 w# o* K( ^
f8512451c5d946ff9a001cae802bbdb2.png 5 X$ Q/ f3 x& C. B& I

! R/ j0 L# v- Z
, ?( ^' f8 j/ H  }0 B: r. w
3.测试代码! w; {9 r3 h  F) _+ {
main.c- J) t% J6 X  v9 W/ \
  1. /* USER CODE BEGIN Header */
    . ^/ h( N7 g) W' U
  2. /**, H& U* I9 h8 |
  3.   ******************************************************************************
    ( d! s6 B1 u; i# ^1 G9 D. Y
  4.   * @file           : main.c
    $ M! ~" B7 c" ~
  5.   * @brief          : Main program body
    2 n" u  F  X. R; p1 f
  6.   ******************************************************************************
    0 I, _! ]; o" K3 r" I) N
  7.   * @attention
    # D) W  @  @9 J1 s+ K7 D
  8.   *
    2 Y- W; m4 k0 p2 k
  9.   * <h2><center>© Copyright (c) 2023 STMicroelectronics.
    ' \; L) e9 y* P% U: ~' b* Q( Z# m
  10.   * All rights reserved.</center></h2>
    & D% i' ^, ]# j3 F: }' M
  11.   *
    ( \  w& _# ~3 ^' P$ v7 O$ g0 l: d
  12.   * This software component is licensed by ST under BSD 3-Clause license,1 ?, i. ~* ~9 s! l% a% [# W* p6 i
  13.   * the "License"; You may not use this file except in compliance with the7 [6 j. k. ^  o
  14.   * License. You may obtain a copy of the License at:
    ( n8 T4 T' [# h; D) u
  15.   *                        opensource.org/licenses/BSD-3-Clause
    ( s8 Y8 x" o  s2 G
  16.   *
    5 Y: T: t- D+ z1 s: K" D' J' v
  17.   ******************************************************************************
    * e- u( |* k0 }1 {  D% q/ c
  18.   */# z2 A- z8 `, C- {% {
  19. /* USER CODE END Header */
    0 K7 M1 X8 v- l* N/ w
  20. /* Includes ------------------------------------------------------------------*/
    ) j8 b+ L' c) h3 p. J
  21. #include "main.h"
    ' f4 N' Y: \0 T# y  M
  22. #include "rtc.h"! B( z. ~/ A: Y" X8 O; B
  23. #include "usart.h"
    / y* U7 E7 J7 ^. C* T3 l$ r
  24. #include "gpio.h"
    1 w) W& s7 w4 d! b- m1 ?: Y

  25. & A( C5 E; s1 c! |
  26. /* Private includes ----------------------------------------------------------*/
    8 _( y9 h$ P! L5 r8 P. z. P1 [
  27. /* USER CODE BEGIN Includes */
    . F8 S4 a, W0 l
  28. #include "stdlib.h"
    ) R6 B& V$ v3 E% G2 v3 G
  29. #include "stdio.h"- d0 X3 h. ?4 ^- N( W, c
  30. /* USER CODE END Includes */& G2 S) M3 [5 Y4 R

  31. * ]9 E) x$ w" I3 S4 {5 @
  32. /* Private typedef -----------------------------------------------------------*/
    ' @. R$ G" b3 w" `- U! A
  33. /* USER CODE BEGIN PTD */3 F, C; o& O7 k

  34. 7 Q" R% J6 z' W7 H, Y  N. a
  35. /* USER CODE END PTD */
    " `) n, F' l% H7 m8 ~! a
  36. ' k2 z0 z/ V: l8 E
  37. /* Private define ------------------------------------------------------------*/+ }+ x1 h$ S) S
  38. /* USER CODE BEGIN PD */% E/ l3 Z5 Z  R8 C" E5 c
  39. /* USER CODE END PD */
    - F. i) b8 A' m& v' t, k
  40. . q1 }( q  g- W! y5 `  \
  41. /* Private macro -------------------------------------------------------------*/
    7 u& X1 B- k4 e5 z; G) O
  42. /* USER CODE BEGIN PM */" f( d* l3 w4 F8 i+ s& D9 A. v" Z

  43. # K- I% d, a, w5 @0 N
  44. /* USER CODE END PM */8 u6 Q- ^* S1 ^& T/ U
  45. ' D/ }, V) l( C) i0 f" ~) C5 q* m
  46. /* Private variables ---------------------------------------------------------*/! L) m6 {" {- T- f

  47. " z* {- B  x+ A) P9 W
  48. /* USER CODE BEGIN PV */( ^' j8 j4 I5 {7 a0 x. Y. e3 \
  49. 1 F, ?" w( u; b! b$ H! U
  50. /* USER CODE END PV */
    & Z4 r. z! t# U* M' `% N% D

  51. + i! U# Y( v/ ]* u
  52. /* Private function prototypes -----------------------------------------------*/5 G+ u# D8 e$ b7 l0 A/ c; Z
  53. void SystemClock_Config(void);6 L# s0 `9 t( W1 r: `
  54. /* USER CODE BEGIN PFP */
    ! H4 D9 X) d# s5 k* ?& H8 [% Z
  55. 8 x/ G+ K6 p! ?6 T2 x, \, b
  56. /* USER CODE END PFP */
    ' Z# z) l. p7 Q/ d0 s! n

  57. 8 b9 \* i7 ^- M, P# V2 x! |) e
  58. /* Private user code ---------------------------------------------------------*/
    - L' i3 s8 _. v
  59. /* USER CODE BEGIN 0 */
    8 H0 y5 O$ L- C* o& A
  60. RTC_TimeTypeDef T; //储存时间用的两个结构体
    8 Z' ~$ [; M9 W% V6 [: r
  61. RTC_DateTypeDef D;; g" e) T* A( N6 E1 q
  62. unsigned char second;
    / B+ i2 q1 m7 o! S
  63. /* USER CODE END 0 */
    $ v3 F: q9 w9 E6 l! I
  64. # H7 N: ?: \! @4 d$ Y
  65. /**
    2 p, K  e; o! j) \
  66.   * @brief  The application entry point.; i- r  T) w$ o
  67.   * @retval int
    1 i2 U- O2 l* L2 k0 z2 C1 f" l
  68.   */
    $ P+ {7 m/ F3 x5 j8 l9 a& Z" ]: D- Z* Z
  69. int main(void)
    & P1 X$ |' E( Q, O/ M
  70. {; E$ y- F2 ~# p7 f3 I) }
  71.   /* USER CODE BEGIN 1 */  ^% d& {( {' o" m

  72. 4 L3 L9 a# T' ^9 k: W; \
  73.   /* USER CODE END 1 */
    : K9 ]! {' I0 X

  74. , R5 r) z3 S( ~  T5 U/ S
  75.   /* MCU Configuration--------------------------------------------------------*/. s4 B4 S3 ~$ y$ ]. E- O+ X
  76. $ v% q( I( l% D! M
  77.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */1 k" r9 ?, ~6 k" N( w/ g* B- n( G
  78.   HAL_Init();' h2 b4 @3 ]; O! m# ^$ G6 K
  79. : E/ f8 C; K- X' o  o/ y2 U+ ]
  80.   /* USER CODE BEGIN Init */
    * _! L9 T$ L6 K
  81. 9 R7 y' Q  @, _# e8 B7 ~
  82.   /* USER CODE END Init */. ~& t" w4 X' q9 l! q( X. c
  83. * v6 m& t0 E' p. z* Y  x
  84.   /* Configure the system clock */
    ! V9 B) ]6 F. m
  85.   SystemClock_Config();1 |- _5 e8 w/ W

  86. - h' @& [* R$ c# H/ |  B
  87.   /* USER CODE BEGIN SysInit */
    2 d: t/ T' N: C! w6 }1 |( M6 b

  88. 7 k# r9 C* a8 e7 v1 m0 A
  89.   /* USER CODE END SysInit */  T2 y9 K* |# g& {0 Q: c8 t2 Z
  90. ' P% {3 T3 ^9 S8 o( c0 Q8 O
  91.   /* Initialize all configured peripherals */
    ' b" S  V4 a% w5 p( v: S2 B4 y4 g! c
  92.   MX_GPIO_Init();
    + [/ h8 r) c" h
  93.   MX_RTC_Init();& E3 y! j# s% B- s9 p/ `/ e, I
  94.   MX_USART1_UART_Init();( L/ T" @  S" r$ f! j
  95.   /* USER CODE BEGIN 2 */+ U- O3 ^) q7 d$ u8 e8 q. S
  96. ) n% A3 q& Q: M$ c
  97.   /* USER CODE END 2 */3 ^3 ?. `* {' ~- c

  98. 6 L# C/ c3 y% i7 l3 N  {# v, j- r
  99.   /* Infinite loop */
      {$ V9 r- q, j( a4 H+ L
  100.   /* USER CODE BEGIN WHILE */
    ( H: h6 T, V; t5 F; A; B7 W
  101.   while (1)
    5 i+ W: n' |7 W3 ?0 s$ ^2 q4 f
  102.   {' a7 I  e. ^4 E* @0 w  d: E
  103.     /* USER CODE END WHILE */& z, J$ f/ \0 |- @7 P. _

  104. ; E  p; g* B% f2 W) t
  105.     /* USER CODE BEGIN 3 */
    " ^+ C9 J- m5 K
  106.                 HAL_RTC_GetTime(&hrtc, &T, RTC_FORMAT_BIN); //采集时间" ~$ i- ^8 g$ {! m% @# S
  107.                 HAL_RTC_GetDate(&hrtc, &D, RTC_FORMAT_BIN);7 N- k4 S* T" ^' I5 C7 v
  108.                 if(second != T.Seconds) //打印到串口' y: R. P' I8 v% }
  109.                 {
    * ~8 m7 |3 y( r$ g/ \5 q
  110.                         second = T.Seconds;$ H2 m' n# y5 ]; `1 V6 T4 M! P
  111.                         printf("%02d-%02d-%02d-%02d-%02d-%02d\r\n",D.Year,D.Month,D.Date,T.Hours,T.Minutes,T.Seconds);. Q8 \8 Z, h' u
  112.                 }
    3 M5 m* [: X; U9 m( k' m- |; f% ^
  113. 3 o) }! V$ H) m6 I0 t7 J  K
  114.   }; S; i% O4 g5 s- E* |  Z/ j) `) k# ~$ ?" Y
  115.   /* USER CODE END 3 */8 S9 m7 A. P# a3 K* r  O. r
  116. }  z7 ?0 u8 ^7 l
  117. 4 Q! Y* N4 {9 o: k: W/ F4 L" s. o! z
  118. /**
    , I7 |! {/ f% H
  119.   * @brief System Clock Configuration
    ! ^# X" m1 S4 Y) @* ^
  120.   * @retval None
    6 R: K4 s* B/ A, w) f  d  f
  121.   */$ F* o$ S& {* `) S: L9 k
  122. void SystemClock_Config(void)' z0 K$ Q! a6 m% W# c' a9 G* o5 ^
  123. {
    7 _. h* S$ I* J! t* x; }% M( ~
  124.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};, \% O& T& x" ]" [6 E+ ~3 c
  125.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};% l. ?- I; A  K* r
  126.   RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};) B. o/ T4 T' r8 U

  127. , [4 U) A8 |6 v  q' h5 D9 x& r
  128.   /** Configure the main internal regulator output voltage5 n+ Z: c1 q( z$ T- s
  129.   */
    7 e& }) {3 h4 h7 x2 A
  130.   HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
    6 a* f9 T8 D$ x! s3 Q
  131.   /** Initializes the RCC Oscillators according to the specified parameters3 K3 Z& F: O8 f  T
  132.   * in the RCC_OscInitTypeDef structure.
    * M$ q+ O) n8 a2 }0 B0 [
  133.   */
    / x: `$ l( P/ M- I) z0 Q# ~
  134.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    - g. R, w, R, Z6 ^& Z
  135.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;& B3 ~  u' [4 c9 u7 X
  136.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;5 E# m  Z9 i2 n& K
  137.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    8 R, t" i9 ]' r2 I& y  {/ t: c, |8 l8 E& \
  138.   RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV3;) Q, K1 p* m* i4 Z; {# ]5 @* D
  139.   RCC_OscInitStruct.PLL.PLLN = 20;) I% j- e! Y2 W
  140.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;% I4 U3 B  g# c& D: v$ J
  141.   RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;; ^  U) ?& H# K  x4 z- V
  142.   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
    ! J" c( O( [' H8 O/ s9 ^5 r
  143.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    & g8 l5 F: T# s# s
  144.   {; s. ?/ X+ o1 j  F" w
  145.     Error_Handler();
    9 K5 o2 o/ d( s+ P' U& r; N  p
  146.   }5 A! q# H- Z9 l4 n. b% ]
  147.   /** Initializes the CPU, AHB and APB buses clocks
    3 [3 L2 F6 C7 B+ W) u
  148.   */- f; D! q( J" c" L% s8 y* ~9 D2 B3 C
  149.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
    . c4 @/ C0 a& C  R, }  r' c
  150.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    * B( N  r  a) y8 B4 `8 F  U
  151.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    ' ]3 `9 j9 k0 P* X2 v
  152.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    - S6 m9 e  R9 O; t8 J' r, M' C
  153.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;3 d, y! o' X9 Y* S5 m
  154.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    8 T+ @# m- d3 o; l
  155. * B" ]2 M5 Z4 k# W) J0 s
  156.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)! `& i6 s: x8 l! P& h+ d1 e
  157.   {% O2 b' D/ i9 ~. g2 m3 F
  158.     Error_Handler();1 |7 c' p9 \1 R9 v( R3 T7 c
  159.   }
    - o3 D" a" U- |! P4 b& v4 C) |9 Y
  160.   /** Initializes the peripherals clocks* Z/ m* p8 a/ @
  161.   */
      A9 U/ H0 t  |
  162.   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1;4 k% s7 N& v+ W% z
  163.   PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;3 `" y* g2 R( K" ]* i# C
  164.   PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_HSE_DIV32;: d& |0 ]3 _; P

  165. ' O- n3 \4 x! t, {% u' F
  166.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)  Q" U# J/ T# o& \, F4 D
  167.   {" d! o6 @0 u1 J$ e# H& I' [
  168.     Error_Handler();
    ; e9 m  s9 V2 z8 X! W- T
  169.   }
    & e2 {* I& D; J1 b/ D
  170. }
    : S4 L7 y! v. x, t/ E" B

  171. : c- X% s/ b2 E4 g
  172. /* USER CODE BEGIN 4 */
    ) {3 f* X! T; ^7 j+ ?# y8 O
  173. int fputc(int ch, FILE *f)$ Z; T3 k  F6 O  p8 Y
  174. {
    + m) N" ~. t  C* L+ T; ]
  175.         HAL_UART_Transmit(&huart1, (unsigned char *)&ch, 1, HAL_MAX_DELAY);. f8 Q% V! j# T2 T
  176.         return ch;
    7 E6 T  i7 g4 j( K# }) C7 H* H
  177. }
    3 z2 ?4 p, d5 {0 ?$ r; j
  178. /* USER CODE END 4 */7 _, j$ A7 m9 y* N

  179. 7 w/ Z$ M2 i5 }6 u2 J' V, B" Q
  180. /**) ]: U& H' x3 g' {0 @
  181.   * @brief  This function is executed in case of error occurrence.+ ~7 z3 A* e* |. {, c6 G% }
  182.   * @retval None- k$ a* i7 Z4 `& M
  183.   */+ ^5 w8 c: f" ^6 M' k5 u
  184. void Error_Handler(void)
    : I$ I* J3 j/ r$ c& i
  185. {  k' |' C; b  O. D+ z
  186.   /* USER CODE BEGIN Error_Handler_Debug */
    $ B9 _0 [0 T3 Q- V' K; X
  187.   /* User can add his own implementation to report the HAL error return state */
    ) U- V1 j( B8 s# q* r
  188.   __disable_irq();+ a* x4 y5 @# P: j0 Q- P1 N! `
  189.   while (1)
    6 m) J; d- U0 G8 l' |1 X
  190.   {. o! |3 m( c; f1 R/ k$ w
  191.   }; O7 j0 V3 u, a$ T: O
  192.   /* USER CODE END Error_Handler_Debug */. u- O3 R3 N, C9 R6 f
  193. }
    . r, O3 V' s* l; X

  194. 8 K! E# R. S4 b6 b; u
  195. #ifdef  USE_FULL_ASSERT9 W. v9 E( c4 c- H/ x
  196. /**- u, k; M; `3 Q
  197.   * @brief  Reports the name of the source file and the source line number
    - y% K0 k3 {5 f9 p' ]
  198.   *         where the assert_param error has occurred.
    / S- W9 d8 c& h% E* A& Z8 d
  199.   * @param  file: pointer to the source file name: u5 @# E/ e8 o/ {
  200.   * @param  line: assert_param error line source number; x3 M" P2 W9 K! a6 P& G2 ]
  201.   * @retval None
    6 \: n/ m+ z9 _" o
  202.   */; C8 z3 i5 Y7 L: y3 d5 o, W
  203. void assert_failed(uint8_t *file, uint32_t line), u% Z& K2 ~6 A5 f
  204. {% b0 i4 y. `" B
  205.   /* USER CODE BEGIN 6 */7 {: H  w4 P8 m2 u/ V/ w
  206.   /* User can add his own implementation to report the file name and line number,
    " n7 W1 l' V! m( |6 F
  207.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */" E2 R  X& ^+ C* I
  208.   /* USER CODE END 6 */. q3 S9 ^* B3 c
  209. }) V4 P- Z9 u. A* |, n: }* L: T6 n
  210. #endif /* USE_FULL_ASSERT */! \) \- o2 W/ Z# U$ q
  211. ) |  {/ L* F/ m
  212. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
    $ `3 u, o" a5 T( q

  213. 5 i, c" q4 P4 q
复制代码
/ K  R" N0 W5 X6 o& ?$ q6 d
4.演示效果
) S; W- P: L0 A) S3 Z5 y* U/ ~
7 U5 A# B' E$ z3 Z( } 3a8764baa28f4c74830ffb102a9d76a4.gif
/ H; r6 i- e: V% o- R7 Z, C' e" ?" E% {0 V
————————————————4 D! B: y9 u+ ^' A9 K
版权声明:火花页.
8 t5 O$ [3 Q/ i* V3 X
6 L: h' O. E$ O7 a
赞 收藏 评论0 发布时间:2023-3-1 20:42

举报

0个回答

所属标签

相似技术帖

官网相关资源

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