找回密码
 注册
关于网站域名变更的通知
查看: 167|回复: 2
打印 上一主题 下一主题

ERTC实时时钟--AT_SURF案例

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-1 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
ERTC实时时钟--AT_SURF案例No.5. R/ s6 a8 V1 X7 B2 \! O

8 p& V2 w: ^5 d2 V, m8 b0 H/ D, c4 q2 Q
简介0 ?3 L3 L" Z$ x) m
AT32实时时钟(ERTC)是一个BCD计数器,内部完整的实现了日历计数逻辑,ERTC计数逻辑位于电池供电域,只要电池供电域有电,ERTC便会一直运行,不受系统复位以及VDD掉电影响。  j& A' k7 {7 m8 q  q, x% c
ERTC主要具有以下功能:7 N( \; }2 X( q
―        日历功能:年、月、日、时、分、秒
8 F( c: f& X9 {) C―        闹钟功能:闹钟A、闹钟B$ n, a3 z/ s( i; R$ W
―        周期性唤醒功能
; v' v1 `3 L" l/ q0 d& G' M―        入侵检测功能
8 m) r* a: n' d# C  O―        校准功能:精密校准、粗略校准) z/ d! `' W2 u7 ]
该例程展示了如何使用ERTC实现日历功能,并通过LCD屏将日历显示出来。
) T6 \: w+ ^& q  U2 n7 t
5 W, ^( o/ s4 L2 k( g资源准备
; |6 ~0 J; Z" M" U( y: E8 T" A1 r& ~硬件环境:
6 H8 U$ u3 {+ H3 W+ ]0 d对应产品型号的AT-SURF-F437 Board- e/ s5 v4 o( r; t
软件环境:/ A  k+ P1 a5 N& g: I. C
AT32F435_437_Firmware_Library_v2.x.xprojectat_sufr_f437examplescalendar. c# |% w  m# a! e" I- _: V

, i" X$ T2 u( [4 s. m! Z& [硬件设计$ G5 n# L" b) p$ ^+ f3 L/ G
本案例使用的硬件资源有外部32768Hz晶振、电池,对应的引脚如下:
% E: {' _6 k; w+ W2 O表6. 硬件资源使用/ m: X$ J  m- p7 i- C# O4 l! w
' r+ l3 h9 n* E0 ?

7 r# `! n( B  I- Z0 Y, A! T
% Q$ `! W* a, C2 ?7 w对应的电路原理如下:
; t& f+ S& h- n# ]图11. 外部低速晶振电路原理图
& ], ?9 S5 k" n" g+ H' ^# d* t- `2 j3 g5 X

1 m9 X9 x9 Q5 V图12. 电池供电电路原理图
( u1 t& ?7 T$ L; s+ S1 f  i2 B: z4 E6 J+ |

, M* ]7 ]; A' K/ q0 V3 a, S软件设计
* X* \% s+ t: b5 _1)        日历测试$ `+ I% f7 r+ I8 ~- D! o
初始化ERTC& F7 i) F! O  L( r8 t3 @  O/ F! x
将日历显示在LCD屏上/ v2 P/ o" p- T6 l* O
2)        代码介绍
$ L* q: }4 a' @; ^2 v# E- Fmain函数代码描述+ d+ S/ {- P8 y0 J! j  T' Q) A& a
1 `1 W+ d, f  ^7 S' Z. t; R6 y

4 K# k' v1 R+ T8 h; i
  G2 H' v0 R5 w7 R$ e
  • int main(void)
  • {
  • uint8_t temp = 0;
  • ertc_time_type time;
  • /* 初始化系统时钟 */
  • system_clock_config();
  • /* 初始化中断优先级分组 */
  • nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
  • /* 初始化延时函数 */
  • delay_init();
  • /* 初始化LCD */
  • lcd_init(LCD_display_VERTICAL);
  • /* 初始化日历 */
  • calendar_init();
  • /* 显示信息 */
  • lcd_string_show(10, 20, 200, 24, 24, (uint8_t *)"Calendar Test");
  • /* 显示符号 */
  • lcd_string_show(10, 60, 200, 24, 24, (uint8_t *)" - - : : ");
  • while(1)
  • {
  • /* 获取当前时间 */
  • ertc_calendar_get(&time);
  • if(temp != time.sec)
  • {
  • temp = time.sec;
  • /* 显示年 */
  • lcd_num_show(10, 60, 200, 24, 24, time.year + 2000, 4);
  • /* 显示月 */
  • lcd_num_show(70, 60, 200, 24, 24, time.month, 2);
  • /* 显示日期 */
  • lcd_num_show(106, 60, 200, 24, 24, time.day, 2);
  • /* 显示时 */
  • lcd_num_show(142, 60, 200, 24, 24, time.hour, 2);
  • /* 显示分 */
  • lcd_num_show(178, 60, 200, 24, 24, time.min, 2);
  • /* 显示秒 */
  • lcd_num_show(214, 60, 200, 24, 24, time.sec, 2);
  • }
  • }
  • }
    ! q: r' H. G8 o
# K  Y6 q+ U- A( a9 X
复制代码
2 L! Q& e, S5 V8 G  e
$ w/ z1 T. s8 V8 [& X+ e! L. D+ @6 y. g/ ]' l% ^% i
7 k2 r; s* K) T- i$ q) v) \
void calendar_init(void)函数代码描述6 {& d+ |( b6 y2 P* @) }& m

: B0 z5 K1 ~, A* O4 {
; \% G6 E: v0 Y8 M
  • /**
  • * @Brief calendar init.
  • * @param none.
  • * @retval none.
  • */
  • void calendar_init(void)
  • . ~3 o5 S" y1 \9 t% Y1 H

6 D$ `% l0 x8 e8 R( G9 \  n8 K  F复制代码* v. E4 z6 b; U, I

4 V4 r! g6 c4 p7 V9 P

该用户从未签到

2#
发表于 2022-7-1 11:03 | 只看该作者
温故而知新,帮别人解决问题,自己也能提升

该用户从未签到

3#
发表于 2022-7-1 13:29 | 只看该作者
学习Thanks♪(・ω・)ノ,(*^▽^*)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 15:01 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表