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

ERTC实时时钟--AT_SURF案例

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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