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

浅谈时钟启动和Systemlnit函数

时钟是STM32的关键,是整个系统的心脏,时钟如何启动,时钟源如何选择,各个参数如何设置,我们从源码来简单分析一下时钟的启动函数Systemlnit()。

Systemlnit函数简介

我们先来看一下源程序的注释

/** @addtogroup STM32F1xx_System_Private_Functions* @{*//*** @brief  Setup the microcontroller system*         Initialize the Embedded Flash Interface, the PLL and update the *         SystemCoreClock variable.*         初始化微控制器系统*         初始化嵌入式闪存接口、锁相环并更新系统核心时钟变量* @note   This function should be used only after reset.*         本函数仅在复位后使用* @param  None* @retval None*/

函数作用

SystemInit() 是STM32 HAL库的核心初始化函数,负责完成以下关键任务:

  • 系统时钟配置:初始化时钟树(如HSE、HSI、PLL),设置SystemCoreClock变量。
  • 中断向量表重置:将中断向量表映射到Flash的起始地址(0x08000000)。
  • 低功耗模式配置:默认禁用低功耗模式(如Sleep/Stop模式)。
  • 微控制器型号识别:读取SCB->IDPROM识别芯片型号。
  • 全局变量初始化:如__main符号的设置(跳转至主程序入口)。

函数调用时机

  • 自动调用:在汇编启动项内有相关的启动指令,重新上电,按下重置按钮,都进行该汇编程序。

  • 手动调用:需在代码中显式调用(如系统复位后重新配置时钟):
int main(void) {SystemInit();   // 显式调用// 后续初始化(GPIO、外设等)
}

读源码分析默认时钟来源

第一步

我们查芯片手册看CR寄存器,上述操作对CR寄存器进行了0x00000001或等于操作,将内存第0位变为1。

对应的HSION解释如下

RCC->CR |= 0x00000001U;

开启了内部8MHz时钟HSI RC

第二步

对CFGR寄存器进行与等于操作

对CFGR内存中的26—24位、15—14位、13—11位、10—8位、7—4位、3—2位、1—0位进行了变0,我们对应手册看进行了什么操作

MOC关闭时钟,PCLK2 2分频后给ADC使用,APB1和APB2的PCLK不分频、AHB不分频、设置HSI为系统时钟源,SW系统时钟切换选择HSI。

第三步

与等于操作CR寄存器

PLL关闭,时钟检测器关闭,HSE外部振荡器关闭。

第四步

与等于操作CR寄存器

关闭HSEBYP,前提时关闭了HSE震荡器,所以源码对CR寄存器分两步操作,先关闭外部振荡器,再关闭HSEBYP。

第五步

第六部

直接赋值CIR寄存器

用可写的各个中断标志来清除各中断标志

第七部

用来设置向量表,表示向量不进行偏移

最终操作结果

相关文章:

浅谈时钟启动和Systemlnit函数

时钟是STM32的关键,是整个系统的心脏,时钟如何启动,时钟源如何选择,各个参数如何设置,我们从源码来简单分析一下时钟的启动函数Systemlnit()。 Systemlnit函数简介 我们先来看一下源程序的注释…...

社交软件频繁更新,UI 设计在其中扮演什么角色?

在当今数字化时代,社交软件已成为人们日常生活中不可或缺的一部分。随着科技的飞速发展和用户需求的不断变化,社交软件更新频率日益加快。在这频繁更新的背后,UI 设计扮演着至关重要的角色,它如同社交软件的 “门面担当” 与 “交…...

SQLMesh 系列教程:解锁SQLMesh的宏与变量魔法

在数据库流水线开发中,代码复用与动态配置是提升效率的核心诉求。SQLMesh以其独特的宏系统与用户定义变量机制,重新定义了SQL生成的灵活性。与传统模板引擎不同,SQLMesh的宏并非简单的字符串替换,而是基于语义理解的智能代码重构—…...

React篇之three渲染

需求:拖拽右侧面板,里面的three模型能够自适应 import { useEffect, useState, useRef } from react import ./App.css import * as THREE from three; import { GLTFLoader } from three/addons/loaders/GLTFLoader.js; import { debounce } from loda…...

PHP与前端框架的无缝集成:最佳实践与案例分析

PHP与前端框架的无缝集成:最佳实践与案例分析 在现代Web开发中,PHP作为后端语言与前端框架的集成已成为一种常见的开发模式。无论是传统的MVC架构,还是现代的SPA(单页应用),PHP与前端框架的无缝集成能够显…...

Redis内存淘汰策略

Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列等场景。由于 Redis 数据存储在内存中,而内存资源有限,因此需要内存淘汰策略来管理内存的使用。Redis 提供了多种内存淘汰策略,可以根据不同的应用场景选择合适的策略。 …...

Facebook 的框架及技术栈

一、前端框架与技术 React.js 及其生态系统 核心原理与特点 React.js 是 Facebook 开源的用于构建用户界面的 JavaScript 库。它的核心概念是组件化,将用户界面拆分成一个个独立的、可复用的组件。每个组件都有自己的状态(state)和属性&#…...

QT中的布局管理

在 Qt 中,布局管理器(如 QHBoxLayout 和 QVBoxLayout)的构造函数可以接受一个 QWidget* 参数,用于指定该布局的父控件。如果指定了父控件,布局会自动将其管理的控件添加到父控件中。 在你的代码中,QHBoxLa…...

如何学习VBA_3.2.20:DTP与Datepicker实现日期的输入

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。 如果…...

在 LaTeX 中强制表格位于页面顶部

在 LaTeX 中强制表格位于页面顶部,可以通过以下 多种方法结合使用,按优先级推荐: 方法 1:使用 [!t] 位置限定符 原理:通过 [!t] 强制 LaTeX 优先将表格放置在页面顶部(Top),! 表示忽…...

dify+mysql的诗词助手

目录 数据库表结构: 数据库查询的http服务搭建: 流程引擎搭建: 开始, HTTP查询数据库, LLM数据分析, 直接回复, 效果测试: 下载链接: 数据库表结构:…...

PyTorch 入门学习

目录 PyTorch 定义 核心作用 应用场景 Pytorch 基本语法 1. 张量的创建 2. 张量的类型转换 3. 张量数值计算 4. 张量运算函数 5. 张量索引操作 6. 张量形状操作 7. 张量拼接操作 8. 自动微分模块 9. 案例-线性回归案例 PyTorch 定义 PyTorch 是一个基于 Python 深…...

【视频】SRS将RTMP转WebRTC、HLS流;获取RTSP转其它流

1、安装依赖库 sudo apt install tclsh sudo apt install cmake sudo apt install autotools-dev automake m4 perl sudo apt install libtool2、源码安装 1)下载源码 https://github.com/ossrs/srs/releases/tag/v5.0-r32)配置、编译 ./configure && make -j83、…...

linux中如何查询文件夹大小

在 Linux 中,可以使用 du 命令查看文件夹大小。以下是常用方法: 标题1. 查看文件夹大小 du -sh /path/to/directory-s:显示总大小。 -h:以易读格式(如 KB、MB、GB)显示大小。 标题2:查看文件…...

MySQL增删改查操作 -- CRUD

个人主页:顾漂亮 目录 1.CRUD简介 2.Create新增 使用示例: 注意点: 3.Retrieve检索 使用示例: 注意点: 4.where条件查询 前置知识:-- 运算符 比较运算符 使用示例: 注意点&#xf…...

uniapp+Vue3 组件之间的传值方法

一、父子传值&#xff08;props / $emit 、ref / $refs&#xff09; 1、props / $emit 父组件通过 props 向子组件传递数据&#xff0c;子组件通过 $emit 触发事件向父组件传递数据。 父组件&#xff1a; // 父组件中<template><view class"container">…...

TDengine SQL 函数

单行函数 数学函数 ABSACOSASINATANCEILCOSDEGREESEXPFLOORGREATESTLEASTLNLOGMODPIPOWRADIANSRANDROUNDSIGNSINSQRTTANTRUNCATE 字符串函数 ASCIICHARCHAR_LENGTHCONCATCONCAT_WSLENGTHLOWERLTRIMPOSITIONREPEATREPLACERTRIMSUBSTRING/SUBSTRSUBSTRING_INDEXTRIMUPPER 转换函数…...

智能三防手持终端破解传统仓储效率困局

在数字化浪潮的推动下&#xff0c;传统仓储管理模式正面临效率低、成本高、错误频发等瓶颈。如何实现精准、高效、智能化的仓储管理&#xff0c;上海岳冉三防智能手持终端机以RFID技术为核心&#xff0c;结合工业级三防&#xff08;防水、防摔、防尘&#xff09;设计&#xff0…...

力扣——K个一组翻转链表

题目链接&#xff1a; 链接 题目描述&#xff1a; 思路&#xff1a; 可以理解为把原链表的每一段进行反转 把链表的每一段看成新链表&#xff0c;单独进行反转&#xff0c;然后再放回原链表 关键是截取k个节点、进行反转后&#xff0c;怎么再和原链表链接起来 我们把截取的…...

5-27 临摹大师-IP-Adapter

前言&#xff1a; 前一节我们主要介绍ControlNet中如何对黑白照片进行上色 主要介绍ControlNet中的IP-Adapter。这个也是一种类似的风格借鉴&#xff0c;类似Reference的能力。 当然IP-Adapter有两点或许可以吸引我们&#xff0c;一个是国人腾讯公司制作的。另一个在速度和效…...

MinIO的预签名直传机制

我们传统使用MinIo做OSS对象存储的应用方式往往都是在后端配置与MinIO的连接和文件上传下载的相关接口&#xff0c;然后我们在前端调用这些接口完成文件的上传下载机制&#xff0c;但是&#xff0c;当并发量过大&#xff0c;频繁访问会对后端的并发往往会对服务器造成极大的压力…...

树莓科技集团董事长:第五代产业园运营模式的深度剖析与展望​

第五代产业园运营模式&#xff0c;以创新为核心驱动&#xff0c;强调数字化、网络化和资源整合。树莓科技集团在这一领域具有代表性&#xff0c;其运营模式值得深入剖析。 核心特征 数字化转型&#xff1a;第五代产业园高度重视数字化技术的应用&#xff0c;通过构建数字化平…...

项目组织管理类型-职能式组织和矩阵式组织的区别

在职能式组织和矩阵式组织中&#xff0c;任务分配和人员安排确实有显著的不同&#xff0c;让我们通过以下例子来进一步解释&#xff1a; 职能式组织在职能式组织中&#xff0c;任务通常是根据部门的职能进行下达的。 例如&#xff0c;一家制造公司的组织结构如下&#xff1a; …...

树莓科技(成都)集团:如何铸就第五代产业园标杆

树莓科技&#xff08;成都&#xff09;集团铸就第五代产业园标杆&#xff0c;主要体现在以下几个方面&#xff1a; 精准定位与前瞻布局 树莓科技并非盲目扩张&#xff0c;而是精准锚定数字经济发展方向。以成都为起点&#xff0c;迅速构建起全国性的园区版图&#xff0c;体现…...

【Quest开发】手柄交互震动

软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72&#xff08;要提前导入哦&#xff09; 硬件&#xff1a;Meta Quest3 参考Meta开发文档&#xff1a;https://developers.meta.com/horizon/documentation/unity/unity-haptics-sdk-integrate 这篇官…...

《Transformer如何进行图像分类:从新手到入门》

引言 如果你对人工智能&#xff08;AI&#xff09;或深度学习&#xff08;Deep Learning&#xff09;感兴趣&#xff0c;可能听说过“Transformer”这个词。它最初在自然语言处理&#xff08;NLP&#xff09;领域大放异彩&#xff0c;比如在翻译、聊天机器人和文本生成中表现出…...

数字图像处理与Python语言实现-Box模糊CUDA实现

Box模糊CUDA实现 文章目录 Box模糊CUDA实现1、Box模糊的基本原理2、算法优化:滑动窗口技术3、参数对模糊效果的影响4、Box模糊的优缺点5、与高斯模糊的对比6、实际应用场景7、算法实现7.1 PyCUDA实现7.2 CuPy实现7.3 C++与CUDA实现8、总结在图像处理领域,**Box模糊(方框模糊…...

MAVEN解决版本依赖冲突

文章目录 一、依赖冲突概念1、什么是依赖冲突2、依赖冲突的原因3、如何解决依赖冲突 二、查看依赖冲突-maven-helper1、安装2、helper使用1、conflicts的阅读顺序&#xff08;从下向上看&#xff09;2、dependencies as List的阅读顺序&#xff08;从下向上看&#xff09;3、de…...

Compose 实践与探索五 —— AnimationSpec

不论是 animateXxxAsState() 还是 Animatable 的 animateTo() 都可以传入 AnimationSpec 以配置动画的规格&#xff1a; Composable fun animateDpAsState(targetValue: Dp,animationSpec: AnimationSpec<Dp> dpDefaultSpring,label: String "DpAnimation",…...

Embedding模型到底是什么?

嵌入模型&#xff08;Embedding Model&#xff09;是一种将高维数据映射到低维空间的工具&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;、推荐系统和图像识别等领域。它的核心目标是将复杂的数据&#xff08;如文本、图像或用户行为&#xff09;转换为稠密的…...

数据结构(一)——绪论

一、数据结构的研究内容 1.数据的各种逻辑结构和物理结构&#xff0c;以及他们之间的相应关系 2.存储结构的方法&#xff0c;对每种结构定义相适应的各种运算 3.设计出相应的算法 4.分析算法的效率 二、数据结构的基本概念 1.数据&#xff08;data&#xff09;&#xff1a…...

VMware虚拟机网络连接模式介绍以及nat模式访问公网实践

在 VMware 虚拟机中&#xff0c;网络配置是非常重要的一部分。VMware 提供了三种主要的网络连接模式&#xff0c;分别是桥接模式&#xff08;Bridged&#xff09;、NAT模式&#xff08;NAT&#xff09; 和仅主机模式&#xff08;Host-Only&#xff09;。每种模式都有其特定的用…...

Selenium Manager和webdriver manager的区别与联系

一、引言 1.1 自动化测试的重要性 在现代软件开发流程中&#xff0c;自动化测试已经成为保证软件质量和提高交付效率的关键实践。随着软件开发周期的缩短和软件复杂性的增加&#xff0c;手工测试已无法满足快速迭代的需求。自动化测试能够快速、准确地执行重复性测试任务&…...

八叉树地图的原理与实现

八叉树与体素图 八叉树地图 八叉树地图是可变分辨率的三维栅格地图&#xff0c;可以自由调整分辨率&#xff0c;如下所示&#xff1a; 根据点云的数量或密度决定每个叶子方块是否被占据 体素图 体素就是固定分辨率的三维栅格地图&#xff0c;如下所示&#xff1a; 根据点云…...

DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了&#xff0c;虽然经过扩容和调整&#xff0c;但反应依旧不稳定&#xff0c;甚至小圆圈转半天最后却提示“服务器繁忙&#xff0c;请稍后再试。” 故此&#xff0c;本文通过讲解在本地部署 DeepSeek并配合python代码实现&#xff0c;让你零成本搭建自己的AI…...

【Linux】浅谈冯诺依曼和进程

一、冯诺依曼体系结构 冯诺依曼由 输入设备、输出设备、运算器、控制器、存储器 五部分组成。 冯诺依曼的设计特点 二进制表示 所有数据&#xff08;包括程序指令&#xff09;均以二进制形式存储和运算&#xff0c;简化了硬件逻辑设计&#xff0c;提高了可靠性。 存储程序原理…...

基于深度学习的多模态人脸情绪识别研究与实现(视频+图像+语音)

这是一个结合图像和音频的情绪识别系统&#xff0c;从架构、数据准备、模型实现、训练等。包括数据收集、预处理、模型训练、融合方法、部署优化等全流程。确定完整系统的组成部分&#xff1a;数据收集与处理、模型设计与训练、多模态融合、系统集成、部署优化、用户界面等。详…...

【蓝桥杯】第15届c++B组--R格式

问题描述 小蓝最近在研究一种浮点数的表示方法&#xff1a;RR 格式。对于一个大于 0 的浮点数 dd&#xff0c;可以用 RR 格式的整数来表示。给定一个转换参数 nn&#xff0c;将浮点数转换为 RR 格式整数的做法是: 将浮点数乘以 2n2n&#xff1b; 四舍五入到最接近的整数。 …...

【初阶三】认识C语言—下

【初阶三】认识C语言—下 1.函数2.数组3.操作符3.1算数操作符3.2移位操作符和位操作符3.3赋值操作符3.4单目操作符 4.常见关键字4.1关键字typedef4.2 关键字static 5. define定义常宏6.指针6.1内存6.2取地址操作符& 7.结构体 1.函数 函数就像一个工厂&#xff0c;通过输入原…...

【C#】使用DeepSeek帮助评估数据库性能问题,C# 使用定时任务,每隔一分钟移除一次表,再重新创建表,和往新创建的表追加5万多条记录

&#x1f339;欢迎来到《小5讲堂》&#x1f339; &#x1f339;这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。&#x1f339; &#x1f339;温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01;&#…...

前端学习笔记(三)——ant-design vue表单传递数据到父页面

前言 善用AI&#xff0c;快速解决定位 原理 a-form所在的SFC&#xff08;单文件&#xff09;vue中需要将表单数据传递给父页面SFC文件中&#xff0c;使用emit方法 代码 子组件&#xff08;Form.vue&#xff09; <template><a-form submit"handleSubmit&qu…...

计算机视觉算法实战——驾驶员玩手机检测(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 领域简介&#xff1a;玩手机检测的重要性与技术挑战 驾驶员玩手机检测是智能交通安全领域的核心课题。根据NHTSA数据&#xff0…...

C语言(23)

字符串函数 11.strstr函数 1.1函数介绍&#xff1a; 头文件&#xff1a;string.h char *strstr ( const char * str1,const char *str2); 作用&#xff1a;在一个字符串&#xff08;str1&#xff09;中寻找另外一个字符串&#xff08;str2&#xff09;是否出现过 如果找到…...

Python入门教程:从零开始学习Python编程

引言 Python是一种高级编程语言&#xff0c;因其简洁的语法和强大的功能而广受欢迎。无论你是编程新手&#xff0c;还是有经验的开发者&#xff0c;Python都是一个非常好的选择。本文将带你从零开始学习Python编程&#xff0c;涵盖基础语法、常用库以及一些实用的编程技巧。 目…...

SAIL-RK3576核心板应用方案——无人机视觉定位与地面无人设备通信控制方案

本方案以 EFISH-RK3576-SBC工控板 或 SAIL-RK3576核心板 为核心&#xff0c;结合高精度视觉定位、实时通信与智能控制技术&#xff0c;实现无人机与地面无人设备的协同作业。方案适用于物流巡检、农业植保、应急救援等场景&#xff0c;具备高精度定位、低延迟通信与强环境适应性…...

14.C语言const的使用规范,详细说明

目录 修饰变量 修饰指针 指向常量的指针 常量指针 指向常量的常量指针 修饰函数参数 修饰函数返回值 总结 在 C 语言里&#xff0c;const 是一个类型限定符&#xff0c;它的作用是将变量定义为只读&#xff0c;也就是不允许对其值进行修改&#xff0c;用来修饰函数中的…...

安装操作系统ubuntu-20.04.6-live-server-amd64

一、下载虚拟机软件、远程控制软件及操作系统镜像 下载VMware Workstation&#xff1a; 下载 VMware Workstation Pro 个人免费版(可能会访问不了&#xff0c;那就随便找个能下载的版本安装)下载XShell&#xff1a; XShell 家庭/学校免费版下载ubuntu操作系统 ubuntu-20.04.6-…...

使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b或DeepSeek-r1:1.5b 模型(完成度80%)

原文&#xff1a;&#x1f6a3;‍♂️ 使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b 模型 &#x1f6a3; — PaddleNLP 文档 使用 PaddleNLP 在 CPU(支持 AVX 指令)下跑通 llama2-7b 模型 &#x1f6a3; PaddleNLP 在支持 AVX 指令的 CPU 上对 llama 系列模型进行了…...

【Golang】第五弹----函数

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;Golang &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一、函数 1.1基本介绍…...

适合二次开发的Web组态软件推荐

在选择适合二次开发的Web组态软件时&#xff0c;需要考虑多个因素&#xff0c;包括开源与否、功能、社区支持、文档完整性等。以下是一些适合二次开发的Web组态软件&#xff1a; 1. Node-RED 简介: Node-RED 是一个基于流的编程工具&#xff0c;最初由IBM开发&#xff0c;现为…...