0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈STM32时钟配置及相关问题

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-24 11:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Ⅰ、写在前面

最近有很多朋友问: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
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371054
  • USART
    +关注

    关注

    1

    文章

    201

    浏览量

    32915
  • 时钟配置
    +关注

    关注

    1

    文章

    14

    浏览量

    8945
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    时钟树解析

    总线之前,该时钟会被分频(也就是降低频率),在不进行任何配置的情况下,这个48M的信号会被6分频。 这个图包含很多信息,但是图中的彩色字信息并非全部来自此图,更多的信息需要结合代码和寄存器
    发表于 11-28 08:24

    极海APM32E030 MCU中高速时钟配置相关注意事项

    每一家MCU厂家的SDK写法和寄存器功能都有所不同,如果不熟悉的话就会配置错误,导致MCU运行不稳定。接下来就以APM32E030的手册和SDK,解读下高速时钟配置相关注意事项。
    的头像 发表于 11-04 09:19 4266次阅读
    极海APM32E030 MCU中高速<b class='flag-5'>时钟</b>的<b class='flag-5'>配置</b>和<b class='flag-5'>相关</b>注意事项

    Proteus中配置STM32外部时钟HSE如何配置

    有大佬会配置Proteus中的STM32F103C8的外部时钟吗 这个proteus中打印不出来数据,但是在实物的连接中可以正常打印 代码如下: 并且配置proteus中的虚拟串口
    发表于 11-02 13:54

    ‌CDC1104 1至4可配置时钟缓冲器技术文档摘要

    CDC1104是一个 1 到 4 可配置时钟缓冲器。该器件接受输入参考时钟,并创建 4 个缓冲输出时钟,输出频率等于输入时钟的一半 频率。
    的头像 发表于 09-16 09:37 549次阅读
    ‌CDC1104 1至4可<b class='flag-5'>配置</b><b class='flag-5'>时钟</b>缓冲器技术文档摘要

    STM32H750更改时钟后,程序无法运行怎么解决?

    各位大佬,我想请教一个问题: 为了验证H750主时钟频率和功耗的关系: 用STM32CUBEMX配置STM32H750VBT6的主时钟为:1
    发表于 03-12 06:38

    STM32H750 FDCAN发送异常的原因?

    标志。 开始以为是配置问题,网上搜索也没有搜到太多相关的信息,之后分别查看了H7-Tool、rtthread和ST官方例程,发现设置并没有问题,后面就重新生成了一个只有CAN模块的代码,这时问题不再
    发表于 03-07 08:42

    stm32f4 sdio时钟如何获取通过什么函数?

    stm32f4系列sdio 时钟如何获取,stm32h7可以通过sdmmc_clk=HAL_RCCEx_GetPeriphCLKFreq(STM32_RCC_PERIPHCLK_SDM
    发表于 03-07 08:26

    STM32CubeMX用于STM32配置和初始化C代码生成

    电子发烧友网站提供《STM32CubeMX用于STM32配置和初始化C代码生成.pdf》资料免费下载
    发表于 02-26 17:32 678次下载

    时钟配置来啦!HPMicro Tool Web v0.5.0 更新

    各位先楫的小伙伴们久等啦,先楫时钟配置工具跟随0.5.0版本正式上线啦!还有个好消息要告诉大家,我们已将先楫配置工具VSCode插件发布到了VSCode插件市场,各位小伙伴们再也不用手动安装插件了
    的头像 发表于 02-08 13:43 940次阅读
    <b class='flag-5'>时钟</b><b class='flag-5'>配置</b>来啦!HPMicro Tool Web v0.5.0 更新

    ADS1298的时钟相位和极性是什么?

    ADS1298的时钟相位和极性是什么,如果用STM32,它的时钟相位和极性应该如何配置
    发表于 02-08 08:22

    面向Switchtec和数据中心应用的预配置时钟发生器器件编号

    电子发烧友网站提供《面向Switchtec和数据中心应用的预配置时钟发生器器件编号.pdf》资料免费下载
    发表于 01-15 15:27 0次下载
    面向Switchtec和数据中心应用的预<b class='flag-5'>配置</b><b class='flag-5'>时钟</b>发生器器件编号

    雅特力AT32F402/F405时钟配置

    电子发烧友网站提供《雅特力AT32F402/F405时钟配置.pdf》资料免费下载
    发表于 01-15 15:24 0次下载
    雅特力AT32F402/F405<b class='flag-5'>时钟</b><b class='flag-5'>配置</b>

    一千余字解读stm32时钟

    转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径类似于大树的养分由主干流向各个分支,因此被称为时钟树。STM32内部也是由多种多样的电路模块组合在一起实现
    的头像 发表于 12-30 21:01 3227次阅读
    一千余字解读<b class='flag-5'>stm32</b><b class='flag-5'>时钟</b>树

    ADS58C48的输出给FPGA的时钟怎样产生的,是只要有输入时钟,就有输出时钟吗?

    : 1,ADS58C48如果想要实现基本的功能需要怎样配置寄存器?有没有相关FPGA配置程序可以参考一下? 2,ADS58C48的输出给FPGA的时钟怎样产生的,是只要有输入
    发表于 12-20 06:32

    STM32产生的1Mhz PWM波作为时钟信号,波形较差怎么解决?

    我用STM32产生的1Mhz PWM波作为时钟信号,波形较差,然后代码参考CSDN的一位博主的,当我读取校准电阻时,通过串口发送至电脑串口读取时,都是0,不知是何原因,寄存器的配置检查多次
    发表于 12-09 07:09