Ⅰ、写在前面
最近有许多朋友问:1.我的USART串口打印出来的数据是乱码?2.我的TIM守时器延时或守时不精确?
常见或许原因:
1.晶振问题:外部晶振不起振、或频率与装备不匹配。
2.软件问题:分频、倍频、时钟源挑选等。
总结来说,首要还在于软件的问题。由于即便没有外部晶振,也能够运用内部晶振。
其实,软件的问题是简单得到解决的,只需你了解了STM32时钟装备里边具体内容就知道了。
关于本文的具体内容请看下面章节
Ⅱ、本文关键
要了解时钟的装备,就需求知道它在哪里装备,也便是还需求了解软件履行的流程。
1.软件流程
说软件流程是让咱们知道体系时钟装备的方位。不管是运用寄存器开发,仍是运用库(规范库、HAL库)开发STM32,工程中基本上都有“startup_stm32fxxxxx.s”这么一个发动文件。
在线调试的朋友应该知道,你点一下复位按钮,软件会跳转到下图的方位,其实能够看到复位之后第一个履行的函数便是【SystemInit】。提到这儿,应该了解为什么咱们在main函数开端没有看见时钟装备相关的函数了吧,程序是在复位后立马装备的时钟。
2.时钟装备方位
运用库库(规范库、HAL库)开发STM32的朋友,在工程中都或许会看到“system_stm32fxxx.c”这么一个文件,这个文件里边代码首要的功用便是装备STM32的体系时钟。
上面发动文件中提到的【SystemInit】函数便是在这个文件里边,【SystemInit】函数里边便是装备体系时钟的具体内容。装备体系时钟首要便是时钟源挑选、分频、倍频等。
留意:STM32有多系列芯片,这儿【SystemInit】函数里边代码的内容也因而不同。
3.外部晶振频率、体系时钟频率
关于初学者,简单受到影响的便是两个参数:HSE_VALUE(外部晶振频率)、SystemCoreClock(体系时钟)。这个两个参数在ST供给的库中都有一个参考值,一般的开发板都是依照参考值规划的晶振,所以不必修正。但假如不同,那么就要修正。方位分别在“stm32fxxx.h”和“system_stm32fxxx.c”文件下面,如下图(F4系列为例):
4.时钟树
时钟树是很好反响时钟时钟源挑选、分频、倍频的一个框图,要深化了解,请下载相关参考手册检查RCC章节的时钟树,下面截取部分系列芯片时钟树图:
5.MCO时钟输出
验证时钟装备是否正确的办法能够经过MCO输出时钟,用示波器检测一下就知道了。我前面供给的软件工程中有一段代码(如下图),首要便是MCO时钟输出的代码。
Ⅲ、阐明
需求深化把握STM32体系时钟装备的内容,还需求你自己仔细阅览以下源代码(主张看一下注释阐明)。官方供给的代码从命名上都是很简单了解的。