请选择 进入手机版 | 继续访问电脑版

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

【NUCLEO-U083RC评测】⑥RTC

[复制链接]
小萝卜啦啦啦 发布时间:2024-5-24 00:09
今天来玩一下STM32U0RTC,后续想用U0做一个电子墨水屏的日历,正好要用到RTC,今天就先来摸一摸RTC是怎么玩的
% }4 `1 s( q& k& m0 q( z/ Z+ C
工程还是使用之前的模板工程
" ^+ [, x/ K# E% R
一、cube配置
开启RTC,把时钟源和日历都激活
1.jpg
' K* c! X8 E$ @6 Y
下面配置的参数基本上可以保持默认。这里面主要会改的参数是
2.jpg
4 w+ J3 ]" u( U/ ^
其他参数保持默认即可
我这边年月日时分秒周几就偷个懒直接用默认的,待会儿我会尝试调用set函数改变其值,因为在实际使用时RTC都要用户自己去设置一下时间才正确
然后把时钟改一下,这个工程之前没有启动外部低速晶振,用的是内部RC产生的LSI,为了RTC更准一点,我要把外部32.768K晶振用起来。然后这边选择RTC Only的这个,因为我没有其他东西要用外部低速晶振,选这个可以在休眠时功耗更低
3.jpg , h5 @9 c) U5 f, R8 \1 S

5 n. f, |) @4 x( \2 A2 _# ?4 O
4.jpg
6 a* l/ ]  V+ b% e; f; Y  l
最后生成代码(截图略)
二、代码修改
先来写一个获取RTC信息并打印的函数
  1. void print_rtc_data()  ]' O& ^* m9 |. N' ~/ r# F
  2. {
      d) Z, `' T+ z$ d$ ~  b# B
  3.   RTC_DateTypeDef sdatestructureget;
    * ]  x* D2 d, }0 q1 _) w
  4.   RTC_TimeTypeDef stimestructureget;
    5 E) @; J2 a1 v0 k
  5. 3 m0 c  B5 t9 a! s' O
  6.   HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);7 m. d" B1 {; f$ W9 Y. B
  7.   HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
    4 L: s7 p$ _8 v( g5 J: x8 P4 [( g
  8.   printf("Date:%02d-%02d-%02d WeekDay:%02d Time:%02d:%02d:%02d \r\n", 6 _( ?7 c# A0 k. z5 h, ^4 P
  9.     2000 + sdatestructureget.Year,; H1 d2 w0 n: f( F* ?* k) M6 h& Q2 }
  10.     sdatestructureget.Month,$ |8 b) @) Y! u0 i( ^
  11.     sdatestructureget.Date,% n# o. v! G( d6 [9 f) \: D
  12.     sdatestructureget.WeekDay,+ {1 ]% ?1 v+ B2 q1 |
  13.     stimestructureget.Hours,
    5 M& U; K/ W. A1 v
  14.     stimestructureget.Minutes,
    , |2 q9 W3 g$ C' }% P. Q3 j, q. R0 j
  15.     stimestructureget.Seconds5 d* G3 t7 g2 o# G
  16.     );8 V3 Z4 _. t4 b5 V. ~" R
  17. }
复制代码
5.jpg
8 p0 h$ {5 Y0 v4 U& P- r2 q' K0 O; u
这边需要注意的是,HAL_RTC_GetTime和HAL_RTC_GetDate都要调用,不能只调用其中一个,如果只调用其中一个,那么后续再次调用get时间也不会更新,会一直获取到和第一次一样的数据
. ^1 l+ k0 E& ~/ o, j8 E7 T
把这个函数放到while1中,然后再加个delay,避免一直疯狂打印
  1.     print_rtc_data();7 F- d: Q! v( f
  2.     HAL_Delay(1000);' T& [9 j  ~. t; W6 D3 G1 t, n+ X5 d
复制代码
6.jpg + q* f1 u6 R! H6 w3 O$ A
然后编译下载,效果如下
7.jpg
0 Z; J) A' V1 W% e

1 T/ i0 x: A  r
然后我们来试一下重新设置年月日、时分秒、周几参数
写一个设置的函数
  1. void set_rtc_data()
    ; b3 a" B8 u* R
  2. {
    - J5 w: f  t1 y0 n$ [
  3.   RTC_TimeTypeDef sTime = {0};
    & T( G0 m3 W1 z8 U; t2 h9 o( p" ^& h
  4.   RTC_DateTypeDef sDate = {0};
    , Z" v# |$ h1 n7 d: w$ v" \

  5. 7 r- ^" ?2 d8 w  J2 _. S
  6. / p! y# H; T4 ^+ O) s4 _' e) {
  7.   sTime.Hours = 21; /* 21点 */
    * o4 s2 G9 h/ d1 R- i8 n9 ^& T1 u3 j
  8.   sTime.Minutes = 30; /* 30分 */' l; x0 l: k1 H* \
  9.   sTime.Seconds = 10; /* 10秒 */1 ^( m) T1 `& x- M+ d
  10.   sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; /* 和初始化时的值保持一致 */; G1 c  P0 x- P$ x8 U
  11.   sTime.StoreOperation = RTC_STOREOPERATION_RESET;  /* 和初始化时的值保持一致 */  ~& X7 g6 T6 r7 ?+ P! y  [
  12.   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
    ; N( A6 H) S  U3 f; F% X
  13.   {1 p  `; Y  C! `; Z' r& ]
  14.     Error_Handler();
    + E. G' a$ Z$ Y; x- l; {" x- V
  15.   }* m0 z1 m/ ^! w; q/ a8 V
  16.   sDate.WeekDay = RTC_WEEKDAY_THURSDAY; /* 周四 */
    % V7 B7 P5 X/ P- v
  17.   sDate.Month = RTC_MONTH_MAY;  /* 5月 */
    * G6 Q$ S5 G# f+ f5 W
  18.   sDate.Date = 23; /* 23日 */3 s' G2 h# [; v! n
  19.   sDate.Year = 24;  /* 24年 */$ H, e: x) ]2 B, h6 C

  20. & m3 e- k8 Y8 E6 y+ _9 z9 G
  21.   if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)8 ?; b) E) b) `/ L
  22.   {
    4 L) A; U0 t8 r
  23.     Error_Handler();, B/ L' S7 }" C1 ]! i
  24.   }
    * N6 d7 j0 c4 ^9 z$ Q- p
  25. }
复制代码
8.jpg 7 V! u$ D" G1 z
然后在while1中把它用一下,我上电后会让默认的RTC值连续打印10次,然后改变RTC的值,之后继续打印RTC的值
  1.   uint8_t cnt = 0;2 \& E- T3 G5 ]: D1 K8 @( O1 u$ [9 O
  2.   uint8_t flag = 0;
    # ~5 W! J$ G5 x: U! }! N% n# W7 f
复制代码
9.jpg % J5 \9 }! Z& d$ K; l
  1.     if (flag == 0)! u- M$ l1 W+ R2 @4 Y
  2.     {" q( c7 [0 `5 g3 i  ^4 C0 A
  3.       if (cnt == 10)$ G9 f/ d! ^) ^/ h2 f- D  \
  4.       {0 Q8 O7 T# V" d' X/ @
  5.         set_rtc_data();" q! `* T% z0 B, d% o& }. t
  6.         flag = 1;2 _  v. B+ c. ]% N. q; o
  7.       }- {* t0 G( T* u! {7 T
  8.       else
    + c; G8 f+ `. X6 ?" x& ^
  9.       {; H5 y, u( y5 V* C/ ?; c# O
  10.         cnt++;8 [- }' d5 m5 M* n! I( h
  11.       }8 M/ V( ?5 ~4 k8 d4 q
  12.     }
复制代码
10.jpg
/ X+ c8 w. F5 Z1 e9 ~
然后下载,运行结果如图
11.jpg
# x- Y/ r! N  V( P9 Q8 f' v: Z3 {

, D" N& K" W3 W3 X) A6 w5 d% B0 F' a
本次测试的工程: STM32U0_RTC_test.rar (5.18 MB, 下载次数: 0)
3.jpg

STM32U0_RTC_test.rar

下载

5.18 MB, 下载次数: 3

收藏 评论0 发布时间:2024-5-24 00:09

举报

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