stm32的时钟

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为系统时钟
等待设置完成
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dz小伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值