时钟配置代码(时钟配置代码怎么写)

时钟配置代码(时钟配置代码怎么写)最近我在移植实时系统是遇到了一些问题 所以决定深入了解系统时钟的配置过程 当然想要学好 stm32 的小伙伴也有必要学习好时钟系统的配置 所以我将学习的过程再次记录 有写得不好的地方 望小伙伴指出 之前我已经记录过一篇关于时钟系统的文章 对程序中不了解的地方可以看我之前的笔记 STM32 时钟系统的配置寄存器和源码分析 这里我用的芯片是 STM32F103C8T

大家好,我是讯享网,很高兴认识大家。



最近我在移植实时系统是遇到了一些问题,所以决定深入了解系统时钟的配置过程,当然想要学好stm32的小伙伴也有必要学习好时钟系统的配置,所以我将学习的过程再次记录,有写得不好的地方,望小伙伴指出。

之前我已经记录过一篇关于时钟系统的文章,对程序中不了解的地方可以看我之前的笔记“STM32时钟系统的配置寄存器和源码分析”。

这里我用的芯片是STM32F103C8T6,用的库函数是厂家提供的案例中提取出来的,这里可能和其他型号的mcu有细微差别,但是原理都是一样的。

当系统复位信号发生的时候,程序将执行复位中断函数,而在复位中断函数中是先执行SystemInit函数后在执行__main函数,如下图所示:

讯享网

系统调用SystemInit函数后完成系统时钟的配置,系统时钟配置的过程如下所示:

从图中可知,在系统时钟配置的第三步有多个函数可以选择,这里可以根据自己的需求选择相应的配置流程,只需要在stm32f10x.h文件中定义相应的宏即可(默认配置为72MHz),如下图所示:

在分析程序之前,需要了解一下相关寄存器的地址以及相应寄存器的作用,如下所示:

 

讯享网

以上的寄存器都是相对RCC寄存器进行偏移的,如下图所示:

程序如下所示:

讯享网

从上面的代码可以看出,和库函数中的RCC_DeInit所执行的代码一下,所以在用户程序中需要从新配置系统时钟的话,不需要通过上面的代码将时钟配置为默认状态,只要调用RCC_DeInit函数即可。如下图所示:

有不明白的地方只需要和相应的寄存器对应一下即可,相关的寄存说明请看“STM32时钟系统的配置寄存器和源码分析”。

 

这是根据文件中的宏定义选择相应的系统时钟配置函数,有需要更改的直接定义相应的宏即可,系统默认是的72MHz

讯享网
  • 使能外部高速时钟
     

    从定义为文件中可知RCC_CR_HSEON为0x00010000,也就是CR寄存器的第17位为1。HSEStartUp_TimeOut为0x0500表示HSE启动超时,也就是说如下图所示:

    注意:执行完上面程序后,接着判断外部时钟是否就绪,只要当外部时钟就绪后才执行后面的流程,否成启动失败,程序将卡在while位置

  • FLASH处理

    讯享网

    由于CPU的速度比flash的速度要快,所以这里需要让cpu等待两个时钟

  • 设置AHB、APB1、APB2预分频的值
     

    从注释中可知AHB和APB2的预分频为1,APB1的预分频为2(因为PCLK1的最大频率为36MHz)

  • 设置PLL的时钟源和倍频
    讯享网

    第一行代码的作用是将CFGR的[16:21]寄存器复制为0,第二行是将HSE设置为PLL的时钟源,HSE分频器不分频,PLL倍频系数设置为9

  • 使能PLL时钟
     

    使能PLL时钟,并等待PLL时钟就绪

  • 设置PLL作为系统时钟源
    讯享网

    设置PLL作为系统时钟源,并判断是否成功

注意: SetSysClockTo72函数的作用是配置HCLK为72MHz、PCLK1为36MHz、PCLK2为72MHz,如下图所示:

头文件是stm32f10x_rcc.h,源文件是stm32f10x_rcc.c

  1. 时钟使能配置
     
  2. 时钟相关配置
    讯享网
  3. 其他时钟配置
     
讯享网

从以上程序可知,不论是通过对寄存器还是通过库函数配置系统时钟的流程都是一样的,所以在后续需要更改系统时钟时可以通过上面的这个库函数试试。

(野火STM32)16-RCC(第3节)使用HSE配置系统时钟并使用MCO输出监控系统时钟:https://www.bilibili.com/video/BV1ja41187Jq?spm_id_from=333.999.0.0
【STM32】系统时钟RCC详解(超详细,超全面):https://blog.csdn.net/as/article/details/
《STM32中文参考手册》

小讯
上一篇 2025-06-07 12:51
下一篇 2025-04-17 13:50

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/183324.html