欢迎光临散文网 会员登陆 & 注册

ARM芯片的时钟树配置概略

2022-07-06 13:08 作者:会整活的剑人  | 我要投稿

下面专栏基于本人的开发经验,如果有错误欢迎指出.简单介绍下部分ARM芯片的时钟

入门级别:ARM7TDMI核心的R710F

因为年代久远,那个时候的先进处理器放到现在其实并不算什么特别高级的东西.

这个时钟树是我搬的上课PPT.

这个东西甚至不能叫时钟树.具体的配置是这样

RTC是由外部32768晶振提供时钟.

CK是时钟源,16MHz有源晶振.因为PLL最大允许8M输入,需要先2分频.为了进PLL 在PLL处12倍频2分频(乘12除2)得到48MHz给到CLK3并作为RCLK,不分频(/1)直接给到MCLK,二分频(/2)给PCLK和FCLK.

各个时钟的频率计算

RCLK和MCLK:(16/2)*(12/2)=48M;PCLK和FCLK:48/2=24M


一个参考代码


USB必须工作在48M所以有一个专门的时钟配置.因为年代久远,且上课的时候这块简单带过了,也没有相关的实验,这里也是略说.

R710F的USB用时钟

进阶级别:STM32的时钟树

所有的STM32都有4个时钟源

LSI(内部低速RC振荡器)

HSI(8M/16M内部RC振荡器)

LSE(32768晶振)

HSE(外部高速晶振,有多种型号)

1.Cortex-M3核心的STM32F103C8T6

这个是cbj入门stm32用的板子,时钟树是stm32里面最简单的之一.

40K的LSI时钟给到独立看门狗定时器(IWDG)

32768晶振的LSE时钟给RTC.

配置8M晶振作为时钟源,输入PLL处9倍频得72M输出

将PLL输出1.5分频得48M给USB.

SYSCLK直接是72M,可以直接给到AHB总线

APB1最高36M需要先对72M作2分频(除2),这里分频了,在定时器TIM2,3,4,5,6,7处有2倍频所以定时器TIM2,3,4,5,6,7可以工作在最高72M.

APB2最高72M可以不分频,直接给过去.

ADC处需要分频,工作在12M.

代码(HAL库)

2.Cortex-M4核心的STM32F411CEU6

先看图,这个时钟树相比于STM32F103C8T6要复杂一些.

32K的LSI时钟给到独立看门狗定时器(IWDG)

32768晶振的LSE时钟给RTC.

外部晶振25M,在PLL前先M分频,进PLL后N倍频,P分频后输出,Q分频给USB.

一定查手册确定好M,N,P,Q,R这些参数的取值范围,否则芯片不能正常工作.

取M=25,N=192,P=2,Q=4,这样PLL输出96M,USB处48M.

HCLK直接取用PLL输出(96M).

FCLK也是96M

APB2不分频还是96M,APB2作2分频就是48M.定时器输入时钟是96M.

I2S接口有单独的时钟源和单独的PLL2,接出来R分频(这里先不考虑)

代码(HAL库)


3.Cortex-M7核心的STM32H743VIT6

先上框架和总线结构,比前面涉及的所有芯片都要复杂.

自然的,STM32H743的时钟树相比前面的都要复杂,以至于一个图放不下.

顶级时钟树
总线的时钟

简略的说下大概配置流程.

时钟源是HSE,25M高速晶振.在PLL处M取5,N取160,P取2,Q取4,R取2.

sys_ck就置成了25/5*160/2=400M

HPRE处二分频,这样HCLK=400/2=200M.AXI和AHB可以工作在200M.

APB1,APB2,APB3都取2分频,工作在100M,APB4取4分频,工作在100M

然后就可以满足基本使用了.

(USB等别的外设后面再更新)

代码(HAL库,要不就得直接配置寄存器)



ARM芯片的时钟树配置概略的评论 (共 条)

分享到微博请遵守国家法律