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

基于STM32G431的RTC电子时钟

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

7 w( w" i7 H; G- r5 {. i$ L5 X
实现图1所示效果的主程序为:
  1. int main(void)! p5 n9 m+ I' @5 s( S
  2. {5 |+ y" `0 w3 z0 N
  3. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    4 u% K9 U. R/ t7 ]! t& Y
  4. HAL_Init();
    # f5 e6 `, P) W
  5. /* Configure the system clock */
    9 d6 ]: H2 ~, [/ \8 J
  6. SystemClock_Config();" T8 S) K; J: V, S; ~
  7. GPIO_OLED_INIT();) U% n, i& m" q$ F+ G( e- t
  8. OLED_Init();
    , x8 e4 n, s2 }' O0 n0 ?( ^
  9. OLED_Clear();% V" h* }2 ~' q" R7 r0 q7 t  Z
  10. OLED_ShowString(18,0,"STM32G431",16);
    5 H5 `2 L/ [  p* E, A5 {
  11. OLED_ShowString(10,2,"OLED & RTC",16);
    . o& {9 k; I2 f9 t" E
  12. /* Initialize all configured peripherals */8 ~/ G1 e2 u, Z+ f1 C9 u
  13. MX_RTC_Init();
    4 ]/ q) u1 y( L  O, k
  14. RTCStatus = 1;
    1 O9 J  U& ~) W* t! c3 L& p5 ?
  15. while (1)! B/ s, F7 g4 L' p" N+ q: d1 ]7 [
  16. {( J3 M3 s+ y  G8 r% |# e
  17. /* Display the updated Time and Date */
    $ b6 H8 U9 f/ q3 z! K; H6 m
  18. RTC_CalendarShow(aShowTime, aShowDate);
    6 D3 l* N/ P$ e6 v! z, Z
  19. Delay(200);
    9 k( B/ n2 S, @: ]
  20. }- y* m+ ?1 u8 U) m$ j( @
  21. }
复制代码
1.jpg
                              
图1  RTC电子时钟

, c7 j0 I- `6 g) U# y
实现RTC显示的函数为:
  1. static void RTC_CalendarShow(uint8_t *showtime, uint8_t *showdate)7 t: c0 [! f, |
  2. {2 g: J% A+ h; q4 z3 ^" i7 f. O2 `
  3. RTC_DateTypeDef sdatestructureget;
    8 ~" K6 u* T2 N* U# G
  4. RTC_TimeTypeDef stimestructureget;
    - I2 D" s, P* g1 p& \
  5. /* Get the RTC current Time */
    . v2 [/ p( {$ o! y! P
  6. HAL_RTC_GetTime(&hrtc, &stimestructureget, RTC_FORMAT_BIN);( Q6 u# P% }0 L. |2 \
  7. /* Get the RTC current Date */
    " r, x/ x% Y/ Y
  8. HAL_RTC_GetDate(&hrtc, &sdatestructureget, RTC_FORMAT_BIN);8 g9 M  K% e" m
  9. /* Display time Format : hh:mm:ss */: K& y: N$ g: |2 h
  10. sprintf((char *)showtime, "%2d:%2d:%2d", stimestructureget.Hours, stimestructureget.Minutes, stimestructureget.Seconds);
      v" O  J7 b1 t2 R2 K) p0 L) `2 P3 ?8 f
  11. OLED_ShowString(26,6,showtime,16);
    " W# Z+ y1 k  E& t  Y% l4 k
  12. /* Display date Format : mm-dd-yy */
    . |/ ]4 V/ v1 @8 ]3 `1 _! ]% Y
  13. sprintf((char *)showdate, "%2d-%2d-%2d", 2000 + sdatestructureget.Year,sdatestructureget.Month, sdatestructureget.Date);+ k  n- e; w- `9 [; {
  14. OLED_ShowString(10,4,showdate,16);
    0 n7 A& K! U9 K+ K3 h
  15. }
复制代码
* O. M; l  g( Y. \) z0 O8 u
调用的字符串显示函数为:
  1. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    & B" v- [" u% Y
  2. {# n9 m7 U' O0 v! m
  3.     unsigned char j=0;2 K6 i+ H5 ?! K
  4.     while (chr[j]!='\0')
      `4 H; y* p' z5 U! o- p* O  M
  5.     {       OLED_ShowChar(x,y,chr[j],Char_Size);
    5 B' B' K* `1 T/ r* A
  6.             x+=8;' }) Z4 j: p3 a& [
  7.             if(x>120){x=0;y+=2;}, _& b+ _; ~! [6 D2 p
  8.             j++;
    + I! G9 x" U( b3 F
  9.     }
    9 H% P) ^/ H$ m
  10. }
复制代码

) d& F3 a. y3 @. z
由于例程所设置的初始时间是2018年,故需要在函数 MX_RTC_Init()中进行修改,修改后的运行效果如图2所示。
2.jpg
8 b; t2 l: E( M2 b4 d1 [* t9 t! y: X! r. H
图2  校时后的显示效果
' y: |4 G  p2 W9 p  F) q' ]
赞 收藏 评论5 发布时间:2020-12-11 11:04

举报

5个回答
网络孤客 回答时间:2020-12-11 12:03:37
看看时间准吗。1 k, ?' T  C/ C0 [
有空我也玩玩。
jinglixixi 回答时间:2020-12-11 12:52:27
ldptest 发表于 2020-12-11 12:03
8 T6 j% {, X1 _看看时间准吗。2 [' \0 {$ c/ f0 ]6 y
有空我也玩玩。

# t/ z: p3 Q# @计时尚可,长时间的误差可能会明显点儿。
Kevin_G 回答时间:2020-12-13 10:17:35
楼主,上源码
radio2radio 回答时间:2020-12-13 14:38:10
楼主,G431的RTC,有没有自动万年历功能?+ N+ W' h! j. T! v
就是11月31日会不会自动进入12月1日,还有闰年修正等。0 g6 `" R( Z5 `( @8 R' q
jinglixixi 回答时间:2020-12-13 18:20:38
radio2radio 发表于 2020-12-13 14:38
+ V" S9 j% O) B- s$ H. N' R楼主,G431的RTC,有没有自动万年历功能?9 G/ ^% c9 e& b5 G  X! n. l
就是11月31日会不会自动进入12月1日,还有闰年修正等。& i# v6 n1 V9 A4 E$ h
...

4 M6 {" d, O" @' Q! t我给你测了下,两者都没有问题。

所属标签

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