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

基于STM32G431的RTC电子时钟

[复制链接]
jinglixixi 发布时间:2020-12-11 11:04
在STM32G431内部配置有RTC计时器,将它与OLED屏配合即可实现一个电子时钟。
9 U% i5 N; Z$ _
实现图1所示效果的主程序为:
  1. int main(void)3 I3 J( L1 ?/ z9 d. P
  2. {: p( c8 ]- |) D6 p- T! y' m) c
  3. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    " V4 z' g' Q+ k  h# A$ w
  4. HAL_Init();
    5 S$ I  X: i: c) {5 R. c
  5. /* Configure the system clock */
    $ Z, [. {: H, ?3 z* j* {) P
  6. SystemClock_Config();, d# j- T9 e- n3 y$ z, Y( j
  7. GPIO_OLED_INIT();* l; J! c+ |% ?" R. W
  8. OLED_Init();( u# N/ d# W' h
  9. OLED_Clear();
    : Q/ k5 U' d7 p" G
  10. OLED_ShowString(18,0,"STM32G431",16);: Q' P  J4 Q' E5 s$ L5 d
  11. OLED_ShowString(10,2,"OLED & RTC",16);, u& G# ~0 z" ~0 ~6 y8 {
  12. /* Initialize all configured peripherals */
    ( s2 j5 h% D+ _: b' r2 t, v9 \9 n2 K
  13. MX_RTC_Init();
    & a$ @" m. h3 I: m6 i1 l- ~5 T
  14. RTCStatus = 1;
    ! {8 t( a) A, ]' y3 }
  15. while (1)
    $ M2 o, k  N: J: O2 Z
  16. {
    ; ^, n' a- e" \8 q$ d
  17. /* Display the updated Time and Date */4 }- x! d% C, n& `7 g
  18. RTC_CalendarShow(aShowTime, aShowDate);
    . o5 O/ S% U0 C/ G5 f! Y6 B2 U$ ?; X
  19. Delay(200);
    % [$ \& s8 j' P+ U4 v& C* P5 ]
  20. }
    8 I& a' K4 h5 X/ A. R+ I, R
  21. }
复制代码
1.jpg
                              
图1  RTC电子时钟

7 ?  n3 V0 J% {0 D( H2 L$ H6 ?
实现RTC显示的函数为:
  1. static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)& N: t' z9 W: r" ?
  2. {% a% w5 u& Z3 @7 k( M' X# u
  3. RTC_DateTypeDef sdatestructureget;
    5 u$ u& H) R8 I# A
  4. RTC_TimeTypeDef stimestructureget;5 n5 Q% {/ r" s1 `/ _3 K5 i
  5. /* Get the RTC current Time */
    ! \+ R! u* x! m" |
  6. HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);7 f: l" D6 Y9 U5 g! ]
  7. /* Get the RTC current Date */& J8 k; A4 ^; d/ R: \8 U7 J
  8. HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);
    . P7 d+ l9 E/ K& u, q
  9. /* Display time Format : hh:mm:ss */
      o: m& k, s/ M3 ~3 P) v0 S
  10. sprintf((char *)showtime, "%2d:%2d:%2d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
    9 [. Z* q: C1 ]9 x; h5 b! L
  11. OLED_ShowString(26,6,showtime,16);5 `9 p' V( `! X! Q
  12. /* Display date Format : mm-dd-yy */
    ; Y8 `7 s& q- [$ f
  13. sprintf((char *)showdate, "%2d-%2d-%2d", 2000 + sdatestructureget.Year,sdatestructureget.Month, sdatestructureget.Date);7 I! K. [5 R& r! x
  14. OLED_ShowString(10,4,showdate,16);
    , G8 B# \2 \) j7 D1 v5 M
  15. }
复制代码

! R* R7 N* R! }7 H6 _7 v: b
调用的字符串显示函数为:
  1. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    & p9 c: s. a( N. A: H( T4 U; S
  2. {" ~  m" @$ k# ]" ~5 l+ I
  3.     unsigned char j=0;
    + A2 s0 W9 k* I# U8 r8 B4 W  t
  4.     while (chr[j]!='\0')7 w# x( }: ]* ?1 X8 B% e+ \1 y
  5.     {       OLED_ShowChar(x,y,chr[j],Char_Size);
    2 q' ]8 O8 v" c4 A. K
  6.             x+=8;
    3 s7 j$ H! h6 \( L  H" L
  7.             if(x>120){x=0;y+=2;}. ]& Q  y3 H- u% v8 J
  8.             j++;
    ' y2 O8 Y$ Q8 [: e
  9.     }2 B) \) o4 @7 ~- A
  10. }
复制代码

( p) T3 H! P, m
由于例程所设置的初始时间是2018年,故需要在函数 MX_RTC_Init()中进行修改,修改后的运行效果如图2所示。
2.jpg

3 g. p- B2 J9 E( O7 [, e& A& p
图2  校时后的显示效果
9 M1 t# b& g8 C' s" a" L+ z
赞 收藏 评论5 发布时间:2020-12-11 11:04

举报

5个回答
网络孤客 回答时间:2020-12-11 12:03:37
看看时间准吗。
; a6 L  c, Z" o4 c/ M2 A/ {. O有空我也玩玩。
jinglixixi 回答时间:2020-12-11 12:52:27
ldptest 发表于 2020-12-11 12:03& W) h  P% ~9 n; o" `' }
看看时间准吗。
9 {  t8 L/ N9 `6 }& R  a. z有空我也玩玩。
3 |' g7 E' B  v1 a' e& P2 Y- O4 z
计时尚可,长时间的误差可能会明显点儿。
Kevin_G 回答时间:2020-12-13 10:17:35
楼主,上源码
radio2radio 回答时间:2020-12-13 14:38:10
楼主,G431的RTC,有没有自动万年历功能?
+ n+ q: i! a# ^! i& i+ O' C' R& \6 j就是11月31日会不会自动进入12月1日,还有闰年修正等。
4 }' \2 @5 w1 M6 v( w
jinglixixi 回答时间:2020-12-13 18:20:38
radio2radio 发表于 2020-12-13 14:38
8 b1 P6 m+ f$ z9 I% o楼主,G431的RTC,有没有自动万年历功能?
- z5 |7 m- w4 [- L1 z( V# V就是11月31日会不会自动进入12月1日,还有闰年修正等。
# W% G4 W# k$ u. n ...

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