这篇文章主要是个人的学习经验,想分享出来供大家提供思路,如果其中有不足之处请批评指正哈。
废话不多说直接开始主题,本人是基于STM32F407VET6芯片,但是意在你看懂这篇文章后,不管是F1,F4,H7等一系列系统时钟配置都能明白如何通过参考手册去学习配置。而不是Ctrl c,Ctrl v。
首先看看数据手册目录找找有木有时钟相关的内容好定位。
1.这句话就告诉你了你可以不用外部接时钟用它内部的就行,16 MHz内部RC振荡器在出厂时经过修整,在整个温度范围内提供1%的精度。他是这么说但是我不这么相信,主要是我的开发板上有一块8M的外部晶振,不用就浪费了。
2.这就是外部晶振的频率要求,我就不翻译了。
3.看看我自己的开发板原理图,8M没问题
4.数据手册中告诉你了,APB,AHB总线的频率要求,一会我就会参照着他的要求设置cubemx的时钟树配置,是不是配置时钟有点思路了?
几个预分频器允许配置三个AHB总线,即高速APB(APB2)和低速APB (APB1)域。三个AHB总线的最大频率为168 MHz,而高速APB域的最大频率为168 MHz,84 MHz。低速APB域允许的最大频率为42Mhz。该器件嵌入了一个专用的锁相环(PLLI2S),可实现音频级性能。在这种情况下,i2s主时钟可以产生从8khz到192khz的所有标准采样频率。
再看看定时器的时钟配置
数据手册中还写到APB1线上的定时器84MHZ,APB1=42MHZ
APB2线上的定时器168MHZ,APB2=84MHZ.
CUBEMX时钟树的这几个数为什么知道由来了吧。
5.来到参考手册这看看相关时钟配置,你该想想如果是别的系列的芯片怎么看手册该怎么配置了?
6.他说3个不同的时钟源,三种不同的时钟源可用于驱动系统时钟(SYSCLK):
?恒生指数振荡器时钟
?HSE振荡器时钟
?主锁相环(PLL)时钟
好看看cubemx
还真是3个时钟源啊,只不过我用的主锁相环(PLL)时钟。其他时钟源还可以试试不会坏的,又不是VCC,GND。
7.设备有以下两个备用时钟源:
?32 kHz低速内部RC (LSI RC),驱动独立的看门狗,可选的RTC用于从停止/待机模式自动唤醒。
?32.768 kHz低速外部晶体(LSE晶体)可选驱动RTC时钟(RTCCLK)
本人用的外部时钟始终秉持着不用就浪费原则。
好好看看翻译,好好看看这几张图,思考一下你会豁然开朗的,因为每一块都是一一对应的关系。
9.这张抽象无比的时钟树真正关键的只有这几个小点,其他的我爱答不理。
有了参考基础,接下来开始正式配置外部时钟
1.打开cubemx
2.本人用的是f407,如果是不一样的芯片按自己的型号来
3.上文也介绍了我不管是高速还是低速都用的是外部晶振,详见上文第3条第7条。
4.cubemx时钟树需要根据你的选择如果是外部晶振,需要根据你的原理图去配置,我原理图是32.768K,8M所以本人根据此配置。
5.再根据要求系统时钟(sysclk)不能超过180MHz,APB1<=42MHZ,APB1 CLOCK<=84MZ,APB2<=84MHZ,APB1 CLOCK<=168MZ满足以上要求即可,如图所示
至此你应该明白了,噢原来时钟只要小于他的限幅频率即可,那我设多少都可以比如SYSCLK<=180,那我179,178,176.52,168无论是不是浮点数只要小于180都是可以的。至此外部晶振的工作已经完成。
1.失能即可,即进入内部时钟源
2.你会发现外部的时钟源那部分已经改不了了,其他内容配置同外部晶振配置
接下来怎么测试可行性呢?点个灯试试
F407按键点灯
经过测试不管是内部时钟还是外部时钟都没问题哈哈。
本文没有对点灯部分详细讲解,将会在下一篇文章中讲解物理知识以及hal库的使用,纯属个人经验,有不足之处希望大家指正。