野火霸天虎 STM32F407 学习笔记(六)系统时钟详解

STM32 中级

前言

仍然是学习自野火F407网课。

启动文件详解

作用:

  1. 初始化堆栈指针 SP=_initial_sp
  2. 初始化 PC 指针 =Reset_Handler
  3. 初始化中断向量表
  4. 配置系统时钟
  5. 调用 C 库函数 _main 初始化用户堆栈,从而最终调用 main 函数去到 C 的世界

栈:局部变量,函数定义,函数形参等。

Stack_Size      EQU     0x00000400	; 设置栈大小,EQU 相当于宏定义AREA    STACK, NOINIT, READWRITE, ALIGN=3	; AREA 用于定义新代码段,数据段。这里定义了一个段叫 STACK,不初始化,可读可写,按3字节对齐
Stack_Mem       SPACE   Stack_Size	; 分配内存空间
__initial_sp	; 初始化堆栈,指向栈底(高地址)

栈的大小不能超过内部 SRAM 的大小。如果编写的程序比较大,定义的局部变量很多,那么就需要修改栈的大小。如果某一天,你写的程序出现了莫名奇怪的错误,并进入了硬 fault 的时候,这时你就要考虑下是不是栈不够大,溢出了。

堆:动态分配的,需要的空间就比栈小一些。

Heap_Size       EQU     0x00000200AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limitPRESERVE8	; 堆栈按8字节对齐THUMB		; 标明后面指令为 THUMB 指令

向量表:32位的整形数组,包含许多异常 ESR 的入口地址。

; Vector Table Mapped to Address 0 at ResetAREA    RESET, DATA, READONLYEXPORT  __VectorsEXPORT  __Vectors_EndEXPORT  __Vectors_Size; 后跟向量表

1699545880919

程序一开始从 Reset 开始。

; Reset handler
Reset_Handler    PROCEXPORT  Reset_Handler             [WEAK]	; WEAK 是弱定义,意思是如果外部文件也定义了 Reset_Handler 则优先使用外部文件的。所以我们自己定义中断函数的时候就会覆盖。不过其实这里面大多数 Handler 只是空函数IMPORT  SystemInitIMPORT  __mainLDR     R0, =SystemInit	; 初始化系统时钟BLX     R0LDR     R0, =__main		; 这个并不是我们自己写的 main 函数,而是c库中的函数,需要勾选 use microLib 引入。初始化一些局部变量,且跳转到我们的 main 函数BX      R0ENDP

系统时钟详解

前面介绍过在 SystemInit 里对系统时钟进行了配置,这节课主要是分析其具体原理。

我们需要选择系统时钟的时钟源,并且把系统时钟作为一些外设的时钟使用。

野火教程图片示例如下:

1699683387373

时钟源选择

我自己的流程图如下,系统时钟的时钟源选择:

SysCLK系统时钟
锁相环
时钟信号
HSI高速内部时钟
HSE高速外部时钟

HSE:外部高速时钟信号。

HSI:高速内部时钟。一般常用的还是 HSE,精度更高,HSI 一般用于 HSE 故障时临时启动直至 HSE 启动成功。

PLL:锁相环,对时钟信号倍频。图中 HSE 分频后/MN/P 得到 PLLCLK。为什么不直接把晶振做的频率很高,而是用锁相环倍频?因为高频晶振更容易被外界干扰影响。*

首先对于锁相环部分时钟,我们从晶振输入(需要使能 HSE),分频,锁相环倍频,得到 PLLCLK 锁相环时钟。

然后SysCLK 系统时钟的时钟源,我们可以选择 HSI HSE SysCLK,这里我们选择 SysCLK。

1699684042463

RCC_CR 高16位配置 HSE,低位配置 HSI。

RCC_CR 最后一位 ON 用于启用时钟,RCC_CFGR 中的 SW01 用于选择 HSI HSE PLL。

1699706132078

锁相环

锁相环相比直接用 HSI HSE 作为时钟源,优势在于可以倍频。

PLLSRC 选择锁相环的时钟源是 HSE 还是 HSI。

1699706859478

PLLM 分频因子,PLLN 倍频因子,PLLP 又是一个分频。P 是系统时钟用,Q 是一些外设比如 USB OTG 用,R 在 407 中没有使用。

我们开发板配置是 SYSCLK = 25MHz / M:25 * N:336 / P:2=168MHz ,也可以改变分频因子值,168 是最大值。

外设时钟配置

AHB 预分频器:分频之后得到 AHB 总线时钟。AHB 为外设,定时器,内核提供时钟。

APB 预分频器:在 AHB 预分频后进一步预分频。APB 为 APB 上的外设提供时钟。

RCC_CFGR 中 HPRE,PPRE12 代表 AHB1,APB12 的分频选择。

RTC:为芯片内部的 RTC 提供时钟,时钟源可以是 HSE LSE LSI。

看门狗:LSI 提供。

MCO:时钟可以作为输出。比如外接一个摄像头,可以用 MCU 内的时钟。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

I2S:音频信号。可由外部时钟或 PLL 提供。

以太网 PHY:开发板上没有 PHY 物理接口收发器芯片,因此由外部源作时钟。

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

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

相关文章

School training competition ( Second )

A. Medium Number 链接 : Problem - 1760A - Codeforces 就是求三个数的中位数 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std; typedef long long LL; const int N 2e510;inline void …

Java线程同步

认识线程同步 解决方案 方法一&#xff1a;同步代码块 package com.itheima.d3;public class ThreadTest {public static void main(String[] args) {Accout acc new Accout("ICBC-110",100000);new DrawThread(acc,"小明").start();//小明new DrawThread…

Python实现DDos攻击实例详解

文章目录 SYN 泛洪攻击Scapy3k 基本用法代码实现DDos 实现思路argparse 模块socket 模块代码实现Client 端程序测试后记关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案…

Kotlin学习——kt里的集合,Map的各种方法之String篇

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

【算法萌新闯力扣】:回文链表

力扣题目&#xff1a;回文链表 开篇 今天是备战蓝桥杯的第23天。我加入的编程导航算法通关村也在今天开营啦&#xff01;那从现在起&#xff0c;我的算法题更新会按照算法村的给的路线更新&#xff0c;更加系统。大家也可以关注我新开的专栏“算法通关村”。里面会有更全面的知…

操作系统的中断与异常(408常考点)

为了进行核心态和用户态两种状态的切换&#xff0c;引入了中断机制。 中断是计算机系统中的一种事件&#xff0c;它会打断CPU当前正在执行的程序&#xff0c;转而执行另一个程序或者执行特定的处理程序。中断可以来自外部设备&#xff08;如键盘、鼠标、网络等&#xff09;、软…

振南技术干货集:FFT 你知道?那数字相敏检波 DPSD 呢?(1)

注解目录 1 、DPSD 的基础知识 1.1 应用模型 1.2 原理推导 1.3 硬件 PSD &#xff08;相敏检波&#xff0c;就是从繁乱复杂的信号中将我们关心的信号检出来&#xff0c;同时对相位敏感。 数学原理&#xff0c;逃不掉的&#xff0c;硬着头皮看吧。&#xff09; 2 、DPSD …

【电路笔记】-电阻器颜色代码与阻值计算

电阻器颜色代码与阻值计算 文章目录 电阻器颜色代码与阻值计算1、概述2、计算电阻器颜色代码值3、贴片电阻器 电阻器颜色编码使用色带轻松识别电阻器的电阻值及其百分比容差。 1、概述 由于有许多不同类型的电阻器可用&#xff0c;我们需要形成电阻器颜色代码系统以便能够识别…

Java 注解在 Android 中的使用场景

Java 元注解有 5 种&#xff0c;常用的是 Target 和 Retention 两个。 其中 Retention 表示保留级别&#xff0c;有三种&#xff1a; RetentionPolicy.SOURCE - 标记的注解仅保留在源码级别中&#xff0c;并被编译器忽略RetentionPolicy.CLASS - 标记的注解在编译时由编译器保…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条&#xff0c;无论你拖拽滚动条&#xff0c;选中滚动条之后按键盘…

【论文阅读】TACAN:控制器局域网中通过隐蔽通道的发送器认证

文章目录 摘要一、引言二、相关工作三、系统和对手模型3.1 系统模型对手模型 四、TACAN4.1 TACAN 架构4.2 发送方认证协议4.3 基于IAT的隐蔽通道4.4 基于偏移的隐蔽通道&#xff08;本节公式格式暂未整理&#xff09;4.5 基于LSB的隐蔽通道 摘要 如今&#xff0c;汽车系统与现…

vscode Markdown 预览样式美化多方案推荐

优雅的使用 vscode写 Markdown&#xff0c;预览样式美化 1 介绍 我已经习惯使用 vscode 写 markdown。不是很喜欢他的 markdown 样式&#xff0c;尤其是代码块高亮的样式。当然用 vscode 大家基本上都会选择安装一个Markdown-preview-enhanced的插件&#xff0c;这个插件的确…

SpringBoot定时任务报错Unexpected error occurred in scheduled task原因及其解决方法(亲测有效)

问题 spring boot项目在线上一直正常运行没有错误&#xff0c;然后今天发生了报错&#xff0c;如图 这是一个定时器错误&#xff0c;发生这个报错 主要有两个原因 定时器编写的有错误Scheduled注解方式级别高于资源注入级别&#xff0c;导致了资源注入失败 以下是我的代码 …

单片机学习4——中断的概念

中断的概念&#xff1a; CPU在处理A事件的时候&#xff0c;发生了B事件&#xff0c;请求CPU迅速去处理。&#xff08;中断产生&#xff09; CPU暂时中断当前的工作&#xff0c;转去处理B事件。&#xff08;中断响应和中断服务&#xff09; 待CPU将B事件处理完毕后&#xff0…

【数据结构初阶(5)】链式队列的基本操作实现

文章目录 队列的定义初始化队列队尾入队列队头出队列取队头元素取队尾元素获取队列有效元素个数判断队空销毁队列 因为队列比较简单&#xff0c;关于队列的概念就不过多赘述了&#xff0c;本文只讲链队的基本操作实现 队列的定义 定义队列结点结构 链队中的每个结点都应该包…

Go 数字类型

一、数字类型 1、Golang 数据类型介绍 Go 语言中数据类型分为&#xff1a;基本数据类型和复合数据类型基本数据类型有&#xff1a; 整型、浮点型、布尔型、字符串复合数据类型有&#xff1a; 数组、切片、结构体、函数、map、通道&#xff08;channel&#xff09;、接口 2、…

什么是 dropblock

大家好啊&#xff0c;我是董董灿。 之前介绍过 dropout 算法&#xff0c;它在训练神经网络中&#xff0c;可以随机丢弃神经元&#xff0c;是一种防止网络过拟合的方法。 但是在卷积神经网络中&#xff0c;dropout 的表现却不是很好&#xff0c;于是研究人员又搞了一个“结构化…

Python列表:操作与实例分析,你值得一看!

Python列表是一种重要的数据结构&#xff0c;它允许您存储和管理多个数据项。本文将深入探讨Python列表的操作&#xff0c;以及通过具体实例分析如何使用它们&#xff0c;以帮助您更好地理解和优化您的代码。 什么是Python列表&#xff1f; Python列表是一种有序、可变的数据结…

基于51单片机的全自动洗衣机proteus仿真设计

标题目录 &#x1f4ab;51单片机全自动洗衣机proteus仿真设计&#x1f4ab;设计介绍&#x1f4ab;仿真图电动机驱动模块电路设计电源模块电路设计控制按键进水阀和排水阀控制继电器 &#x1f4ab;程序设计main函数 &#x1f4ab;设计报告&#x1f4ab;资料清单&&下载链…

PC行内编辑

点击编辑&#xff0c;行内编辑输入框出现&#xff0c;给列表的每条数据定义编辑标记&#xff0c;最后一定记得 v-model双向绑定&#xff0c;使数据回显。 步骤&#xff1a; 1、给行数据定义编辑标记 2、点击行编辑标记&#xff08;isedit&#xff09; 3、插槽根据标记渲染表单 …