STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析

首先说下一下stm32芯片的启动过程: 打开 startup_stm32f10x_xx.s 文件可以发现系统是先执行SystemInit函数再执行main主函数的STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析

再打开SystemInit函数:函数前面是对RCC相关寄存器的Reset 在函数倒数有个 SetSysClock() 它是对系统时钟的初始化 再打开SetSysClock() 函数:

STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析


因为我们前面宏定义是 defined SYSCLK_FREQ_72MHz  因此这里执行  SetSysClockTo72()函数(PS如果要改系统的时钟 更改这里的宏 即可)


STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析


我们再打开  SetSysClockTo72() 函数  函数的前面主要是对 SYSCLK, HCLK, PCLK2  PCLK1  关系的配置:SYSCLK = HCLK = PCLK2 = PCLK1 *2 


STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析


107 与103 的时钟区别就在于这里 107 的定义宏 STM32F10X_CL  而103通常定义宏 STM32F10X_*D


STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析


这里结合时钟框图分别的二者做详细的分析

一、STMF103系列的系统时钟来源

 STM32F103比较简单,平时我们焊外部8M晶振,内部直接倍频9倍就可以得到系统最大频率72M。

STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析


系统最终的设置时钟的框图如下:


STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析



二、STMF107系列的系统时钟来源

F107互联型 MCU区别与F103,因为他们具有USB OTG功能,因此需要特别的时钟。一般我们使用外部25M晶振晶,方便提供USB或以太网相关时钟频率,而系统工作频率最大仍为72M.

STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析

根据代码再结合时钟框图 可得如下的设置

STM32F107(互联网型)外部晶振用25MHZ 而STM32F103却用8MHZ的原因及其时钟来源分析