打印
[AT32F415]

AT32 ERTC的时钟源选择

[复制链接]
2173|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 骑着蜗牛狂奔O 于 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;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

126

帖子

2

粉丝