《STM32 HAL库》RCC 相关系列函数详尽解析—— HAL_RCC_OscConfig()

观前提示:函数完整代码在文末,本文梳理了函数HAL_RCC_OscConfig()的主要逻辑和实现方法
f105时钟树详解图

HAL_RCC_OscConfig()

函数介绍:

此函数是一个用于初始化RCC(Reset and Clock Control)振荡器(Oscillators,函数名中Osc为此单词缩写)的函数。它接受一个指向RCC_OscInitTypeDef结构体的指针,结构体的各成员分别包含了RCC振荡器的配置信息。
函数行数为442行,功能性上分为六个部分:

  • HSE配置,外部高速时钟
  • HSI配置,内部高速时钟
  • LSE配置,外部低速时钟
  • LSI配置,内部低速时钟
  • PLL1配置,锁相环1
  • PLL2配置,锁相环2

下文中我们将以功能为线索依次分析此函数

函数分析

HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)
{uint32_t tickstart;uint32_t pll_config;/* Check Null pointer */if (RCC_OscInitStruct == NULL){return HAL_ERROR;}/* Check the parameters */assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));

首先,定义了两个局部变量tickstart和pll_config。

接下来,检查传入的指针RCC_OscInitStruct是否为空,如果为空,则返回HAL_ERROR。

然后,使用assert_param宏来检查RCC_OscInitStruct->OscillatorType参数是否合法。

HSE Configuration部分

if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)

这行代码通过按位与运算符将RCC_OscInitStruct->OscillatorTypeRCC_OSCILLATORTYPE_HSE进行按位与操作,并将结果与RCC_OSCILLATORTYPE_HSE进行比较。如果结果等于RCC_OSCILLATORTYPE_HSE,则条件成立。这个条件判断语句的目的是检查是否启用了外部高速时钟(HSE)作为振荡器类型。

/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));

这是一个断言语句,用于检查RCC_OscInitStruct->HSEState的值是否符合要求。IS_RCC_HSE是一个宏,用于验证RCC_OscInitStruct->HSEState是否满足特定的条件。如果断言失败,则会触发断言错误。

if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)|| ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && (__HAL_RCC_GET_PLL_OSCSOURCE() == RCC_PLLSOURCE_HSE)))

这个条件判断语句检查系统时钟源是否为外部高速时钟(HSE),或者是由HSE驱动的PLL时钟源。如果条件成立,则意味着HSE在系统时钟或PLL时钟源中被使用,此时不允许将其禁用。

if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{return HAL_ERROR;
}

这个条件判断语句检查HSE是否已经就绪,并且RCC_OscInitStruct->HSEState的值为禁用状态(RCC_HSE_OFF)。如果这两个条件都满足,函数将返回HAL_ERROR

__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);

这行代码根据RCC_OscInitStruct->HSEState的值配置HSE振荡器的状态。__HAL_RCC_HSE_CONFIG是一个宏,用于设置HSE的状态。

/* Check the HSE State */
if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{/* Get Start Tick */tickstart = HAL_GetTick();/* Wait till HSE is ready */while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET){if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE){return HAL_TIMEOUT;}}
}

这部分代码在HSE不是禁用状态时,等待HSE就绪。它使用__HAL_RCC_GET_FLAG宏来检查HSE是否已经就绪。如果HSE在超时时间内仍未就绪,函数将返回HAL_TIMEOUT

else
{/* Get Start Tick */tickstart = HAL_GetTick();/* Wait till HSE is disabled */while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET){if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE){return HAL_TIMEOUT;}}
}

这部分代码在HSE为禁用状态时,等待HSE被禁用。它使用__HAL_RCC_GET_FLAG宏来检查HSE是否已经禁用。如果HSE在超时时间内仍未禁用,函数将返回HAL_TIMEOUT

点击《STM32 HAL库》RCC 相关系列函数详尽解析—— HAL_RCC_OscConfig()——古月居可查看全文。

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

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

相关文章

【JAVA】SpringBoot + skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上

【JAVA】SpringBoot skywalking 将接口的入参、出参、异常等信息上报到skywalking 链路追踪服务器上 1.下载SkyWalking APM https://skywalking.apache.org/downloads/ jdk8 不支持 SkyWalking APM 9.3.0以上版本,所以这里我们下载 9.3.0版本 2.下载 Java Agent …

MySQL----事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如,在学校管理系统中,我们删除一个学生,既需要删除学生的基本资料,也要删除和该学生相关的信息,如班级,考试成绩等等,这样&#…

python基础:字符集和编码

1.字符集 简单来说,字符集就是一套文字符号及其编码的概述。从20世纪60年代美国标准化组织ANSI发布了第一个计算机字符集ASCII开始,为了处理不同的文字,各大计算机公司,各国政府,以及各种标准化组织发明了几百种字符集…

GPT_AI高速发展中什么是Prompt提示词?

提示词(Prompt)是给大语言模型(以下简称模型)的输入文本,用于指定模型应该执行什么样的任务并生成什么样的输出。 提示词发挥了“提示” 模型 应该做什么的作用。设计高质量的提示词需要根据目标任务和模型能力进行精…

Eigen::Isometry3d变换矩阵的常用方法

文章目录 Eigen::Isometry3d变换矩阵的常用方法一、基本定义二、操作方法三、与四元数和平移向量的转换四、左乘与右乘 Eigen::Isometry3d变换矩阵的常用方法 一、基本定义 变换矩阵本质是一个4*4的矩阵 Eigen::Isometry3d T_imu_to_lidar Eigen::Isometry3d::Identity()二、…

分数限制下,选好专业还是选好学校?

1.专业解析 探讨不同专业的优势和未来挑战(课程学习、就业等维度)。结合个人专业选择的经验和思考过程,自定义实际场景并给出不同场景下的“专业VS学校”选择方案。 当探讨不同专业的优势和未来挑战时,需要根据具体的专业领域和市…

手把手教你使用OpenCV和KNN算法进行手写数字识别

手把手教你使用OpenCV和KNN算法进行手写数字识别 在这篇博客中,我将向大家介绍如何使用OpenCV和KNN算法编写一个手写数字识别程序。我们将一步一步地解释每个步骤,确保大家能理解代码的每个细节。我们将通过一个具体的实例来演示,如何从图像…

【Python】 Stacking: 强大的集成学习方法

我们都找到天使了 说好了 心事不能偷藏着 什么都 一起做 幸福得 没话说 把坏脾气变成了好沟通 我们都找到天使了 约好了 负责对方的快乐 阳光下 的山坡 你素描 的以后 怎么抄袭我脑袋 想的 🎵 薛凯琪《找到天使了》 在机器学习中,单…

vscode 终端无法正常执行脚本命令如何解决

我们经常需要在vscode的中安装第三方依赖包,npm是前端目前最大的Node.js模块化管理系统,它能帮助开发者管理和发布Node.js模块。但很多时候我们在vscode的终端中执行npm install命令时经常会报以下错误: 但是在Windows的cmd命令提示符中执行n…

JavaScript妙笔生花:打造沉浸式中国象棋游戏体验

前言 随着信息技术的飞速发展,Web开发领域也出现了翻天覆地的变化。JavaScript作为前端开发中不可或缺的编程语言,其重要性不言而喻。而当我们谈论到利用JavaScript打造一款沉浸式的中国象棋游戏体验时,我们不仅仅是在开发一个游戏&#xff0…

在 Linux/Debian/Ubuntu 上安装 LAMP: Linux、Apache、MySQL 和 PHP

在 Linux/Debian/Ubuntu 上安装 LAMP LAMP 代表 Linux、Apache、MySQL 和 PHP,是一种流行的开源 Web 开发平台,可以提供强大的服务器环境来运行动态网站和 Web 应用程序。本文将详细介绍如何在 Ubuntu 系统上安装和配置 LAMP。 步骤 1: 更新系统 在开…

微信分销商城小程序源码系统在线搭建 前后端分离 带完整的安装代码包以及搭建教程

系统概述 本微信分销商城小程序源码系统采用先进的前后端分离架构设计,前端使用Vue.js框架开发,后端则基于Spring Boot构建,确保了系统的高可维护性、扩展性和性能。系统集商品展示、在线交易、会员管理、分销推广、订单处理、数据统计等功能…

AIoT设备新一代高性能处理器瑞芯微RK3576,东胜物联RK3588等核心板定制开发

随着物联网、人工智能和嵌入式技术的不断发展,智能设备应用对芯片处理器的性能需求越来越高,以满足复杂的数据处理需求、实时性要求、复杂的算法运算和多任务处理能力。高性能的芯片可以为智能设备提供更强大的计算能力和更快速的响应速度,从…

Camtasia Studio 2024软件下载附加详细安装教程

amtasia Studio 2024是一款功能强大的屏幕录制和视频编辑软件,由TechSmith公司开发。这款软件不仅能够帮助用户轻松地记录电脑屏幕上的任何操作,还可以将录制的视频进行专业的编辑和制作,最终输出高质量的视频教程、演示文稿、培训课程等。 …

【Android】RecyclerView纵向倾斜滑动,触发ViewPage2横向滑动而导致的滑动冲突问题

问题描述 场景ViewPage2FragmentRecyclerView(我的项目里RecycleView外层还套了一层SmartRefreshLayout) 因ViewPage2滑动太灵敏,RecyclerView纵向倾斜滑动,触发ViewPage2横向滑动而导致的滑动冲突问题 解决方案: …

Google Earth Engine(GEE)——导出影像video到自己的Google硬盘当中

函数: Export.video.toDrive(collection, description, folder, fileNamePrefix, framesPerSecond, dimensions, region, scale, crs, crsTransform, maxPixels, maxFrames) Creates a batch task to export an ImageCollection as a video to Drive. The collection must on…

极简opencv操作xml文件

目标 修改xml文件&#xff0c;先产生一个临时文件&#xff0c;拷贝&#xff0c;修改&#xff0c;改名&#xff0c;使用opencv 非常简单地就可以搞定配置xml文件 code #include <opencv2/opencv.hpp> #include <iostream> #include <opencv2/core/utils/files…

2 程序的灵魂—算法-2.4 怎样表示一个算法-2.4.2 用流程图表示算法-【例 2.9】

将例 2.4 求 1-1/21/3-1/41/99-1/100 的算用流程图表示。 一个流程图包括&#xff1a; 1. 表示相应操作的框&#xff1b; 2. 带箭头的流程线&#xff1b; 3. 框内外必要的文字说明。

Transformer模型探索:Hugging Face库实战篇二——模型与分词器解析

注&#xff1a;本系列教程仅供学习使用, 由原作者授权, 均转载自小昇的 博客 。 文章目录 前言模型 加载模型 保存模型 分词器 分词策略 加载与保存分词器编码与解码文本 处理多段文本 Padding 操作 Attention masks直接使用分词器编码句子对 前言 在上一篇文章 《开箱即…

网络工程师的工具箱:这些软件你用过吗?(非常详细)零基础入门到精通,收藏这一篇就够了

今天&#xff0c;我想和大家聊一聊那些能够大大提升工作效率、简化复杂任务的必备软件工具。无论你是刚入行的新手&#xff0c;还是经验丰富的老手&#xff0c;这些工具都是你的工作利器&#xff0c;能够帮助你轻松应对各种网络挑战。 让我们一起来看看这些软件&#xff0c;看…