|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ERTC实时时钟--AT_SURF案例No.52 j; j) W) I3 E
/ O4 O! k2 Y' [- I8 \; @" Y f) }2 @1 X2 V
简介6 v% h5 d; f b4 q4 q8 [
AT32实时时钟(ERTC)是一个BCD计数器,内部完整的实现了日历计数逻辑,ERTC计数逻辑位于电池供电域,只要电池供电域有电,ERTC便会一直运行,不受系统复位以及VDD掉电影响。5 G/ G5 |! ]) [( F, N5 H8 ?
ERTC主要具有以下功能:
3 h& u* n1 D" T3 C$ U! e2 s― 日历功能:年、月、日、时、分、秒- I/ O/ g. w, v8 A; b1 {
― 闹钟功能:闹钟A、闹钟B
: a9 z9 |. u7 ?0 M, n; i― 周期性唤醒功能$ p- q( z C$ Z- Y( l
― 入侵检测功能: O9 Z+ D- H9 i, l% [- A6 Y
― 校准功能:精密校准、粗略校准8 K6 N: p4 Z! Q% `* k0 M
该例程展示了如何使用ERTC实现日历功能,并通过LCD屏将日历显示出来。1 b# f$ B, H5 S% P
0 F X. e* {8 j) e$ C! o
资源准备+ j, Q" [, a; k% F# y1 y q/ z
硬件环境:5 v0 W6 J I- V4 L- k6 d1 b$ g
对应产品型号的AT-SURF-F437 Board
- i0 d" G# W6 [! V软件环境:& o2 j$ e( Q" B
AT32F435_437_Firmware_Library_v2.x.xprojectat_sufr_f437examplescalendar2 V Q* n5 I5 m" @
3 o0 }4 C5 d4 ?; k6 t; a硬件设计& F1 W7 a. b5 O8 p
本案例使用的硬件资源有外部32768Hz晶振、电池,对应的引脚如下:- u7 A2 ^6 x6 o8 h5 c* K: J: z7 x, S
表6. 硬件资源使用' X' t+ W9 I" D1 a& Z' q7 O
: D/ @! {- C: D, D 2 A- N( F/ H% T" }8 z
4 E2 u$ r" e+ F+ w/ H对应的电路原理如下:( M) n% T* P4 u ]5 F# l0 R% D
图11. 外部低速晶振电路原理图3 R; k5 ~" L5 T% R7 x
. s5 o% E4 e3 I
, {" m% y# i0 K, E4 c5 t% y图12. 电池供电电路原理图
- J, S! y/ i9 q![]()
7 S3 ]! U4 `% t8 R" J
. x; ]- E& Y9 D0 g/ O e6 @7 F软件设计
, o. U: j: M! f' Y1) 日历测试
' D. |+ k. z7 e$ S初始化ERTC
W6 `, B) Z, q0 J% R4 k5 n将日历显示在LCD屏上
. U6 I/ I4 D% {) Y& K. j2) 代码介绍
' r* Z9 h: \4 @* P* Q" `# g0 o) e6 Y. S1 Omain函数代码描述
- O( z0 G& k5 X. ?/ O& F
3 M# W( ?" f0 \- T
% m e& B9 \. u9 i
; ]) j6 s, i2 e$ x) J/ Y# m! z- 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);
- }
- }
- }
9 Z* [* G, c1 D- U * K; ~( L+ I4 J' C- n+ A+ g& v2 D
复制代码# Y% @8 P. d* p
+ o/ C0 S! S: e1 A+ C5 z0 _
$ b0 u% [8 `' }: `1 n8 |
# S: @5 |3 j+ u) \) D; k0 |
void calendar_init(void)函数代码描述 Z! L6 ?7 t8 A4 [% H
( I( L d6 u2 P
# e4 L2 v, Y, N& n# Z5 V+ h* F- /**
- * @Brief calendar init.
- * @param none.
- * @retval none.
- */
- void calendar_init(void)
0 c! N! p! _' |8 L8 k, O
# B8 P: w3 b4 M: I* Z$ {& }1 ?1 n复制代码
l; i \6 K" W5 K3 W, _
4 G! V2 z% `. r9 U |
|