|
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 |
|