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

基于STM32G431的RTC电子时钟

[复制链接]
jinglixixi 发布时间:2020-12-11 11:04
STM32G431内部配置有RTC计时器,将它与OLED屏配合即可实现一个电子时钟。

: f: M3 Q# {, E. m; p6 R3 N
实现图1所示效果的主程序为:
  1. int main(void)" L; n# f; K7 J+ j( s
  2. {
    8 y& Q; e/ _7 F9 p
  3. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    $ O" s; A* Z9 H+ G  A
  4. HAL_Init();
      }2 W( I5 M! q5 R/ t. D1 q. u& s
  5. /* Configure the system clock */
    1 L' {/ N) V4 a5 r
  6. SystemClock_Config();
    - \. L4 t8 l" X( H' e
  7. GPIO_OLED_INIT();
    ) ^0 R% r, Z9 a0 m
  8. OLED_Init();
    - M% i. p/ J; @" A# r
  9. OLED_Clear();
    ( q+ t- \! @9 y* M9 T/ T! l
  10. OLED_ShowString(18,0,"STM32G431",16);/ z+ N' U: B1 k7 }
  11. OLED_ShowString(10,2,"OLED & RTC",16);
    $ U1 i0 P5 l- c3 f: _* W
  12. /* Initialize all configured peripherals */
    # g. U" `- B/ u2 a9 _( I! ^1 p; I
  13. MX_RTC_Init();
    ! E1 J) D& D& m" l0 y
  14. RTCStatus = 1;
    # z, v5 l4 F7 x5 N
  15. while (1)( U* w9 ]- K; h/ L2 b
  16. {
    & O+ A. _1 L4 o0 B" y9 r3 t5 S
  17. /* Display the updated Time and Date */
    : ?2 n5 d/ j( D) R" F1 H  X
  18. RTC_CalendarShow(aShowTime, aShowDate);
    3 i- @. r' F" G! D
  19. Delay(200);- b2 |5 B* l* e: J
  20. }
    : |8 Y* T0 R$ O
  21. }
复制代码
1.jpg
                              
1  RTC电子时钟

6 |& w7 H6 O+ z+ _% N# o# V
实现RTC显示的函数为:
  1. static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)
    / B1 G8 V; E2 S" F  o9 i, A
  2. {* O9 y# q8 N! s% _" R% o
  3. RTC_DateTypeDef sdatestructureget;
    7 s& H! ^. M( O  ]- ]$ j  g' j' v1 ^
  4. RTC_TimeTypeDef stimestructureget;; p6 e; R" R- R7 k
  5. /* Get the RTC current Time */
    9 E2 `2 d' N) x; k
  6. HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);2 K% @! }) W, i
  7. /* Get the RTC current Date */5 E3 O6 S% F0 g. A
  8. HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
    $ r  M) u0 g5 {  m- H8 U% r+ S  X
  9. /* Display time Format : hh:mm:ss */" Z+ d& |8 m/ }7 ^& d6 u* T% R  y
  10. sprintf((char *)showtime, "%2d:%2d:%2d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
    # U/ b, U: F  z3 A+ U8 u! Y
  11. OLED_ShowString(26,6,showtime,16);9 H! y7 U* }; p6 j1 |2 o' z
  12. /* Display date Format : mm-dd-yy */8 q7 d: X$ S6 z4 o- \
  13. sprintf((char *)showdate, "%2d-%2d-%2d", 2000 + sdatestructureget.Year,sdatestructureget.Month, sdatestructureget.Date);' f1 @& r; {% P" c/ |
  14. OLED_ShowString(10,4,showdate,16);6 V2 c& w2 N) q. l3 m
  15. }
复制代码
8 G  D* U2 N" }( S7 |8 _4 E6 L1 s
调用的字符串显示函数为:
  1. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)1 E) g& T  E- _" B) F
  2. {( O8 p- ]$ z* b$ w% S
  3.     unsigned char j=0;
    ( U/ t, y& r8 v% H) u. T/ j% i1 B
  4.     while (chr[j]!='\0')
    ) w5 q$ W+ @0 k2 n- h+ |
  5.     {       OLED_ShowChar(x,y,chr[j],Char_Size);  U5 q$ G" @9 b- k: I# r$ k$ h
  6.             x+=8;$ q  D+ f2 [" g$ M: Z8 ?
  7.             if(x>120){x=0;y+=2;}
    6 ?9 }% ]. e& g& f9 h6 R0 t; }
  8.             j++;& `! X8 I; d  j" I  A
  9.     }! b; j  H; P: e8 h1 H. |8 Z
  10. }
复制代码
' `' e! z' y* D0 w( W' _4 h
由于例程所设置的初始时间是2018年,故需要在函数 MX_RTC_Init()中进行修改,修改后的运行效果如图2所示。
2.jpg

# f5 z. R* q  C" O, P6 n# O
2  校时后的显示效果
5 k6 Z: `( v! u9 Q9 d, t7 V
收藏 评论5 发布时间:2020-12-11 11:04

举报

5个回答
网络孤客 回答时间:2020-12-11 12:03:37
看看时间准吗。
* T" b; k/ K7 e' f有空我也玩玩。
jinglixixi 回答时间:2020-12-11 12:52:27
ldptest 发表于 2020-12-11 12:03& K" x; b% x! i
看看时间准吗。
& `" m. o' `- [2 e, X! F& T有空我也玩玩。
4 h3 y5 E& r% Q
计时尚可,长时间的误差可能会明显点儿。
Kevin_G 回答时间:2020-12-13 10:17:35
楼主,上源码
radio2radio 回答时间:2020-12-13 14:38:10
楼主,G431的RTC,有没有自动万年历功能?( @! X1 J( {3 y% k. V6 c
就是11月31日会不会自动进入12月1日,还有闰年修正等。0 Y) |; w- M, Z. u
jinglixixi 回答时间:2020-12-13 18:20:38
radio2radio 发表于 2020-12-13 14:38
- H1 S6 J- X- g- \9 q4 Q% x; l楼主,G431的RTC,有没有自动万年历功能?
0 Z5 D5 d2 b2 `& [# F8 P" `- A' p就是11月31日会不会自动进入12月1日,还有闰年修正等。# J( x# N( i1 N+ E3 s+ A; s
...
& o, b6 C& O3 f3 F/ w
我给你测了下,两者都没有问题。

所属标签

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