历史上的今天
今天是:2025年01月20日(星期一)
2021年01月20日 | STM32时钟配置及相关问题
2021-01-20 来源:eefocus
Ⅰ、写在前面
最近有很多朋友问: 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系统时钟配置的内容,还需要你自己认真阅读以下源代码(建议看一下注释说明)。官方提供的代码从命名上都是很容易理解的。
史海拾趣
|
【原创】可调电阻的 介绍 选用以及使用方法 可调电阻与电位器的区别与联系 http://blog.ednchina.com/freeeedoooom/187414/message.aspx… 查看全部问答> |
|
TL431特点: TL431精密可调基准电源有如下特点:稳压值从2.5~36V连续可调;参考电压原误差+-1.0%,低动态输出电阻,典型值为0.22欧姆输出电流1.0~100毫安;全温度范围内温度特性平坦,典型值为50ppm;低输出电压噪声。 原 ...… 查看全部问答> |
|
error C2668: 'pow' : ambiguous call to overloaded function 这个错误什么意思,我的后文件包含 #include #include #include #include #include 究竟是哪错了… 查看全部问答> |
|
如题,想了解下目前PPC或者SmartPh上播放mp3格式的音频文件主要用哪种技术?windows media sdk? DirectShow? 或者其他的第三方控件? (当然需要免费的)… 查看全部问答> |
|
早上9点会议开始。 由于上海的交通比较发达,所以迟到了。 TI有钱呀,开会的地方都是上海的五星宾馆。哈哈,或许也就五星才配得上TI的名气。也害的我这个刚出社会的小子坐电梯坐到了6楼。急忙找个楼梯赶到4楼。 当时刚到场,看到一个挂牌子的哥 ...… 查看全部问答> |
|
1.第一忌 自己不动脑筋,一遇到问题就问别人有句话说的好“吃别人咀嚼过的馍不香”。对于新手来说,做每一件事都是一次学习的好机会。有时候,探索的过程比最终的结果更重要。当你经过自己的努力,解决问题时,成就感和自信心会随之逐渐建立。如果 ...… 查看全部问答> |




