XuSenfeng

个人站

复读了,更新随缘,有的文件不全或者图片缺失具体看我的笔记库(https://github.com/XuSenfeng/note)


主频时钟配置

目录

主频时钟配置

初始化默认为396M, 最高792M

时钟来源

时钟

晶振1, 32.768kHz, 供给给RTC实时时钟使用

晶振2, 在T16和T17上有一个24MHz的晶振

时钟的构成

手册18章

首先是7路PLL, 为了方便生成时钟, 从24MHz生成的, 有的再次生成PFD

时钟树: PLL==>PFD==>外设

  • PLL1(ARMPLL): 650MHz-1.3GHz, 提供给ARM内核的
  • PLL2(System PLL, 528PLL): 528MHz, 这个是固定的, 分出四路PFD, PLL2_PFD0-3
  • PLL3(USB1_PLL, 480PLL): 只要用于USB但是也会用于其他, 固定为480MHz, 也有四路PFD, PLL3_PFD0-3
  • PLL4(Audio PLL): 主供音频使用
  • PLL5(Video PLL): 主供视频外设, RGB LCD以及图形处理的外设
  • PLL6(ENET PLL): 网络连接外设
  • PLL7(USB2_PLL): 480Mhz没有PFD

要初始化的PLL以及PFD

PLL1

PLL2以及各路PFD3

PLL3以及PFD

一般按照时钟树里面的值进行设置, 表18-4给出系统时钟的值

配置

主频

PLL1通过CACRR[ARM_PODF]的0-3位控制1-8分频

设置主频为528Mhz, 设置为二分频, PLL1 为1056Mhz, 设置CACRR[ARM_PODF]等于一的时候

设置PLL1

18-5-1-5-1图片

  • PLL1=pll1_sw_clk, 有两路可以选择, 分别为pll1_main_clk 和 step_clk(来自osc_clk等), 通过CCSR[pll1_sw_clk_sel](bit2)进行选择, 为0的时候选择pll1_main_clk,

  • 在修改PLL1的时候需要有一个临时的时钟, 在修改的时候切换到step_clk, 有两个来源, 有CCSR[ step_sel](bit8)来进行设置, 0的时候设置为晶振24Mhz

  • 时钟切换成功以后就可以修改PLL1的值了

    $PLL output frequency = Fref * DIV_SEL/2$

    Fref就是晶振, DIVsEL就是CCM_ANALOG_PLL_ARM[DIV_SELECT](bit0-6)设置的

    设置为528主频的时候, 这个位就是88, 还要设置CCM_ANALOG_PLL_ARM[ENABLE](bit13)位为1

==注:==再切换回来之前一定要设置为二分频CACRR[ARM_PODF]为1

其他PLL初始化

PLL2和PLL3, 他们的频率固定, 528和480, 但是PFD需要初始化

PLL2

寄存器CCM_ANALOG_PFD528用于设置四路PFD的时钟

$PFD0= 528*18/PFD0_FRAC$

PFD0_FRAC is in the range 12-35,占用6位,还有两位其他设置不修改, 其他的四路公式一样

PFD0 = 352M, PFD1 = 594M, PFD2 = 396M, PFD3 = 297M

PLL3设置类似

设置其他外设时钟源配置

这里初始化PERCLK_CLK_ROOT, IPG_CLK_ROOT, USDHC1_CLK_ROOT, 应为之后学习常用, 因为从时钟树得知PERCLK_CLK_ROOT, IPG_CLK_ROOT来自AHB_CLK_ROOT, 所以初始化AHB_CLK_ROOT最大为132M, PERCLK_CLK_ROOT, IPG_CLK_ROOT为66M

QQ图片20220815165518

图片629页

设置CBCMR[PRE_PERIPH_CLK_SEL](bit18-19)设置为1, 设置使用来源为PFD2不分频, 396M

CBCDR[PERIPH_CLK_SEL](bit25): 外设主时钟, 设置为0走下边

CBCDR[AHB_PODF](bit12-10)三分频, 设置为2, 设置完以后等待完成, 有可能会产生错误, 可以保持默认值

后面差不多了