硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2105|回复: 0
收起左侧

[客户分享] AT32 ERTC的时钟源选择

[复制链接]

23

主题

16

回帖

85

积分

初级会员

积分
85
发表于 2021-8-24 20:42:21 | 显示全部楼层 |阅读模式
本帖最后由 tutu 于 2022-2-21 19:53 编辑

AT32的ERTC时钟源可以选择LEXT、LICK、HEXT,3种时钟源各有适应的场景
LEXT:通常使用32.768Khz的晶振   
  优点:是该种时钟源精度最高,并且能在电池供电下、以及低功耗模式下工作
  缺点:需要一颗晶振,增加元件成本,增大PCB布线面积
HEXT: 主晶振
  优点:该种时钟源精度也比较高,节省一颗晶振,降低了PCB布线面积
  缺点:不能在电池供电下、以及低功耗下模式工作
LICK:典型值为40Khz,官方手册写了范围在30Khz~60KHz,
  优点:能在电池供电下、以及低功耗模式下工作,节省一颗晶振,降低了PCB布线面积
  缺点:时钟精度低,时间不是很准

AT32官方demo在以下路径
AT32F415_Firmware_Library_CN\project\at_start_f415\examples\ertc\calendar

以下程序是我在官方demo中截取的时钟切换部分

选择LICK为时钟
  /* enable the lick osc */
  crm_clock_source_enable(CRM_CLOCK_SOURCE_LICK, TRUE);

  /* wait till lick is ready */
  while(crm_flag_get(CRM_LICK_STABLE_FLAG) == RESET)
  {
  }

  /* select the ertc clock source */
  crm_ertc_clock_select(CRM_ERTC_CLOCK_LICK);

  /* ertc second(1hz) = ertc_clk(lick) / (ertc_clk_div_a + 1) * (ertc_clk_div_b + 1) */
  ertc_clk_div_b = 255;
  ertc_clk_div_a = 127;

选择LEXT为时钟
  /* enable the lext osc */
  crm_clock_source_enable(CRM_CLOCK_SOURCE_LEXT, TRUE);

  /* wait till lext is ready */
  while(crm_flag_get(CRM_LEXT_STABLE_FLAG) == RESET)
  {
  }

  /* select the ertc clock source */
  crm_ertc_clock_select(CRM_ERTC_CLOCK_LEXT);

  /* ertc second(1hz) = ertc_clk / (ertc_clk_div_a + 1) * (ertc_clk_div_b + 1) */
  ertc_clk_div_b = 255;
  ertc_clk_div_a = 127;

选择HEXT为时钟源,在官方的库中没有,但是比较简单
crm_ertc_clock_select(CRM_ERTC_CLOCK_HEXT_DIV);
意思就是选择HEXT/128为ERTC时钟,然后根据HSE频率配置分频值就行了,比如当HEXT为8MHz时,那么ERTC时钟为8MHz/128 = 62500hz,配置分频值为(ertc_clk_div_a + 1)*(ertc_clk_div_b + 1) = 62500就行了,比如
  ertc_clk_div_b = 499;
  ertc_clk_div_a = 124;





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 19:09 , Processed in 0.205595 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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