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

ERTC实时时钟--AT_SURF案例

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 09:06 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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