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

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

【NUCLEO-U083RC评测】⑥RTC

[复制链接]
小萝卜啦啦啦 发布时间:2024-5-24 00:09
今天来玩一下STM32U0RTC,后续想用U0做一个电子墨水屏的日历,正好要用到RTC,今天就先来摸一摸RTC是怎么玩的
: e3 i* a0 a6 `8 A! W+ }& C+ ?0 T7 q4 I
工程还是使用之前的模板工程
" F" ^8 f. {* s9 @' [, s" w9 J
一、cube配置
开启RTC,把时钟源和日历都激活
1.jpg + J$ V3 J% I& R6 q# R/ q3 f8 T2 Y; ^
下面配置的参数基本上可以保持默认。这里面主要会改的参数是
2.jpg 1 F, F$ E+ x- E
其他参数保持默认即可
我这边年月日时分秒周几就偷个懒直接用默认的,待会儿我会尝试调用set函数改变其值,因为在实际使用时RTC都要用户自己去设置一下时间才正确
然后把时钟改一下,这个工程之前没有启动外部低速晶振,用的是内部RC产生的LSI,为了RTC更准一点,我要把外部32.768K晶振用起来。然后这边选择RTC Only的这个,因为我没有其他东西要用外部低速晶振,选这个可以在休眠时功耗更低
3.jpg
: F: Q) @+ N! e+ Z( Z
+ J, i3 X$ G7 R, d+ @$ M
4.jpg
4 b: [) }- V' [/ V; ?
最后生成代码(截图略)
二、代码修改
先来写一个获取RTC信息并打印的函数
  1. void print_rtc_data()
    3 p. ]5 f- P* a& c4 ?1 N
  2. {
    8 N1 f7 z) m/ G/ D
  3.   RTC_DateTypeDef sdatestructureget;
    " O3 \2 X9 d  |
  4.   RTC_TimeTypeDef stimestructureget;
    * p# ~5 U& i! ~

  5. / l# U5 a; ~; r* K# I, ^1 e
  6.   HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);+ X4 l. s1 A3 ^$ o$ t# j; k
  7.   HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);9 H2 T; [' y* L/ `
  8.   printf("Date:%02d-%02d-%02d WeekDay:%02d Time:%02d:%02d:%02d \r\n", 9 C5 T' o9 S* m$ l4 P) h0 `
  9.     2000 + sdatestructureget.Year,! k* C- c1 U* Z' Q8 c# g: a: t' R
  10.     sdatestructureget.Month,8 N: Y+ }( w$ F* P- N" x
  11.     sdatestructureget.Date,4 z) c! p' h  K& @6 j' F
  12.     sdatestructureget.WeekDay,
    / u1 `6 }- Q6 ~" L1 R, T
  13.     stimestructureget.Hours,
    6 k" r0 n. [. f: [0 o& h3 R
  14.     stimestructureget.Minutes,! ?$ \& A6 ]# s
  15.     stimestructureget.Seconds, _" c" @7 |& m2 w9 @
  16.     );
    4 h9 r7 K8 F( x& r
  17. }
复制代码
5.jpg
$ g% l% D, M$ i1 Q7 Y
这边需要注意的是,HAL_RTC_GetTime和HAL_RTC_GetDate都要调用,不能只调用其中一个,如果只调用其中一个,那么后续再次调用get时间也不会更新,会一直获取到和第一次一样的数据
7 B( [8 P. C; n2 Q$ w
把这个函数放到while1中,然后再加个delay,避免一直疯狂打印
  1.     print_rtc_data();# @3 o# y: o% c
  2.     HAL_Delay(1000);2 ^. f9 ?* ~$ b- e1 G
复制代码
6.jpg
2 e  O: M, ?# v) S
然后编译下载,效果如下
7.jpg
7 l" ?  f5 y1 t

5 d* Q, p+ h4 G7 @# Z
然后我们来试一下重新设置年月日、时分秒、周几参数
写一个设置的函数
  1. void set_rtc_data()
    4 ?2 O. i) t. E1 B# g' L$ T: `
  2. {9 t+ k# Q( V1 }! g1 o' n
  3.   RTC_TimeTypeDef sTime = {0};- E* \4 J7 O: O1 u8 ]" V4 {
  4.   RTC_DateTypeDef sDate = {0};
    0 l( v/ u# y" ?7 o  s
  5. . K' b4 ^: A0 h; g1 {% b+ j

  6. 5 y6 n) h% _2 q& O1 R
  7.   sTime.Hours = 21; /* 21点 */
    1 t- J7 n* s' D! d) c5 K
  8.   sTime.Minutes = 30; /* 30分 */
    , M8 b  G, S0 R2 p; U
  9.   sTime.Seconds = 10; /* 10秒 */
    5 }  |' d% A7 ^
  10.   sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE; /* 和初始化时的值保持一致 */
    / k, e) [3 e2 R0 c
  11.   sTime.StoreOperation = RTC_STOREOPERATION_RESET;  /* 和初始化时的值保持一致 */9 U# o1 U; p6 D! d/ ^
  12.   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)9 Y2 e; Q( D1 z+ b& `: T& n- Y
  13.   {) z7 B6 M; V/ ~# b0 B) e/ o3 N
  14.     Error_Handler();
    1 t3 B# Z: v# L( t2 t, L8 G% [" t# r- }
  15.   }# I- W, v* y% Y  }8 n- F/ W) W
  16.   sDate.WeekDay = RTC_WEEKDAY_THURSDAY; /* 周四 */$ ^2 P/ F' [/ c; F
  17.   sDate.Month = RTC_MONTH_MAY;  /* 5月 */  T( q( d0 s% Y% l5 R
  18.   sDate.Date = 23; /* 23日 */  c1 J! V8 g4 `& N7 y) a! T2 b2 J
  19.   sDate.Year = 24;  /* 24年 */
    9 i9 v3 a1 D6 s" [0 X
  20. 6 Y$ N4 @7 D9 @4 t' X* `  e1 ?
  21.   if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)2 \0 \: C1 m6 V5 ^- E; C; V7 N
  22.   {' A5 c: y& G6 Z$ C  Y6 I! V
  23.     Error_Handler();! K+ @3 C' L0 H6 @- A6 V8 k/ w4 n
  24.   }+ `* ?0 i+ m: ~, T5 i
  25. }
复制代码
8.jpg
( j: O; ~! l5 s! s$ u1 \1 Y$ n
然后在while1中把它用一下,我上电后会让默认的RTC值连续打印10次,然后改变RTC的值,之后继续打印RTC的值
  1.   uint8_t cnt = 0;6 `1 o+ Z* [/ ]- |1 ]; V
  2.   uint8_t flag = 0;
    1 f) E# w. U2 Z
复制代码
9.jpg 8 ~. |: b9 ^$ C( @
  1.     if (flag == 0)! d5 r3 ^( c# {  k
  2.     {
    / \$ S: ~3 z8 A, k( f
  3.       if (cnt == 10)
    2 [# ^4 l3 B7 R1 Q
  4.       {( ^9 S/ k! e% `, ^3 _4 f
  5.         set_rtc_data();4 X+ q/ V) k+ [( i
  6.         flag = 1;1 R! U  b, d9 }6 i
  7.       }4 w3 J; n5 z7 X6 q* ]4 `# O
  8.       else
    ) s2 F) b2 Q/ e" @# k+ L1 |
  9.       {
    ( ~7 S2 o8 T4 P  {! V, V
  10.         cnt++;, s! Y2 d* l2 F* N
  11.       }# h; c+ a  Z- X0 G
  12.     }
复制代码
10.jpg 8 g  \( H$ `7 [2 r" S
然后下载,运行结果如图
11.jpg
) r3 m" c; W! m0 f% b. v2 T

  o% \( f7 A% K- ^( i  {( Q
本次测试的工程: 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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版