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系统时钟配置的内容,还需要你自己认真阅读以下源代码(建议看一**释说明)。官方提供的代码从命名上都是很容易理解的。
相关文章:
以上总结仅供参考,若有不对之处,敬请谅解。
Ⅳ、最后
我的博客:http://blog.csdn.net/ybhuangfugui
微信公众号:EmbeddDeveloper
更多精彩文章我将第一时间在微信公众号里面分享,如果不想错过,可以关注我的微信公众号。
本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果觉得文章的内容对你有用,又想了解更多相关的文章,请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。
推荐阅读
-
quartz实现定时功能实例详解(servlet定时器配置方法)
-
Springboot项目获取配置文件中的Map和List值
-
mysql 5.7.11 安装配置教程
-
MySQL5.5.21安装配置教程(win7)
-
mysql 5.7.13 安装配置笔记(Mac os)
-
ThinkPHP数据模板展示——系统变量、常量、配置文件
-
详解基于Spring Boot与Spring Data JPA的多数据源配置
-
Windows7下的php环境配置教程_PHP
-
Nokia N800/N810如何配置java + SWT 博客分类: Mobile NokiaJavaMaemoEclipseSSH
-
再次问高手 linux下apache配置ssl后为何https和http都可以访问等有关问题 100分