目录

1 前言

2 时钟系统介绍

3 时钟源

3.1 系统时钟源

3.2 次级时钟源

3.3 时钟源特点

4 时钟

4.1 AHB总线时钟

4.2 APB1总线时钟

4.3 APB2总线时钟

5 时钟控制器

6 CubeMx配置时钟系统

6.1 选择单片机型号

6.2 选择时钟源

6.3 配置系统时钟

6.4 时钟系统初始化代码

7 结论

1 前言

STM32的时钟系统比较复杂,初学者一看时钟树必然蒙圈,我该怎么用?怎么设置?搞不懂,就根据开发板源码很快完成设置,虽然能用起来,碰到问题或自己改代码时必然蒙圈。要做好底层驱动设计,还是要对STM32的时钟有深入的理解,本文将为大家详细介绍STM32的时钟。

2 时钟系统介绍

STM32的时钟系统由三大部分组成:时钟源、时钟控制器、时钟。

时钟源是产生时钟信号的电路,可以是晶振、RC震荡电路,产生方波信号,由时钟控制器分频或倍频后作为内核或外设的时钟。

时钟可以理解为给外设提供工作频率的方波信号,该方波信号的频率是时钟源的倍频或分频。

时钟控制器介于时钟源和时钟之间,对时钟源进行选择、分频、倍频控制,为内核及外设提供时钟。

STM32F407的系统时钟框图如图 1所示,时钟控制器将HIS、HSE、主PLL时钟源转化为内核及外设所需的时钟,接收外部I2S时钟、PHY以太网时钟、USBPhy时钟,为I2S、MAC、USB等外设提供时钟。时钟控制器还提供2路时钟输出MCO1和MCO2,最大输出频率100MHz。

图 1 STM32F407时钟系统框图

STM32F407的系统时钟树如图 2所示。

图 2 STM32F407时钟树

3 时钟源

STM32的时钟源由系统时钟源和次级时钟源组成。

3.1 系统时钟源

STM32单片机可以使用三种不同的时钟源来驱动系统时钟 (SYSCLK),三种时钟源分别为:

● HSI 振荡器时钟

● HSE 振荡器时钟

● 主 PLL (PLL) 时钟

注意这里说的HIS、HSE或主PLL提供的是系统时钟(SystemClk),对于单片机而言,时钟源只有HSI或HSE,主PLL的时钟源也是HSI或HSE,经过PLL倍频后作为系统时钟的时钟源,提供高于HIS、HSE时钟频率的时钟源。将STM32F407的时钟树系统时钟源简化后的框图如图 2所示。

图 3 系统时钟源框图

3.2 次级时钟源

STM32单片机器件具有两个次级时钟源,分别为:

● 32 kHz 低速内部 RC (LSI RC)。该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用于停机/待机模式下的自动唤醒。

● 32.768 kHz 低速外部晶振( LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)。

3.3 时钟源特点

每个时钟源都可单独打开或者关闭,不用时关闭时钟源以降低功耗。

时钟控制器为应用带来了高度的灵活性,用户在运行内核和外设时可选择使用外部晶振或者使用振荡器,既可采用最高的频率,也可为以太网、 USB OTG FS 以及 HS、 I2S 和 SDIO等需要特定时钟的外设保证合适的频率。

4 时钟

通过前文介绍,了解到STM32F407的时钟包括以太网ptp时钟、系统时钟SystemClk、AHB时钟、APB时钟等。APB时钟分为高速 APB (APB2) 和低速 APB (APB1),时钟控制器可对这些时钟的频率进行配置。这些时钟为单片机的AHB总线、AHB1总线、APB1总线、APB总线提供工作时钟,各外设分别连接到各个总线上,获得相应的工作时钟,时钟频率收到总线工作时钟最大频率限制。以STM32F407为例,AHB 的最大频率为 168 MHz,低速 APB1 的最大允许频率为 42 MHz,高速 APB2 的最大允许频率为 84 MHz。

STM32F407总线如图 4所示。

图 4 STM32F407总线

4.1 AHB总线时钟

AHB 总线时钟的最大频率为系统时钟SystemClk,以STM32F407为例,最大为 168 MHz。AHB总线的外设如图 5所示。

图 5 AHB总线外设

4.2 APB1总线时钟

APB1为APB低速总线,最大频率为系统时钟SystemClk的4分频,以STM32F407为例,最大为 42MHz。APB1总线的外设如图 6所示。

图 6 APB1总线外设

4.3 APB2总线时钟

APB2为APB高速总线,最大频率为系统时钟SystemClk的2分频,以STM32F407为例,最大为 84MHz。APB2总线的外设如图 7所示。

图 7 APB2总线外设

5 时钟控制器

STM32单片机的时钟控制通过配置RCC时钟控制寄存器、RCC PLL配置寄存器、RCC时钟配置寄存器、RCC时钟中断寄存器、RCC外设复位寄存器、RCC外设时钟寄存器等组成。这里不在赘述,详细可查阅《STM32F4xx参考手册》。

6 CubeMx配置时钟系统

6.1 选择单片机型号

NewProjectà选择单片机型号,以STM32F407为例。如图 8所示。

图 8 选择单片机型号

6.2 选择时钟源

如图 9所示,标注1的为时钟源选项,可以设置HSE、LSE,如选择Disable,则配置为内部RC振荡器,如选择外部晶体振荡器,则硬件上需设计有晶振支持,这里选择为外部晶振。

标注2为配置是否允许MCO1、MCO2时钟输出,这里未允许。标注3为配置是否允许I2S外部时钟输入,这里未允许。

图 9 时钟源选择

6.3 配置系统时钟

STM32F407最大允许系统时钟168M,其配置方法如下:

  • 选择Clock Configuration选项卡。
  • 选择HSE。
  • 选择PLLCLK
  • 设置HCLK为168MHz

如图 10所示,可查询到系统时钟、APB1、APB2等总线时钟,方便外设使用时的时钟设置。

图 10 系统时钟配置

6.4 时钟系统初始化代码

时钟系统初始化相关函数如表 1所示

表 1 时钟系统初始化相关函数

序号

函数名称

函数功能说明

1

SystemClock_Config(void)

系统时钟配置

代码具体如下:

void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct;RCC_ClkInitTypeDef RCC_ClkInitStruct;/**Configure the main internal regulator output voltage */__HAL_RCC_PWR_CLK_ENABLE();__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);/**Initializes the CPU, AHB and APB busses clocks */RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLM = 25;RCC_OscInitStruct.PLL.PLLN = 336;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLQ = 4;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){_Error_Handler(__FILE__, __LINE__);}/**Initializes the CPU, AHB and APB busses clocks */RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK){_Error_Handler(__FILE__, __LINE__);}/**Configure the Systick interrupt time */HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);/**Configure the Systick */HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);/* SysTick_IRQn interrupt configuration */HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}

7 结论

看过本文后,相信您对复杂的时钟系统有了新的认识,在未来的设计中,不会因为STM32的复杂时钟踩坑。请关注博主,学习更多实战经验,后续会陆续推出更多实战经验,还请多多关注、批评指正!

【STM32】初学者必读STM32时钟系统详解相关推荐

  1. STM32开发 -- 时钟系统详解

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/81558649 上一篇文章讲了RTC,里面其实已经包含了时钟系统的介绍了.这篇 ...

  2. stm32内部低速rtc_STM32时钟RCC详解

    时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令.时钟系统就是CPU的脉搏,决定cpu速率,像人的心跳一样只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令,才能 ...

  3. ARM芯片的时钟系统详解(S5PV210芯片)

    1.时钟介绍 时钟是同步工作系统的同步节拍,时钟的快慢就是我们常说的工作频率,以赫兹(HZ)为单位.时钟系统指导器件的运行,我们分析器件的工作特性时,常常会看器件的时序图,时序图中的时钟周期就是时钟系 ...

  4. S3C2440时钟系统详解

    在讲述系统时钟之前,因为这些设备都是挂靠在系统时钟上的,所以必须先说系统时钟,S3C2440的时钟系统如下 外部时钟源分两种,晶振或者外部频率,由om3-2选择,时钟电路根据两种选择也有两种 我们来分 ...

  5. 【初学者必读】—PowerShell 基础详解及设置

    目录 一.关于PowerShell 1.什么是PowerShell 2.如何打开PowerShell 二.PowerShell脚本的编写与执行

  6. 【STM32学习】时钟配置详解

    [STM32学习]时钟配置详解 看懂时钟图 结合代码 外部高速时钟修改 看懂时钟图 在刚开始学习32的时候,并不会在意这些,或者即使看了也看的不是很明白.随着学习的深入,我们发现看门狗.定时器.ADC ...

  7. STM32最小系统详解

    STM32最小系统详解 1. 电源电路 2. 晶振电路 3. 复位电路 4. 下载电路(串口下载) 本文章将以普中的STM32F103系列的开发板为载体,任何一款STM32开发板都是在其最小系统基础上 ...

  8. STM32应用IAP进行程序更新详解及实例

      这是以前就想写的一个小专题关于IAP,以及IAP在STM32编程的应用,专题分三小节,主要介绍常见的单片机烧录方式,IAP的实际应用,以及Ymodem协议在IAP编程中应用,在笔记吃灰很久了,终于 ...

  9. Cubemx与HAL库系列教程|系统时钟配置详解及源码分析

    STM32时钟系统简介 STM32种类繁多,时钟系统也不尽相同,但基本的还是大差不差,今日小飞哥就F1系列的MCU简单聊一聊STM32的时钟系统 1.时钟种类介绍: 先来看一看时钟树图,包含了整个系统 ...

最新文章

  1. 这还是你所认知的Python吗?原来是这么牛!
  2. unix实际用户ID和有效用户ID解析
  3. JavaScript toFixed(num) 函数
  4. 使用redis来实现分布式锁
  5. xnio java_java基础篇---新I/O技术(NIO)
  6. 舍不得删的12个优质公号
  7. Launchy – 快速调出你的程序
  8. booleanfield()和booleanfield(default=True)在数据库的表中无法插入
  9. React H5图片压缩上传
  10. 搭建无线监控云存储服务器,搭建无线监控云存储服务器
  11. 百度云c++语言模拟器,C++语言基础教程
  12. android * 工程模式,什么是Android手机的工程模式
  13. css3,环绕圆环 loading,小组件
  14. 微信消息能在服务器上彻底清除,快速彻底删除微信消息的方法如此简单 很多人都用错了方法!...
  15. 如何利用一篇高质量软文文案进行网络推广|媒介启航
  16. 中职计算机技能,中职计算机专业技能竞赛规则
  17. Exp 8 Web基础 20164318 毛瀚逸
  18. 安装 Ubuntu 和 CentOS 双系统
  19. iOS开发-常用第三方开源框架介绍(2)
  20. arcgis10.6安装失败

热门文章

  1. 游戏背后的设计之路——3D建模
  2. 恭喜微微软喜当爹,Github嫁入豪门。
  3. FloodLight开发者文档四(译文)
  4. 树莓派python智能家居英文参考文献_Home Assistant + 树莓派:强大的智能家居系统 · 小米篇...
  5. python输入数组_Python输入数组(一维数组、二维数组)
  6. 物业管理系统,物业软件
  7. c程序设计:编写一个程序,输入一个大写字母,输出其小写字母
  8. serachview的功能和用法
  9. 第五届B组传智杯初赛题解
  10. 2022年JDK8U321压缩版