【STM32】时钟体系

一、时钟体系

为什么需要时钟?

  1. 时钟可以为系统提供精确的定时,比如时间显示,定时器,pwm…

  2. 为芯片各功能模块提供工作势能,使能各组管脚工作,如果不使能,管脚无法工作

  3. 同步数据传输

给单片机提供一个时钟信号(一个非常稳定的频率信号),使单片机各内部组件同步工作,并且在和外部设备通信时是也能达到同步。

动态调整运行频率,就可以控制性能与功耗!

1、参考手册 STM32F4xx 中文参考手册.pdf 第 106 页

2、时钟源

a.可以使用三种不同的时钟源来驱动系统时钟 (SYSCLK),CPU 运行的频率为 168MHz:

● HSI 振荡器时钟(16MHz),也就是高速内部时钟,一般来说很少用,因为精度没有外部高速时钟那么高。

● HSE 振荡器时钟,也就是高速外部时钟,GECM4 开发板 8MHz。

● 主 PLL (PLL) 时钟

b.器件具有以下两个次级时钟源:

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

● 32.768 kHz 低速外部晶振(LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)对于每个时钟源来说,在未使用时都可单独打开或者关闭,以降低功耗。

3、时钟树

时钟树就是关注时钟源和时钟的流向,嵌入式系统中的模块和外设工作都以时钟为基准。有了时钟树,就有了时钟域。嵌入式中除了内核,还有各个单元,每个单元工作在不同的时钟频率下,给每个单元提供不同的时钟。

实际应用中根据需要配置外设的时钟控制开关,选择需要的时钟频率,并可关闭不用外设时钟。

在这里插入图片描述

时钟树分析

在这里插入图片描述

51单片机和STM32时钟体系对比

在这里插入图片描述
二、PLL

2.1 概述

PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时钟信号,使高频器件正常工作,如内存的存取资料等。

PLL基于振荡器中的反馈技术,许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。

一般的晶振由于工艺与成本原因,做不到很高的频率,而在需要高频应用时,由相应的器件VCO,实现转成高频,但并不稳定,故利用锁相环路就可以实现稳定且高频的时钟信号。

2.2 基本组成

锁相环路是一种反馈控制电路,简称锁相环(PLL,Phase-Locked Loop)。锁相环的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位。因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。

锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。锁相环通常由鉴相器(PD,Phase Detector)、环路滤波器(LF,Loop Filter)和压控振荡器(VCO,Voltage Controlled Oscillator)三部分组成。

锁相环的工作原理是检测输入信号和输出信号的相位差,并将检测出的相位差信号通过鉴相器转换成电压信号输出,经低通滤波器滤波后形成压控振荡器的控制电压,对振荡器输出信号的频率实施控制,再通过反馈通路把振荡器输出信号的频率、相位反馈到鉴相器。

锁相环在工作过程中,当输出信号的频率成比例地反映输入信号的频率时,输出电压与输入电压保持固定的相位差值,这样输出电压与输入电压的相位就被锁住了。

在这里插入图片描述

2.3 类比说明

我们刚开始学车的时候,在道路上开车,眼睛就好像一个鉴相器,负责发现车行驶的方向(反馈)和前方的路(输入)是否有差别,把差别输入大脑进行判断,然后指挥双手旋转方向盘,旋转方向盘的动作转换成车的行驶方向,如下图所示。

在这里插入图片描述

我们通过这么一个闭环过程不断地调节方向盘,保证车行驶在正道上。

2.3 相位差

两个频率相同的交流电相位的差叫做相位差,或者叫做相差,又称“相角差”、“相差”、“周相差”或“位相差”。两个作周期变化的物理量的相之间的差值。它为正值时称前者超前于后者,为负值时则滞后于后者。它为零或π的偶数倍时,两物理量同相;为π的奇数倍时则称反相。

这两个频率相同的交流电,可以是两个交流电流,可以是两个交流电压,可以是两个交流电动势,也可以是这三种量中的任何两个。两个同频率正弦量的相位差就等于初相之差。是一个不随时间变化的常数。也可以是一个元件上的电流与电压的相位变化。任意一个正弦量y = Asin(wt+ j0)的相位为(wt+ j0),两个同频率正弦量的相位差(与时间t无关)。设第一个正弦量的初相为 j01,第二个正弦量的初相为 j02,则这两个正弦量的相位差为j12 = j01 - j02。

在这里插入图片描述

2.4 PLL配置参数

在这里插入图片描述

不同的芯片,倍频(频率翻倍)公式是不一样的,需要查询芯片手册!

三、SystemInit系统初始化函数

1.其实第一个执行的文件是汇编文件

  • 栈的初始化,提供函数调用的时候进行现场保护和现场恢复
  • 堆的初始化,为申请内存提供空间,调用malloc
  • 执行Reset_Handler,意思说上电复位后执行的动作
  • 执行SystemInit函数
  • 跳转到main函数

2.初始化Flash接口,更新PLL系统频率

/*** @brief  Setup the microcontroller system* Initialize the Embedded Flash Interface, the PLL and update the* SystemFrequency variable.* @param  None* @retval None*/void SystemInit(void){................/* Configure the System clock source, PLL Multiplier and Divider factors,AHB/APBx prescalers and Flash settings ----------------------------------*/SetSysClock();................}

3.调用SetSysClock函数设置PLL时钟,然后进行分频

/*** @brief  Configures the System clock source, PLL Multiplier and Divider factors,* AHB/APBx prescalers and Flash settings* @Note   This function should be called only once the RCC clock configuration  * is reset to the default reset state (done in SystemInit() function).   * @param  None* @retval None*/static void SetSysClock(void){...................../* Configure the main PLL */RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) |(RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24);.....................}system_stm32f4xx.c文件有以下倍频(PLL_N)与分频(PLL_M、PLL_P)因子:/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M      8     //(记得修改为8)
/* USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ */
#define PLL_Q      7#if defined (STM32F40_41xxx)
#define PLL_N      336
/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P      2
#endif /* STM32F40_41xxx */

由于官方的代码是使用外部高速晶振25MHz,VSTC-M4开发板是使用外部高速晶振8MHz,所以PLL的倍频因子要进行修改,只修改PLL_M为8

4.阅读system_stm32f4xx.c文件的头部注释

  •    ```c
    

    *=============================================================================
    *=============================================================================

    •                Supported STM32F40xxx/41xxx devices*-----------------------------------------------------------------------------
      
    •                System Clock source                    | PLL (HSE)*-----------------------------------------------------------------------------
      
    •                SYSCLK(Hz)                             | 168000000*-----------------------------------------------------------------------------
      
    •                HCLK(Hz)                               | 168000000*-----------------------------------------------------------------------------
      
    •                AHB Prescaler                          | 1*-----------------------------------------------------------------------------
      
    •                APB1 Prescaler                         | 4*-----------------------------------------------------------------------------
      
    •                APB2 Prescaler                         | 2*-----------------------------------------------------------------------------
      
    •                HSE Frequency(Hz)                      | 25000000   开发板外部晶振是8MHz,我们要将25MHz修改为8MHz*-----------------------------------------------------------------------------
      
    •                PLL_M                                  | 25*-----------------------------------------------------------------------------
      
    •                PLL_N                                  | 336*-----------------------------------------------------------------------------
      
    •                PLL_P                                  | 2*-----------------------------------------------------------------------------
      
    •                PLL_Q                                  | 7*-----------------------------------------------------------------------------
      
    •                PLLI2S_N                               | NA*-----------------------------------------------------------------------------
      
    •                PLLI2S_R                               | NA*-----------------------------------------------------------------------------
      
    •                I2S input clock                        | NA*-----------------------------------------------------------------------------
      
    •                VDD(V)                                 | 3.3*-----------------------------------------------------------------------------
      
    •                Main regulator output voltage          | Scale1 mode*-----------------------------------------------------------------------------
      
    •                Flash Latency(WS)                      | 5*-----------------------------------------------------------------------------
      
    •                Prefetch Buffer                        | ON*-----------------------------------------------------------------------------
      
    •                Instruction cache                      | ON*-----------------------------------------------------------------------------
      
    •                Data cache                             | ON*-----------------------------------------------------------------------------
      
    •                Require 48MHz for USB OTG FS,          | Disabled
      
    •                SDIO and RNG clock                     |*-----------------------------------------------------------------------------*============================================================================
      
    
    

去掉stm32f4xx.h的只读属性

在这里插入图片描述

接着修改stm32f4xx.h以下内容,行127将外部晶振频率值修改为8MHz。

   #if !defined  (HSE_VALUE)   #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */               

最后按照PLL的运算公式,最终得到输出频率为168MHz。

在这里插入图片描述

注意事项

1.在《STM32F4xx中文参考手册》 P117页,PLL_M、PLL_N、PLL_P,这三个参数都有一定的范围限制,详细如下:

​ 2≤ PLL_M ≤63 192≤ PLL_N ≤432 PLL_P:2、4、6、8

练习:
尝试将CPU频率设置为216MHZ,感受超频快感  HSE=8M M=8 N=432 P=2
尝试将CPU频率设置为84MHZ,感受蜗牛的速度  HSE=8M M=8 N=336 P=4

四、时钟源

在特殊的应用场景,为了达到最高的能效比,没有必要使用到PLL,可将HSE、HSI作为系统时钟源。例如,在智能手表锁屏的情况下,如果使用PLL配置过后输出的频率会造成过多的功耗,降低自身的续航能力;同时要维持计步与测量心率功能。因此,PLL在锁屏下的应用场景并不合适,在保证功能实现的前提下,尽可能降低功耗,可以切换频率更低的时钟源提供给系统时钟。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.选择PLL作为系统时钟源

 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));RCC->CFGR |= RCC_CFGR_SW_PLL;	               

2.选择HSI作为系统时钟源

RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC->CFGR |= RCC_CFGR_SW_HSI;	               

3.选择HSE作为系统时钟源

RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); 
RCC->CFGR |= RCC_CFGR_SW_HSE;               

在这里插入图片描述

练习:
在代码当中添加时钟源切换功能(支持 HSI、 HSE、 PLL), 观察流水灯运行速度的变化。

五、应用场景

调节 CPU 的运行频率,来控制系统的性能与功耗。比较典型的例子就是说手机/笔记本电脑都有高性能模式、平衡模式、低性能模式。

在这里插入图片描述

在这里插入图片描述

I

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/410789.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【使用 Python 进行截图的两种方法】

在 Python 中&#xff0c;可以使用 pyautogui 和 Pillow 进行截图 使用 pyautogui 进行截图时&#xff0c;其提供了方便的函数。例如&#xff0c;使用 pyautogui.screenshot() 函数可以获取整个屏幕的截图&#xff0c;该函数返回一个包含屏幕截图的图像对象。如果不想截取整个…

齐护【百度AI对话】编程系统文心一言大语音模型对话ESP32图形化Mixly编程Scratch编程Arduino

齐护【百度AI对话】编程系统 一、前言 ​ 在这个日新月异的时代&#xff0c;AI的触角已延伸至互联网、金融、医疗、教育等每一个角落&#xff0c;其影响力不容忽视。从日常中的智能推荐到医疗前沿的精准诊断&#xff0c;从定制化教育到智能化的投资策略&#xff0c;AI正以前所…

Xilinx高速接口之GTP

简介 开坑计划中&#xff0c;主要参考ug482 主要讲解结构以及原语 以及时钟路由和一些其他的 GTP_COMMON还好&#xff0c;需要设置的不多&#xff0c;原语也短&#xff0c; GTP_CHANNEL需要设置的东西真多&#xff0c;原语也长 还好有官方参考例程以及自动生成的原语例化 不然…

PDF文件的读取与合并:使用PyPDF2与ReportLab

目录 一、PyPDF2库基础 1.1 PyPDF2简介 1.2 安装PyPDF2 1.3 读取PDF内容 1.4 合并PDF文件 二、ReportLab库基础 2.1 ReportLab简介 2.2 安装ReportLab 2.3 使用ReportLab生成PDF文本 2.4 ReportLab 与 PyPDF2 结合使用 三、注意事项与最佳实践 3.1 文本提取的局限性…

【Linux】初步识操作系统

linux专栏&#xff1a;《Linux入门系列》 系列文章&#xff1a;gdb-调试器初入门&#xff08;简单版使用&#xff09; 编辑器vim入门&#xff08;概念模式转换技巧&#xff09; 目录 1. 概念 2. 设计操作系统的目的 3. 定位&#xff1a;操作系统负责管理 4. 如何理解管理 …

科研绘图系列:R语言单细胞差异基因四分图(Quad plot)

介绍 在单细胞分析领域,为了探究不同分组间同一细胞类型的基因表达差异,研究者们常采用四分图(Quad Plot)作为分析工具。该图形的横轴代表比较组1,而纵轴代表比较组2。通过这种布局,四分图能够有效地展示两组间共有的差异表达基因,从而为深入理解细胞类型在不同条件下的…

Android 突破边界:解密google Partner机制获取Resource

在 Android 应用开发中&#xff0c;除了可以查找系统中的特定 APK 并获取其信息外&#xff0c;还可以通过 Partner 机制获取 Partner APK 的资源文件&#xff0c;同时这种机制也是一种跨进程的通信方式。本文将进一步探讨这些内容。 1.Partner apk注册特定的action广播 /** M…

优雅实现远程调用-OpenFeign

目录 OpenFeign介绍 OpenFeign最佳实践 我再来遇到个问题&#xff0c;我创建的com.xx.xxx包&#xff0c;放到一起了&#xff0c;不是那种一个在一个下面的那种 Nacos&#xff0c;只要看见这种什么网络报错啥的&#xff0c;java.net.SocketException: Network is unreachabl…

Vatee万腾平台:打造企业智能化转型的坚实后盾

在当今这个日新月异的数字化时代&#xff0c;企业智能化转型已成为不可逆转的趋势。面对激烈的市场竞争和快速变化的市场需求&#xff0c;如何高效、稳定地完成这一转型&#xff0c;成为众多企业亟需解决的问题。而Vatee万腾平台&#xff0c;正是这样一位引领企业智能化转型的坚…

MATLAB进阶:应用微积分

今天我们继续学习matlab中的应用微积分 求导&#xff08;微分&#xff09; 1、数值微分 n维向量x(xi&#xff0c;x,… x)的差分定义为n-1维向量△x(X2-X1&#xff0c;X3-X2&#xff0c;…&#xff0c;Xn- Xn-1)。 diff(x) 如果x是向量&#xff0c;返回向量x的差分如果x是矩…

《机器学习》—— OpenCV 对图片的各种操作(均值、方框、高斯、中值滤波处理)

文章目录 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理2、给图像边缘增加边框3、对图片进行阈值化操作 1、对有椒盐噪声的图片进行均值、方框、高斯、中值滤波处理 均值滤波 cv2.blur是 OpenCV 库中的一个函数&#xff0c;用于对图像进行均值模糊处理。这个函数通…

webserver.h详解

webserver.h头文件 成员变量&#xff1a; 目的是提供一个完整的Web服务器框架&#xff0c;包括网络监听、事件处理、数据库连接管理、线程池管理等功能。 #ifndef WEBSERVER_H #define WEBSERVER_H#include <sys/socket.h> #include <netinet/in.h> #include <…

算法学习-基础数据结构

基础数据结构 一.栈 1.普通栈 套路&#xff1a;从前往后遍历 需要考虑相邻元素 有消除操作 栈。 2.单调栈 二.队列 1.普通队列 2.优先队列 三.Trie 使用场景&#xff1a;可以求某个字符串在众多字符串中出现的次数&#xff0c;以某个字符串为前缀出现的次数 Trie中…

一. 初始 Spring Boot

一. 初始 Spring Boot 文章目录 一. 初始 Spring Boot1. Spring Boot 是什么&#xff1f;2. Spring Boot 官方文档地址3. 第一个 Spring Boot 程序3.1 我的环境工具配置 4. 第一个 SpringBoot 程序解释说明5. Spring&#xff0c;SpringMVC&#xff0c; SpringBoot 三者的关系6.…

Linux中的常见命令——用户管理命令

1、useradd添加新用户 基本语法 语法功能描述useradd 用户名添加新用户useradd -g 组名 用户名添加新用户到某个组 实操案例 1、添加一个新用户【此时的用户是没有密码的】 [rootcentos100 ~]# cd /home [rootcentos100 home]# ls www zss [rootcentos100 home]# useradd…

设置虚拟机使用主机以太网而不是WiF连接

虚拟机使用主机的以太网连接而不是Wi-Fi连接&#xff0c;可以通过在虚拟化软件中配置虚拟机的网络设置来实现。以下是一些常见的虚拟化软件&#xff08;如VMware和VirtualBox&#xff09;中设置虚拟机网络以使用以太网连接的步骤&#xff1a; 一、VMware中设置 1、打开虚拟网…

查询系统操作指南

在年会等大型活动中&#xff0c;快速准确地查询桌号和座位号对于参与者来说至关重要。本文将详细介绍如何使用查询系统来实现这一目的。步骤一&#xff1a;电脑端信息上传 1. 访问官网&#xff1a;打开云分组的官方网站。 2. 登录账户&#xff1a;使用微信扫码的方式进行登录。…

《JavaEE进阶》----3.<SpringBoot项目创建细节大全+打jar包运行>

本篇博客讲解了 创建Spring Boot项目的各种方法及创建细节、还有项目中目录和代码的简单介绍、启动项目、换端口号、Web服务器简介、HTTP状态码、以及用Maven打jar包运行。 什么是Spring Spring让开发Java工程项目变得更快、更简单、更安全。 它专注于开发工程时的速度、简化…

Kafka命令详解:从零开始,掌握Kafka集群管理、主题操作与监控的全方位技能,理解每一条命令背后的逻辑与最佳实践

本文主要是关于Kafka的命令详解&#xff0c;每个命令都进行了非常详细的注释&#xff0c;帮助大家能更好的理解这些命令背后的含义&#xff0c;从底层去理解&#xff0c;如果大家喜欢&#xff0c;请多多点赞关注&#xff0c;欢迎评论&#xff01; 为大家推荐几篇比较好的Kafka文…

【第0002页 · 枚举】月月查华华的手机

【前言】本文以及之后的一些题解都会陆续整理到目录中&#xff0c;若想了解全部题解整理&#xff0c;请看这里&#xff1a; 第0002页 月月查华华的手机 不知道在看的各位有没有被家里人查过手机呢&#xff1f;如果有&#xff0c;想必今天你会感同身受一些。我们现在要来看一道…