STM32
直播中

王军

7年用户 1766经验值
私信 关注
[问答]

stm32的时钟树是由哪些部分组成的

STM32的时钟树是由哪些部分组成的?
stm32时钟有哪些寄存器?

回帖(1)

辛太励

2021-9-26 15:10:52
  1、时钟树
  
  2、刨析
  2.1、系统时钟(不配置默认内部8MHz,如寄存器版点亮LED)
  3个时钟来源(HSI、HSE、PLL倍频)
  2.1.1、HSI时钟
  内部时钟8MHz(不稳定)
  2个走向
  1、到SW
  2、经过2分频到PLLSRC
  2.1.2、HSE时钟
  外部晶振(4-16MHz)
  4个走向
  1、到PLLXTPRE
  2、2分频到PLLXTPRE
  3、到SW
  4、128分频到RTCSEL
  CSS:时钟监视系统(外部时钟不工作,自动切换内部时钟)
  2.1.3、PLL时钟
  3个选择PLLXTPRE和PLLSRC(内部2分频,外部,外部2分频)
  2.2、RTC和看门狗时钟
  2.2.1、RTC时钟来源
  1.高速外部HSE128分频
  2.低速外部LSE
  3.低俗内部LSI
  2.2.2、看门狗时钟来源
  3.低速内部LSI
  2.3内部时钟输出(PA8)
  1.系统时钟
  2.高速内部
  3.高速外部
  4.PLL的2分频
  3、库函数SystemInit()分析
  3.1内部8MHz高速脉冲开启
  
  
  3.1.1 RCC_CR
  RCC时钟基地址强制转换为TypeDef指针类型
  
  因为结构体成员都是32位(4字节),所以字节从CR一直往下都是4个字节4个字节的分配,符合寄存器的地址
  所以可以直接引用改地址内容
  
  3.2条件编译
  
  因为是HD的,所以不满足CL,跳过编译,编译else后面语句
  个人感觉没什么用(&运算F不变,0清0)
  因为复位值就是0
  
  3.3PLL设置
  
  1.CR寄存器16、19、24位清0,HSE振荡器关闭、时钟监测器关闭、PLL关闭
  2.CR寄存器18位清0,外部4-16MHz振荡器没有旁路
  3.CFGR寄存器16、17、18、19、20、21、22位清0,HSI振荡器时钟经2分频后作为PLL输入时钟、
  
  3.4清除中断标志位
  
  因为是HD,所以前面都不会执行,直接执行最后
  CIR寄存器16、17、18、19、20、23位置1,
  
  
  3.5函数SetSysClock()
  条件编译直接进入函数
  
  前面定义了72MHz(可以换成想要的时钟,换宏定义)
  条件编译直接进入函数72MHz
  
  
  3.6函数SetSysClockTo72(void)
  1.定义2个32位的变量,CR寄存器16位置1,HSE振荡器开启。
  
  2.等待17位外部3-25MHz时钟就绪 或 到定时时间结束,跳出while
  判断外部时钟是否就绪,就绪变量赋1,否则赋0
  
  
  
  3.判断是否打开就绪
  闪存编程手册
  1启用预取缓冲区。2清零。3两个等待状态
  设置分频系数:HCLK=72,PCLK2=72,PCLK1=36(sysclk系统时钟72)
  
  
  4.条件编译
  设置PLL 9倍,系统时钟、HCLK、PCLK2 72MHz,PCLK1 36MHz
  
  5.使能PLL
  等待完成
  设置PLL为系统时钟
  等待设置完成
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分