AT32F435/437时钟配置指南

简介
  时钟是芯片正确高效运行的基础,正确的时钟配置是芯片能正确运行的必要条件,其重要性不言而喻。at32各系列产品的时钟配置部分可能存在细微的差异和需要注意的事项,本文档就着重针对各系列的情况来详细介绍如何结合雅特力提供的v2.x.x的板级支持包(bsp)来配置时钟。
以下介绍时钟配置的方法主要分两种:
1. 以手动编写代码调用bsp中提供的驱动函数接口来进行时钟配置。 2. 采用时钟工具来配置并生成相应的源码文件。  
时钟树
  在进行时钟配置之前,应充分了解对应芯片的时钟树结构,这样在进行时钟配置时才会游刃有余。对于系统时钟频率及路径的配置我们需要关注时钟源、倍频及系统时钟部分。类似如下图:
图1. 时钟框图
可由图中得到以下几个关键信息:
1) sclksel:系统时钟可以由hext、pllclk、hick三大时钟源提供。
2) hext:hext是外部高速时钟,其可以外接范围是4~25 mhz的晶振或时钟源。
3) hick:hick rc是内部高速振荡器,频率为48 mhz。hick时钟由内部振荡器给出,但在初始情况下由hickdiv控制并默认6分频后为8 mhz,亦可配置为不分频,保持48mhz的频率。
4) pllclk:pll时钟=pll输入时钟/pll_ms*pll_ns/pll_fr。
5) pll输入时钟:pll的输入时钟由pllrcs决定,有两个来源:hick 8 mhz和hext。  
代码配置解析
  以下将以库函数接口为核心来对时钟配置流程和方法进行说明。  
函数接口
  各系列产品对应提供的bsp中对硬件的时钟设置部分已封装好接口函数以供调用,以下罗列出时钟配置常用的函数接口,各函数的具体参数及返回值类型等请参考at32f435_437_crm.c/.h文件。
时钟配置流程
  按常规应用来讲解时钟配置流程,其内容可大致分为如下步骤:
图2. 时钟配置流程图
flash时钟分频(set flash clock division)
flash时钟分频系数与系统时钟频率相对应,系统时钟频率与flash分频系数对应关系如下:
代码实现如下:
复位(crm reset)
首先按规范流程应复位crm配置参数,其主要是将系统时钟切换到hick,其余的系统时钟配置寄存器写入默认值,待后续进行新配置参数的写入。函数调用的代码实现如下:
时钟源配置(clock source configuration)
与系统时钟相关的高速时钟源主要包括hext和hick,pll也是使用以上时钟源来进行倍频。需要在配置使能pll前将所使用的pll参考时钟源开启并等待其稳定。
hext
外部高速时钟如采用外接有源时钟的方式时,可开启旁路模式来进行使用,采用晶振时,不能开启旁路模式,旁路模式应在外部高速时钟源使能前进行设定,其默认情况为关闭。旁路模式使能代码实现如下:
使能hext时钟源并等待hext时钟稳定,代码实现如下:
hick
内部高速时钟是由芯片内部振荡器提供,使能hick时钟源并等待hick时钟稳定,代码实现如下:
pll配置(pll configuration)
pll配置主要包括:pll时钟源、pll倍频系数、pll倍频频率范围等的设置。倍频时钟公式为:pllclk=(pll输入时钟*pll_ns)/(pll_ms*pll_fr)。
pll时钟源
pll时钟源细分有如下来源:1、hick(8 mhz),2、hext。pll时钟源应在pll配置使能前开启并等待稳定。以上pll时钟源在crm_pll_config函数中对应的参数定义如下:
pll倍频系数
pll_ms:pll预分频系数,范围值1~15。其功能是对pll输入时钟进行预分频。
pll_ns:pll倍频参数,范围值31~500。其功能是对pll_ms进行预分频处理后的时钟进行倍频。 pll_fr:pll后分频系数,范围(1、2、4、8、16、32)。其功能是对pll_ns倍频后的时钟进行后除频,除频后的时钟才是pll时钟。 以上参数在搭配使用时有如下限制条件,详情可参考rm的4.1.1时钟源章节:
当pll参数设置完成后,即可开启pll并等待pll稳定。示例:外部时钟晶振8 mhz,采用hext时钟作为pll时钟源,pllclk倍频到288 mhz的代码实现如下:
总线分频(set bus frequency division)
总线分频包含sclk到ahbclk分频、ahbclk到apb1clk分频、ahbclk到apb2clk分频。ahb总线1分频、apb1/apb2总线2分频的代码实现如下:    
切换系统时钟(switch system clock)
系统时钟来源主要有三个:hick、hext、pllclk。在切换系统时钟到如上时钟源时应提前确保对应时钟源已稳定。
顺滑模式
时钟顺滑模式是为了确保整个系统时钟切换过程的稳定而设计,当即将切换为系统时钟的目标时钟频率大于108 mhz时应开启时钟顺滑模式,所以其主要应用对象为pllclk用作系统时钟时的场景。通常使用方法是在系统时钟切换前开始,切换成功后关闭。代码实现如下:
hick系统时钟
内部高速时钟在系统复位重新运行时默认作为系统时钟,后期代码进行设定时,可有两种频率值来进行设定(8 mhz和48 mhz)。如图1所述hick默认情况下用的是8 mhz,可配置为48 mhz。 hick 8 mhz用作系统时钟的代码实现如下:  
hick 48 mhz用作系统时钟的代码实现如下:
hext系统时钟
外部高速时钟用作系统时钟时,其系统时钟频率以实际使用的外部时钟频率为准,范围为4~25 mhz。hext用作系统时钟的代码实现如下:
pllclk系统时钟
pllclk用作系统时钟时,其系统时钟频率以实际的pll倍频结果为准。其最高频率应满足芯片规格为基础。pllclk用作系统时钟的代码实现如下:    
更新核心频率(update core frequency)
提供的bsp中,其代码框架内保留了一个表示系统核心频率的参数值system_core_clock,其保存的是cpu核心的运行频率值,应该在每次系统时钟配置完成后来进行更新。为的是在整个代码框架下,各外设驱动的频率配置能很快获取到当前核心运行频率值并使用。代码实现如下:
时钟配置示例
  以下将以完整的时钟配置流程来进行说明,示例:由8 mhz外部时钟晶振作为时钟源,经pll倍频到288 mhz并用做系统时钟,ahb不分频,apb1/apb2采用2分频。函数system_clock_config代码实现如下:    
时钟工具
  时钟配置工具是雅特力科技为方便对at32系列mcu进行时钟配置而开发的一个图形化配置工具,其主旨是使用户清晰了解时钟路径和配置出期望的时钟频率并生成源码文件。  
环境要求
软件要求
需要windows7及以上操作系统支持。  
安装
软件安装
本软件不需要安装,只需直接运行可执行程序at32_new_clock_configuration.exe。  
功能介绍
  本章节将介绍此工具的基本操作,其主要的启动界面和配置界面如下所示。
图3. 启动界面
图4. 配置界面
菜单栏
  菜单栏内容如图所示:
图5. 菜单栏
“项目”(project)菜单:
新建:新建时钟配置项目
打开:打开已存在的配置项目
保存:保存已打开的配置项目
“语言”(language)菜单:
english:选择english作为显示语言
简体中文:选择简体中文作为显示语言
“生成代码”(general code)菜单:
当在对应型号的操作配置界面将所期望的时钟路径和时钟频率配置完成之后,可点击“生成代码”菜单来选择源码文件的存储路径并生成相应的源码文件。
“帮助”(help)菜单:
新版本下载:联网进行新版本下载
版本:查看当前版本
新建配置项目
  双击打开时钟配置工具,可看到图示的启动界面,可点击“项目”菜单-->“新建”,进行配置项目的新建,在新建配置项目的过程中需要对芯片的系列所属进行选择,操作方法如下图所示 。
图6. mcu选择界面
mcu系列的选择,可点击下拉框来进行选择,当选择好mcu后点击“确定”可进入到时钟配置界面。  
配置界面的使用
  配置界面主要用来进行时钟路径及参数的配置并对部分外设当前运行的时钟频率进行显示,以下的介绍将以at32f435系列作为示例来展开进行,其余系列的配置方法与此类似。 整个配置界面主要可以分为四个大块,如下图所示 。
图7. 配置界面框架
1. 标题部分:用于展示当前配置项目所选择的mcu系列。
2. 配置部分:用于对时钟路径和时钟参数进行选择和配置,以达到期望的应用需求。
3. 输出部分:用于时钟输出(clkout)的配置。
4. 在sclk栏也可在选中pll为系统时钟时作为输入框,可输入期望的系统时钟频率来反向自动配置出倍频参数。
5. 结果部分:用于显示当前外设所使用的时钟频率及总线上的外设。 接下来就着重介绍一下配置部分的使用。配置部分的流程界面是对应着 mcu 时钟树来进行的,各系列mcu的此部分可能存在着差异,但使用方式大同小异。时钟路径的配置可按流程对各开关进行点选来进行选择,配置部分如下图所示,将逐个流程点的功能及其注意事项进行介绍。
图8. 时钟配置框
1. ertc使能:ertc时钟代码配置的使能下拉框。
2. ertcsel:点选框,ertc时钟源选择。当ertc使能开启后,此点选框可配置。
3. ertcdiv:下拉框,当ertc选择hext外部高速时钟作为时钟来源时,此下拉框选择分频系数。
4. lext bypass:外部低速时钟的旁路使能。
5. hext:此为输入框,8 mhz为所采用外部时钟源的默认频率,用户可根据实际使用的外部时钟源频率进行修改。(注:此8 mhz被修改为其他频率值时,对应的bsp中demo目录下的inc/at32f435_437_conf.h文件内的hext_value宏定义也应该一致修改,也可以采用工具生成的at32f435_437_conf.h文件来进行使用)。
6. hext bypass:高速外部时钟的旁路使能。
7. pllrcs:点选框,可配置pll时钟源为hext或hick。
8. pll_ms:输入框,pll预分频系数,范围值1~15。其功能是对pll输入时钟进行预分频。
9. pll_ns:输入框,pll 倍频参数,范围值31~500。其功能是对pll_ms进行预分频处理后的时钟进行倍频。
10. pll_fr:下拉框,pll后分频系数,范围(1、2、4、8、16、32)。其功能是对pll_ns倍频后的时钟进行后除频,除频后的时钟才是pll时钟。
11. sclk select:点选框,可配置hext、pll或hick作为系统时钟。
12. sclk频率:当采用正向配置时,此作为系统时钟频率的配置结果显示,当将其用作输入框时,输入期望的频率后点击回车键,会根据此输入值反向计算一组合适的或最接近期望值的pll配置参数。
13. hick to sclk:点选框,当sclk select选择hick作为系统时钟时,可配置hick的8 mhz或48 mhz到系统时钟(注:当选择48 mhz hick到系统时钟后,clkout输出hick时的频率也为48 mhz)。
14. usbdiv:下拉框。当pll时钟被选作为usb的时钟来源时,此处配置pll时钟到usb时钟的分频系数。
15. hick to usb:点选框,可配置usb时钟由pll时钟或hick 48 mhz提供,usb时钟配置代码由下拉框to usb来进行选择控制。因usb时钟需要的是固定48 mhz,所以在usbdiv可分频参数为前提下,pll倍频出来的频率可能不满足usb 48 mhz的时钟需求。
16. usb使能:usb时钟代码配置的使能下拉框。
17. usb时钟频率的显示。此显示栏会实时计算usb时钟的频率并显示,如果配置出来的usb时钟不等于48 mhz时,显示出来的usb时钟频率会标注为红色,而实际应用中没有用到usb时选择disable则不会显示。(注:此部分只针对usb时钟频率的配置,usb外设时钟使能需自行额外打开)。  
生成代码
  当时钟配置完成后,可点击生成代码,然后选择代码生成的路径并确认,最后会在所选目录下生成两个文件夹inc和src,源文件存放在src文件夹下,头文件存放在inc文件夹下。这些文件可结合到bsp_v2.x.x内的工程来进行使用。可以采用新生成的时钟代码文件(at32f4xx_clock.c/at32f4xx_clock.h/at32f4xx_conf.h)将原bsp demo中的对应文件替换,在main函数中进行system_clock_config函数调用即可。  
注意事项
外部时钟源(hext)修改
  因本文档所示例的demo和配置工具都默认采用的8 mhz外部时钟频率,当实际硬件使用的外部时钟源是非8 mhz频率时需注意以下几点。
代码修改
1、 以实际的外部时钟频率按文中时钟配置流程章节所描述的时钟配置流程及方法来编写相应的代码,配置出期望的时钟配置及时钟路径。
2、 修改对应demo工程中at32f4xx_conf.h文件的hext_value值,以实际使用的外部时钟源频率值来进行修改。如实际外部高速时钟使用12.288 mhz的晶振或时钟源时,at32f4xx_conf.h文件应修改如下:
工具修改
1、在时钟配置工具中的 hext 输入框内填入外部时钟源实际频率值并按“enter”键确认。
2、配置好所需的时钟路径及时钟频率,生成代码。采用新生成的时钟代码文件(at32f4xx_clock.c/at32f4xx_clock.h/at32f4xx_conf.h)将原bsp demo中的对应文件替换或取其中函数内容进行替换,在main函数中进行system_clock_config函数调用即可。  
工具使用
  在使用本时钟配置工具时需注意: 1. 此工具生成的时钟配置源码文件需结合雅特力科技提供的bsp_v2.x.x进行使用。 2. 不同系列所生成的时钟配置源码文件不能型号混用,只能在相对应的工程项目中进行调用。 3. 配置工具中各输入框参数修改后,请以“enter”键结束。  
案例 系统时钟切换
功能简介
  在系统运行过程中来进行系统时钟切换。  
资源准备
  1) 硬件环境 对应产品型号的at-start board 2) 软件环境 projectat_start_f435examplescrmsysclk_switch  
软件设计
  1) 配置流程
初始化按键。
配置clkout时钟输出pll 4分频。
编写从hick经pll倍频64 mhz到系统时钟的配置代码。
编写从hext 2分频经pll倍频96 mhz到系统时钟的配置代码。
2) 代码介绍 main函数代码描述
hick经pll倍频64 mhz到系统时钟的代码描述
hext经pll倍频96 mhz到系统时钟的代码描述
实验效果
上电运行led2以间隔100ms时间进行闪烁,clkout(pa8)输出60 mhz。
每次user按键按下,系统时钟在64 mhz与96 mhz之间进行交替切换,clkout输出对应的4分频频率,led4 toggle一次。
案例 时钟失效检测
功能简介
  在当hext时钟直接或间接作为系统时钟时,当hext时钟出现故障,且时钟失效模块侦测到失效后,时钟失效事件将产生nmi中断,在此中断中可完成系统的营救操作。  
资源准备
  1) 硬件环境 对应产品型号的 at-start board 2) 软件环境 projectat_start_f435examplescrmclock_failure_detection  
软件设计
  1) 配置流程
配置clkout1时钟输出pll 4分频。
开启时钟失效检测,并完善void nmi_handler(void)函数。
编写从hick经pll倍频288 mhz到系统时钟的配置代码。
2) 代码介绍 main函数代码描述
hick经pll倍频288 mhz到系统时钟的代码描述
nmi中断实现
实验效果
在运行过程中将晶振拔掉或晶振脚接地,产生时钟失效。通常来说hext比hick更稳定,可观测clkout(pa8)的输出,可发现时钟拯救回来后hick作为源时的频率上存在细微波动。
案例pll参数计算
功能简介
  在进行系统时钟配置过程时,可调用库函数根据pll输入时钟源和目标时钟频率自动计算一组合理的pll参数以供配置,减少人为计算的烦恼。  
资源准备
  1) 硬件环境 对应产品型号的at-start board 2) 软件环境 projectat_start_f435examplescrmpll_parameter_calculate  
软件设计
  1) 配置流程
crm_pll_parameter_calculate函数自动计算pll参数方式配置系统时钟。
配置clkout1时钟输出pll 4分频。
判断计算结果,能以目标时钟准确计算一组pll参数时led4闪烁,如果不能led2闪烁。
2) 代码介绍 main函数代码描述
自动以目标时钟计算pll参数并配置系统时钟的代码描述
实验效果
  系统会自动计算一组以目标时钟为结果的pll参数并配置,如果计算参数所算结果与目标时钟相等则led4闪烁,如果所算结果与目标时钟接近则led2闪烁。


星环科技入选中国商业数据智能产业图谱
研究人员利用3D打印技术来创建仿生机器人手指
3D IC半导体设计的可靠性挑战
大数据时代 个人信息安全防护十分重要
苹果12英寸MacBook高清拆解图集
AT32F435/437时钟配置指南
AEC-Q102解读(一)——什么是AEC-Q102?
单片机RAM真的像你想的那么“单纯”吗
工业4.0 大数据崛起重塑商业社会?
三款过CE/FCC/SRCC认证的USB接口双频WIFI模块
爱立信5G网络升级实现覆盖俄罗斯27个地区
感应分压器的结构_感应分压器的原理
什么原因会造成伺服编码器损坏?
TensorFlow Lite 构建的无人驾驶微型汽车
蓝光产品承压 晶电欲提高四元产品比重
开启智能时代:亚马逊云科技倾力打造大语言模型前沿应用
未来汽车安全架构对分布式安全加速的需求
PMOS开关电路分析
TDK技术专家:温度传感器于混合动力/电动汽车何其重要
160160液晶屏+MSP430F169程序和电路图