|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
ERTC实时时钟--AT_SURF案例No.5
' A5 ~9 |6 j) N6 k1 i- y- _# p0 F7 ~9 ^+ I J1 l1 m
9 E/ d: v9 v. @) c& w( X, W
简介! h; D1 y6 ~( P1 {$ |, S E5 a# G
AT32实时时钟(ERTC)是一个BCD计数器,内部完整的实现了日历计数逻辑,ERTC计数逻辑位于电池供电域,只要电池供电域有电,ERTC便会一直运行,不受系统复位以及VDD掉电影响。
7 x% v5 o+ R7 t- vERTC主要具有以下功能:$ ` O3 k: I0 Y6 |7 h$ h
― 日历功能:年、月、日、时、分、秒
& s$ ~) p" Y r, y- l# k, q% X― 闹钟功能:闹钟A、闹钟B2 T* o7 c3 O: H, X/ @
― 周期性唤醒功能/ r! E- W- q8 T4 \4 L& Z
― 入侵检测功能
2 F" P! N5 B. Y& P4 R― 校准功能:精密校准、粗略校准
$ N2 D) W9 x0 }- s! M* M该例程展示了如何使用ERTC实现日历功能,并通过LCD屏将日历显示出来。! ?* G* H3 v- H& ?; ^3 f5 \
9 W/ i- V# y, u' N1 V6 I资源准备
) S6 E" L* _) O6 t6 P9 W硬件环境:& n5 m1 o6 N N9 P2 F1 O7 y
对应产品型号的AT-SURF-F437 Board
+ m& @ `; c1 h; u软件环境:: M) e. s9 o+ V6 ]: ~( g' u
AT32F435_437_Firmware_Library_v2.x.xprojectat_sufr_f437examplescalendar
& s7 p3 `5 e5 p9 H, s
' n3 F" y* h% y% g1 A+ T0 ^硬件设计
$ [" |. F' Z6 P! T( i本案例使用的硬件资源有外部32768Hz晶振、电池,对应的引脚如下:
8 j k2 A) S- J _& w: T* A- K表6. 硬件资源使用
, ] X" \" Z1 u$ }
B5 X- P, y1 ?5 L: B3 ]' e8 P, |' j $ r3 h" m8 a6 T) ?3 J2 j
. \7 I' n8 A5 L. c
对应的电路原理如下:2 A& l0 `4 e+ M1 u- r# n
图11. 外部低速晶振电路原理图( _$ n) f) b/ u0 _3 N' T) A
/ J2 k3 O) |, P* r0 F
+ d; h: n- r* ~6 N! L# S( B5 @1 `
图12. 电池供电电路原理图
1 D/ r L+ ^5 G, X3 T5 b2 Q% p![]()
+ ~/ e7 V# U: w8 ^0 r0 E6 F& p1 g1 l4 r
软件设计4 }6 o$ @& q8 n9 x0 [! m
1) 日历测试
% w7 g( [' S- Z) R+ r2 `初始化ERTC
! T: g. J0 y1 t. o% [* n将日历显示在LCD屏上
, }! j" K+ U9 i7 Z6 C2) 代码介绍8 v. i4 w. U* Y% D
main函数代码描述3 g4 N/ c, t! ?7 f( p
2 ~6 J r: t; \8 v1 J4 s5 a: T n( K0 e0 T7 b0 C
! m2 J+ U" D% T% p. n- 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);
- }
- }
- }
S$ J* j$ U2 l# {
$ e3 Z' }2 K0 [1 S3 m' V复制代码" p. e2 h- x( Y7 L8 D
" _0 e4 j* K: ], I% `9 @/ k! _9 p/ t# b
2 D2 C+ z' m4 ?) h" ~3 Q4 ?$ T+ Q6 s. Q8 H6 y
void calendar_init(void)函数代码描述' c% l1 j- f. Y
3 s( \, y6 }# ^
! R4 k$ _6 n! A* s1 j$ [9 X- /**
- * @Brief calendar init.
- * @param none.
- * @retval none.
- */
- void calendar_init(void)
- 1 u' L# A2 O/ }/ w
! h6 ~2 u2 c8 \. F! A0 U) j9 k
复制代码3 u" N8 w& O+ I3 y* w: l1 F" U
8 e9 b m! c8 D9 w2 D
|
|