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

news2024/11/29 0:36:39

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     0x00000200

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

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

; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size
                ; 后跟向量表

1699545880919

程序一开始从 Reset 开始。

; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]	; WEAK 是弱定义,意思是如果外部文件也定义了 Reset_Handler 则优先使用外部文件的。所以我们自己定义中断函数的时候就会覆盖。不过其实这里面大多数 Handler 只是空函数
        IMPORT  SystemInit
        IMPORT  __main

                 LDR     R0, =SystemInit	; 初始化系统时钟
                 BLX     R0
                 LDR     R0, =__main		; 这个并不是我们自己写的 main 函数,而是c库中的函数,需要勾选 use microLib 引入。初始化一些局部变量,且跳转到我们的 main 函数
                 BX      R0
                 ENDP

系统时钟详解

前面介绍过在 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.coloradmin.cn/o/1254091.html

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

相关文章

外观设计模式

package com.jmj.pattern.facade;public class Light {public void on(){System.out.println("打开电灯...");}public void off(){System.out.println("关闭电灯...");} }package com.jmj.pattern.facade;public class AirCondition {public void on(){S…

STM32入门学习(一):STM32 简介与软件安装

参考引用 STM32 入门教程-江科协 1. STM32 简介 1.1 STM32 套件介绍 1.2 STM32 简介 STM32 是 ST 公司基于 ARM Cortex-M 内核开发的 32 位微控制器 应用:嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 1.3 ARM …

国内20个大模型中文场景测评及体验

中文场景能力测评 SuperCLUE排行榜 大模型及网站 公司(大模型) 智能程度 借鉴点 体验网站 备注 1 百度文心一言 高   文心一言   2 百川智能 高   百川大模型-汇聚世界知识 创作妙笔生花-百川智能   3 商汤商量SenseChat&#xff…

徕芬不是满分:自称超越戴森,用户称多次故障,品控仍是老大难?

撰稿|行星 来源|贝多财经 “双十一”购物节落下帷幕后,各大品牌纷纷公布“战报”。其中,高速吹风机品牌徕芬(也称“徕芬科技”)销售额超4.4亿元,全系产品销量超过80万台,高速吹风机系列单品(LF03、SE)销售…

基于springboot实现实习管理系统的设计与实现项目【项目源码+论文说明】

基于sprinmgboot实现实习管理系统的设计与实现演示 摘要 随着信息化时代的到来,管理系统都趋向于智能化、系统化,实习管理也不例外,但目前国内仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,…

智能联系人管理Python代码

在PyCharm中运行《智能联系人管理》即可进入如图1所示的系统主界面。 图1 系统主界面 具体的操作步骤如下: (1)添加联系人。在主界面中,单击“添加”按钮,将打开添加联系人窗口,在该窗口中,单…

时间序列预测 — Informer实现多变量负荷预测(PyTorch)

目录 1 实验数据集 2 如何运行自己的数据集 3 报错分析 1 实验数据集 实验数据集采用数据集4:2016年电工数学建模竞赛负荷预测数据集(下载链接),数据集包含日期、最高温度℃ 、最低温度℃、平均温度℃ 、相对湿度(平均) 、降雨…

学习笔记:如何分析财务报表

其实财务报表分析最核心的东西,是通过财务报表这个结果,由果推因,找出造成这个结果的原因。 会计是商业的语言 首先第一个问题是——会计是商业的语言,这是会计的根本。 什么叫“语言”,就是可以通过它进行交流。比如…

抖音视频怎么提取动图?手机视频转gif方法

抖音是人们休闲娱乐消遣时光必备的短视频软件,当我们想要把好玩有趣的抖音短视频转换成gif动画时,要怎么操作呢?通过使用gif动图制作(https://www.gif.cn/)网站-GIF中文网,手机自带浏览器,上传视…

手把手教你对禅道接口发起请求-基础版

本章一起来学习如何对禅道的接口发起请求。 🔴注:本章接口需要自己搭建本地禅道,部署之简单,百度一看就会。如下是官网地址,下载开源版本即可: https://www.zentao.net/ 接口文档 https://www.zentao.net/b…

iar如何全擦芯片内存

Project ->Download -> Erase memory

二年级 最少需要几个刻度?

娃二年级题目:请你设计一把尺子,用这把尺子一次能画出 1~8厘米八条不同长度的线段。最少需要几个刻度? 答:最少需要 5 个刻度; 方案有: 0, 1, 2, 5, 8 0, 1, 3, 7, 8 0, 1, 4, 6, 8 0, 1, 5, 6, 8 0, 1, 5…

burpsuite的大名早有耳闻,近日得见尊荣,倍感荣幸

问题: burpsuite中文乱码何解? burpsuite 与君初相识,犹如故人归。 burpsuite早有耳闻,近日得见真容,果然非同凡响。 Burp Suite is a comprehensive suite of tools for web application security testing. burp …

【教3妹学编程-算法题】统计子串中的唯一字符

3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包” 2哥 :3妹,什么事呀这么开发。 3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。 2哥&#x…

最新AI创作系统ChatGPT系统运营源码+DALL-E3文生图+支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

Java、PHP、C语言经典项目源码合集推荐(一)

(一).Java智慧校园系统源码、 智慧学校源码、 智慧校园平台源码、智慧校园电子班牌系统源码、中小学智慧校园系统源码、 原生微信小程序端源码、电子班牌系统源码 项目技术栈 1、使用springboot框架Javavue2 2、数据库MySQL5.7 3、移动端小程序使用小程…

【开源】基于Vue和SpringBoot的木马文件检测系统

项目编号: S 041 ,文末获取源码。 \color{red}{项目编号:S041,文末获取源码。} 项目编号:S041,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 木马分类模块2.3 木…

Proteus仿真--高仿真数码管电子钟

本文介绍基于数码管的高仿真电子钟(完整仿真源文件及代码见文末链接) 仿真图如下 本设计中80C51单片机作为主控,用74LS138作为数码管显示控制,共有4个按键,其中分别用于12/24小时显示切换、时间设置、小时加减控制和…

Day02嵌入式---按键控灯

一、简单介绍 按键控制灯开关是一种常见的嵌入式系统示例项目,它通常用于演示嵌入式系统的基本控制能力。该项目由一个或多个LED和一个按键组成。通过按下按键,可以控制LED的开关状态,从而实现灯的亮灭控制。 二、查看功能手册 2.1 查看硬件…