400-035-6699
当前位置: 首页 » 技术支持 » 博文资讯 »

STM32时钟系统详解:从基础配置到常见问题解答

最近收到许多朋友关于USART串口打印乱码和TIM定时器定时不准确的问题。这些问题通常与晶振和软件配置有关,下面我将详细解释这些问题及其解决方案
首先,让我们聊聊晶振问题。晶振是提供时钟信号的元件,如果外部晶振不起振或其频率与配置不匹配,就会导致时钟信号不稳定,进而引发串口打印乱码或定时器不准确的问题。不过,即使没有外部晶振,我们也可以使用内部晶振作为时钟源。
软件配置问题则更为复杂。错误的分频、倍频或时钟源选择都可能导致系统时钟不稳定。STM32的系统时钟配置在软件中占据着核心地位,一旦掌握,这些问题就迎刃而解了。
了解时钟配置的起点是明白它在软件中的位置。无论是使用寄存器还是库函数开发STM32,工程中都会有一个名为“startup_stm32fxxxxx.s”的启动文件。当复位按钮被按下时,软件会跳转到这个文件的起始位置,执行第一个函数【SystemInit】,这个函数负责配置系统时钟。
在STM32开发中,我们通常会在“system_stm32fxxx.c”文件中找到【SystemInit】函数的具体实现。这个函数涉及时钟源的选择、分频和倍频等配置。需要注意的是,STM32有多种系列芯片,因此这个函数的具体内容会根据不同芯片而有所不同。
对于初学者来说,两个关键参数是HSE_VALUE(外部晶振频率)和SystemCoreClock(系统时钟)。这些参数在ST提供的库中都有默认值,通常与开发板的晶振设置相匹配。但如果你的晶振频率与默认值不同,就需要在“stm32fxxx.h”和“system_stm32fxxx.c”文件中相应地修改它们。
时钟树是理解时钟源选择、分频和倍频的直观工具。它以图形的方式展示了时钟的流向和配置。在STM32的参考手册中,RCC章节详细介绍了时钟树的结构,不同系列的芯片有不同的时钟树。
验证时钟配置是否正确的一个有效方法是使用MCO(微控制器输出)时钟输出。你可以在软件工程中添加一段代码,将MCO时钟输出到特定的引脚,然后使用示波器检测输出波形,从而验证时钟配置的正确性。
最后,要深入掌握STM32系统时钟配置,建议你仔细阅读官方提供的源代码,并注意其中的注释说明。这些代码通常都有清晰的命名,便于理解。此外,可以参考一些相关文章,如《STM32F4_RCC系统时钟配置及描述》,以获取更多细节和技巧。
总之,掌握了STM32的系统时钟配置,你就能解决大多数关于串口打印乱码和定时器不准确的问题。当然,实践是最好的老师,多实践、多调试,你会越来越熟练。

Ⅰ、写在前面

STM32时钟系统详解:从基础配置到常见问题解答

最近有很多朋友问: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系统时钟配置的内容,还需要你自己认真阅读以下源代码(建议看一下注释说明)。官方提供的代码从命名上都是很容易理解的。

相关文章:

STM32F4_RCC系统时钟配置及描述

以上总结仅供参考,若有不对之处,敬请谅解。

【限时免费】一键获取网络规划系统模板+传输架构设计+连通性评估方案

STM32相关文章

服务电话:
400-035-6699
企服商城