本帖最后由 强仔00001 于 2015-1-7 16:02 编辑 在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(红色方框),PLL是由锁相环电路倍频得到PLL时钟。 如下图: ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~26MHz。 ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI、HSE。理论倍频,一般不要输出频率最大不要超过84MHz,本人测试可以将内核时钟频率超到144M,建议大家不要超得太大,否则锁相环倍频的过程会失败的,而且超过84M可能出现运行不稳定的情况,建议大家还是最大输出到84M,如果大家的项目对单片机的处理速度要求较高的,可以超频。但不要超得太高。 STM32F401的时钟系统结构图 另外,STM32还可以选择一个时钟信号输出到MCO1脚(PA8)和MCO2脚(PC9)上,可以选择为PLL输出的1~5分频、HSI、HSE、或者系统时钟。 板子外部晶振的连接处默认是打断的,如下图画着红色方框的地方: 所以大家如果要用上外部高速晶体时,就要焊接上两个电容和两个0欧姆电阻。具体的位置如下图画着红色方框的地方,c33和c34的地方是焊接电容的: 这里需要提醒一下电容的选择,电容最好选择20pf到33pf,最好选择大一些的吧,以免在初始化时钟时外部晶振起不了振。这里我选择了电容是30pf,而那两个0欧姆的地方,我直接用焊锡连上了,大家懒的话就可以直接焊锡,因为这些电容,电阻的封装是0603的,这个比较难焊接,由于没有0603封装的电容,我这里就用了0805的来焊接。在晶振的地方,我焊接了圆孔的圆排母,这是为了以后方便更换晶振。下图就是我焊接好外部晶振的图: 下面我就开始来介绍用st公司的库函数来配置时钟吧,我是用外部晶振通过PLL模块把时钟倍频到自己所需的频率。然后通过PA8输出外部晶振的频率,PC9输出系统时钟频率的二分频来验证时钟设置是否正确。 }在这里有点需要提醒大家的是,如果你接上晶振时,需要修改一下头文件stm32f4xx.h里的HSE_VALUE的值,我这里的晶振接的是12M的,所以这个数值我改成了12000000,以此来告诉编译器我选的晶振是12M的。 下面就是时钟输出的配置:
以上这两个函数是配置PA8和PC9管脚为MCO模块。 在主函数中直接调用函数就可以了。
以下就是我仿真时通过SystemCoreClockUpdate();(刷新系统时钟的函数),可以看到时钟已经设置为84M了 以下就是我用PA8输出HSE的频率和PC9输出系统时钟频率的二分频,用示波器观察频率如下图: stm32f401Necleo的管脚分布图 这个图是系统时钟频率超频到120M,然后用PC9输出系统时钟频率的二分频,用示波器观察: 附上源代码: |
必须的,不然的话,不直观
谢谢支持
我还有很多东西向你们学习