当前位置: 首页 > news >正文

嵌入式硬件篇---HAL库内外部时钟主频锁相环分频器


文章目录

  • 前言
  • 第一部分:STM32-HAL库
    • HAL库编程
      • 优势
        • 1.抽象层
        • 2.易于上手
        • 3.代码可读性
        • 4.跨平台性
        • 5.维护和升级
        • 6.中间件支持
      • 劣势
        • 1.性能
        • 2.灵活性
        • 3.代码大小
        • 4.复杂性
    • 直接寄存器操作编程
      • 优势
        • 1.性能
        • 2.灵活性
        • 3.代码大小
        • 4.学习深度
      • 劣势
        • 1.复杂性
        • 2.可读性
        • 3.可维护性
        • 4.跨平台性
    • 总结
  • 第二部分:STM32内部、外部时钟
    • 内部时钟
      • 1.RC振荡器(HSE)
      • 2.精准内部振荡器(LSI)
      • 3.系统振荡器(MSI)
    • 外部时钟
      • 1.晶振/陶瓷谐振器(HSE)
      • 2.外部时钟输入(HSE bypass)
    • 时钟系统特点
      • 1.稳定性和精度
      • 2.系统启动
      • 3.灵活性
      • 4.时钟树
  • 第三部分:STM32主频&锁相环&分频器
    • STM32的主频
      • 1.主频范围
      • 2.时钟源
    • 锁相环(PLL)
      • PLL的工作原理
        • 1.输入
        • 2.倍频
        • 3.分频
        • 4.相位锁定
      • PLL配置
        • 1.预分频器
        • 2.倍频因子
        • 3.系统时钟分频器
    • 分频器
      • 分频器类型
        • 1.AHB分频器
        • 2.APB分频器
        • 3.其他分频器
      • 分频器设置
    • 示例配置
  • 总结


前言

以上就是今天要讲的内容,本文简单介绍了STM32的HAL库、内外部时钟、微控制器主频、锁相环PPL、分频器相关知识。


第一部分:STM32-HAL库

STM32的HAL(Hardware Abstraction Layer)库是由ST公司提供的一套中间件,用于简化STM32微控制器的编程。除了HAL库之外,另一种常见的编程方法是直接使用寄存器操作,也称为**“裸机编程”或“寄存器级编程”**。以下是两种方法的优缺点详细解释:

HAL库编程

优势

1.抽象层

抽象层:
HAL库提供了一套硬件抽象层,使得开发者不需要直接操作硬件寄存器,降低了编程复杂度。

2.易于上手

易于上手:
对于初学者或需要快速开发的工程师来说,HAL库更容易上手。

3.代码可读性

代码可读性:
HAL库函数通常具有自解释的名称,提高了代码的可读性。

4.跨平台性

跨平台性:
使用HAL库编写的代码可以在不同的STM32系列之间轻松迁移

5.维护和升级

维护和升级:
ST公司定期更新HAL库,修复bug并增加新功能,使得维护和升级更为方便。

6.中间件支持

中间件支持:
HAL库通常与ST提供的其他中间件(如RTOS、USB、Ethernet等)集成良好。

劣势

1.性能

性能:
HAL库可能会引入额外的开销,导致性能不如直接操作寄存器。

2.灵活性

灵活性:
HAL库提供的抽象可能会限制对硬件的某些高级操作

3.代码大小

代码大小:
HAL库可能会增加最终程序的代码大小,对于资源有限的微控制器来说可能是个问题。

4.复杂性

复杂性:
对于简单的应用,HAL库可能显得过于复杂,增加了不必要的代码和配置。

直接寄存器操作编程

优势

1.性能

性能:
直接操作寄存器可以编写出性能最优的代码,因为没有额外的抽象层开销。

2.灵活性

灵活性:
开发者可以完全控制硬件的每一个细节,实现更精细的操作。

3.代码大小

代码大小:
直接操作寄存器通常可以生成更小的代码,节省存储空间。

4.学习深度

学习深度:
通过直接操作寄存器,开发者可以更深入地理解微控制器的内部工作原理。

劣势

1.复杂性

复杂性:
直接操作寄存器需要开发者对硬件有深入的了解,编程难度较高。

2.可读性

可读性:
寄存器操作的代码可能不如HAL库代码直观,可读性较差

3.可维护性

可维护性:
由于代码更接近硬件,维护和升级可能会更加困难。

4.跨平台性

跨平台性:
直接操作寄存器的代码通常不具备跨平台性,迁移到不同的STM32系列可能需要大量修改。

总结

选择HAL库编程还是直接寄存器操作编程,取决于项目的具体需求、开发者的经验以及对性能和资源的要求。对于大多数应用,HAL库提供了足够的性能和方便的接口适合快速开发和维护。而对于那些对性能和资源有极端要求的应用直接操作寄存器可能是更好的选择。在实际开发中,开发者也可能会结合使用这两种方法,以实现最佳的开发效率和性能。

第二部分:STM32内部、外部时钟

STM32微控制器支持多种时钟源,以供系统时钟(SYSCLK)使用。这些时钟源可以分为两大类:内部时钟和外部时钟。

内部时钟

1.RC振荡器(HSE)

高速内部时钟(HSI):
HSI是一个内部RC振荡器,通常频率为16 MHz。
不需要外部时钟元件,因此可以降低成本和电路复杂性。
HSI的精度相对较低,通常在1%左右,但在某些STM32系列中,可以通过内部校准提高精度

2.精准内部振荡器(LSI)

低速内部时钟(LSI):
LSI是一个低功耗、低精度的RC振荡器,通常用于实时时钟(RTC)或者其他对时钟精度要求不高的应用
频率一般在32 kHz左右。

3.系统振荡器(MSI)

多速内部时钟(MSI):
MSI是一个可编程的内部RC振荡器可以在多种频率下工作,通常范围在65 kHz到4 MHz之间
它的精度可以通过软件校准来提高。
MSI特别适用于低功耗应用,因为它可以在低频率下工作,从而降低功耗。

外部时钟

1.晶振/陶瓷谐振器(HSE)

高速外部时钟(HSE):
HSE是一个外部时钟源,可以通过连接一个晶振或陶瓷谐振器到HSE引脚来使用。
它可以提供更高的精度,通常在几十ppm(百万分之几十)。
频率范围通常在4 MHz到32 MHz之间。

2.外部时钟输入(HSE bypass)

外部时钟输入:
HSE也可以通过外部时钟信号直接输入,这称为HSE bypass模式。
在这种模式下,外部时钟源可以是另一个微控制器的时钟输出、时钟发生器等。

时钟系统特点

1.稳定性和精度

内部时钟:通常精度较低,但无需外部元件,成本较低
外部时钟:通常精度较高,但需要**外部晶振或谐振器,**成本相对较高。

2.系统启动

在系统启动时,STM32通常会使用**HSI(高速内部时钟)**作为默认时钟源,随后可以通过软件配置切换到其他时钟源。

3.灵活性

STM32的时钟系统非常灵活,允许在运行时动态地改变时钟配置,以适应不同的运行模式,比如低功耗模式或高性能模式

4.时钟树

STM32具有复杂的时钟树,可以通过多个PLL(锁相环)和分频器来生成多个时钟,用于不同的外设和内核
选择使用内部时钟还是外部时钟,取决于具体的应用需求,如精度、成本、功耗和电路复杂性等因素。通常,对于精度要求高的应用,如通信系统,会使用外部时钟源;而对于成本敏感或低功耗的应用,内部时钟源可能是更好的选择。

第三部分:STM32主频&锁相环&分频器

STM32的主频

主频是指微控制器(MCU)中央处理单元(CPU)时钟频率,它决定了CPU执行指令的速度。STM32微控制器的主频可以通过多种方式配置,以下是一些关键点:

1.主频范围

STM32系列微控制器的主频范围很广,从几MHz到几百MHz不等,具体取决于所使用的STM32型号
例如,STM32F0系列的主频最高可达48 MHz,而STM32H7系列的主频可以高达400 MHz。

2.时钟源

主频的来源可以是内部时钟源(如HSI、MSI)或外部时钟源(如HSE)。
主频也可以通过锁相环(PLL)来倍频,以获得更高的CPU操作速度。

锁相环(PLL)

锁相环(PLL)是一种反馈控制系统,它能够生成一个频率和相位与输入信号同步的输出信号。在STM32中,PLL用于提高时钟频率。

PLL的工作原理

1.输入

输入:PLL通常接收来自**内部或外部时钟源(如HSI、HSE)**的信号作为输入。

2.倍频

倍频:通过PLL的倍频器,可以将输入频率乘以一个整数称为PLL倍频因子),以获得更高的输出频率。

3.分频

分频:在倍频之后,输出频率可以被一个分频器分频,以获得所需的频率。

4.相位锁定

相位锁定:PLL内部有一个相位-频率检测器(PFD),它比较输入信号和输出信号的相位和频率,通过反馈环路调整VCO(压控振荡器)的频率,使得输出信号的相位和频率与输入信号同步。

PLL配置

STM32的PLL配置通常通过时钟配置寄存器来完成,可以设置以下参数:

1.预分频器

预分频器(PREDIV):对输入时钟进行预分频,以降低VCO的工作频率。

2.倍频因子

倍频因子(M):设置PLL的倍频倍数

3.系统时钟分频器

系统时钟分频器(N):对PLL的输出进行分频,以得到系统时钟(SYSCLK)。

分频器

分频器用于降低时钟频率,它在STM32的时钟系统中扮演着重要角色。

分频器类型

1.AHB分频器

AHB分频器:用于生成AHB总线时钟(HCLK),这个时钟用于大部分外设和内存。

2.APB分频器

APB分频器:进一步分频AHB时钟,生成APB1和APB2时钟,这些时钟用于低速外设

3.其他分频器

其他分频器:例如,为特定的外设(如USB、SDIO)提供特定频率的时钟。

分频器设置

分频器的配置通常通过时钟控制寄存器来完成。
分频因子通常是2的幂,例如,1、2、4、8等,具体取决于微控制器的型号。

示例配置

以下是一个STM32时钟配置的简化示例:

  1. HSE(外部晶振)作为时钟源,频率为8 MHz
  2. PLL配置:
    预分频器(PREDIV)设置为1,因此VCO的输入频率为8 MHz。
    倍频因子(M)设置为9,因此VCO的输出频率为72 MHz。
    系统时钟分频器(N)设置为1,因此PLL的输出频率(即系统时钟(SYSCLK))为72 MHz。
    AHB分频器设置为1,因此HCLK也为72 MHz。
    APB1分频器设置为2,因此PCLK1(APB1时钟)为36 MHz。
    APB2分频器设置为1,因此PCLK2(APB2时钟)为72 MHz。
    这样的配置可以
    确保CPU和各个外设以适当的频率运行
    ,以满足应用需求。需要注意的是,具体的
    寄存器配置和可用的分频因子
    会根据不同的
    STM32系列和型号
    有所不同。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了STM32的HAL库、内外部时钟、微控制器主频、锁相环PPL、分频器相关知识。

相关文章:

嵌入式硬件篇---HAL库内外部时钟主频锁相环分频器

文章目录 前言第一部分:STM32-HAL库HAL库编程优势1.抽象层2.易于上手3.代码可读性4.跨平台性5.维护和升级6.中间件支持 劣势1.性能2.灵活性3.代码大小4.复杂性 直接寄存器操作编程优势1.性能2.灵活性3.代码大小4.学习深度 劣势1.复杂性2.可读性3.可维护性4.跨平台性…...

【IoCDI】_@Bean的参数传递

目录 1. 不创建参数类型的Bean 2. 创建一个与参数同类型同名的Bean 3. 创建多个与参数同类型,其中一个与参数同名的Bean 4. 创建一个与参数同类型不同名的Bean 5. 创建多个与参数同类型但不同名的Bean 对于Bean修饰的方法,也可能需要从外部传参&…...

[特殊字符] ChatGPT-4与4o大比拼

🔍 ChatGPT-4与ChatGPT-4o之间有何不同?让我们一探究竟! 🚀 性能与速度方面,GPT-4-turbo以其优化设计,提供了更快的响应速度和处理性能,非常适合需要即时反馈的应用场景。相比之下,G…...

【模型】Bi-LSTM模型详解

1. 模型架构与计算过程 Bi-LSTM 由两个LSTM层组成,一个是正向LSTM(从前到后处理序列),另一个是反向LSTM(从后到前处理序列)。每个LSTM单元都可以通过门控机制对序列的长期依赖进行建模。 1. 遗忘门 遗忘…...

directx12 3d开发过程中出现的报错 一

报错:“&”要求左值 “& 要求左值” 这个错误通常是因为你在尝试获取一个临时对象或者右值的地址,而 & 运算符只能用于左值(即可以放在赋值语句左边的表达式,代表一个可以被引用的内存位置)。 可能出现错…...

Ubuntu 24.04 安装 Poetry:Python 依赖管理的终极指南

Ubuntu 24.04 安装 Poetry:Python 依赖管理的终极指南 1. 更新系统包列表2. 安装 Poetry方法 1:使用官方安装脚本方法 2:使用 Pipx 安装 3. 配置环境变量4. 验证安装5. 配置 Poetry(可选)设置虚拟环境位置配置镜像源 6…...

读写锁: ReentrantReadWriteLock

在多线程编程场景中,对共享资源的访问控制极为关键。传统的锁机制在同一时刻只允许一个线程访问共享资源,这在读写操作频繁的场景下,会因为读操作相互不影响数据一致性,而造成不必要的性能损耗。ReentrantReadWriteLock&#xff0…...

上海路网道路 水系铁路绿色住宅地工业用地面图层shp格式arcgis无偏移坐标2023年

标题和描述中提到的资源是关于2023年上海市地理信息数据的集合,主要包含道路、水系、铁路、绿色住宅区以及工业用地的图层数据,这些数据以Shapefile(shp)格式存储,并且是适用于ArcGIS软件的无偏移坐标系统。这个压缩包…...

爬虫学习笔记之Robots协议相关整理

定义 Robots协议也称作爬虫协议、机器人协议,全名为网络爬虫排除标准,用来告诉爬虫和搜索引擎哪些页面可以爬取、哪些不可以。它通常是一个叫做robots.txt的文本文件,一般放在网站的根目录下。 robots.txt文件的样例 对有所爬虫均生效&#…...

Python小游戏29乒乓球

import pygame import sys # 初始化pygame pygame.init() # 屏幕大小 screen_width 800 screen_height 600 screen pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("打乒乓球") # 颜色定义 WHITE (255, 255, 255) BLACK (…...

220.存在重复元素③

目录 一、题目二、思路三、解法四、收获 一、题目 给你一个整数数组 nums 和两个整数 indexDiff 和 valueDiff 。 找出满足下述条件的下标对 (i, j)&#xff1a; i ! j, abs(i - j) < indexDiff abs(nums[i] - nums[j]) < valueDiff 如果存在&#xff0c;返回 true &a…...

使用 Go 语言调用 DeepSeek API:完整指南

引言 DeepSeek 是一个强大的 AI 模型服务平台&#xff0c;本文将详细介绍如何使用 Go 语言调用 DeepSeek API&#xff0c;实现流式输出和对话功能。 Deepseek的api因为被功击已不能用&#xff0c;本文以 DeepSeek&#xff1a;https://cloud.siliconflow.cn/i/vnCCfVaQ 为例子进…...

AJAX笔记原理篇

黑马程序员视频地址&#xff1a; AJAX-Day03-01.XMLHttpRequest_基本使用https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p33https://www.bilibili.com/video/BV1MN411y7pw?vd_sour…...

ubuntu直接运行arm环境qemu-arm-static

qemu-arm-static 嵌入式开发有时会在ARM设备上使用ubuntu文件系统。开发者常常会面临这样一个问题&#xff0c;想预先交叉编译并安装一些应用程序&#xff0c;但是交叉编译的环境配置以及依赖包的安装十分繁琐&#xff0c;并且容易出错。想直接在目标板上进行编译和安装&#x…...

尝试把clang-tidy集成到AWTK项目

前言 项目经过一段时间的耕耘终于进入了团队开发阶段&#xff0c;期间出现了很多问题&#xff0c;其中一个就是开会讨论团队的代码风格规范&#xff0c;目前项目代码风格比较混乱&#xff0c;有的模块是驼峰&#xff0c;有的模块是匈牙利&#xff0c;后面经过讨论&#xff0c;…...

一文了解性能优化的方法

背景 在应用上线后&#xff0c;用户感知较明显的&#xff0c;除了功能满足需求之外&#xff0c;再者就是程序的性能了。因此&#xff0c;在日常开发中&#xff0c;我们除了满足基本的功能之外&#xff0c;还应该考虑性能因素。关注并可以优化程序性能&#xff0c;也是体现开发能…...

【怎么用系列】短视频戒断——对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面&#xff0c;尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨&#xff0c;慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…...

C#中的委托(Delegate)

什么是委托? 首先,我们要知道C#是一种强类型的编程语言,强类型的编程语言的特性,是所有的东西都是特定的类型 委托是一种存储函数的引用类型,就像我们定义的一个 string str 一样,这个 str 变量就是 string 类型. 因为C#中没有函数类型,但是可以定义一个委托类型,把这个函数…...

PostCss

什么是 PostCss 如果把 CSS 单独拎出来看&#xff0c;光是样式本身&#xff0c;就有很多事情要处理。 既然有这么多事情要处理&#xff0c;何不把这些事情集中到一起统一处理呢&#xff1f; PostCss 就是基于这样的理念出现的。 PostCss 类似于一个编译器&#xff0c;可以将…...

Linux 系统上安装 Docker 并进行配置

Docker 是一种开源的应用容器引擎&#xff0c;它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口&#xff08;类似 iPh…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...