首页 > 其他分享 >关于STM32时钟的问题记录

关于STM32时钟的问题记录

时间:2023-10-29 23:34:22浏览次数:30  
标签:0000 函数 记录 启动 程序 STM32 时钟

关于STM32时钟的问题         在读别人建立大型的STM32工程时,会看到主函数中会首先执行一个RCC_Init()的函数,跳转过去之后发现是配置时钟的相关函数。而我自己在写STM32相关代码的时候,似乎从来没有注意过这个问题,我猜想在STM32程序开始执行的时候,也就是复位之后,会首先执行时钟配置的函数,于是我就详细的了解了STM32程序的执行流程。         首先,STM32从上电复位到main函数的过程。主要有以下步骤:

1.初始化堆栈指针 SP=_initial_sp,初始化 PC 指针=Reset_Handler;

2.初始化中断向量表;

3.配置系统时钟;

4.调用 C 库函数_main 初始化用户堆栈,然后进入 main 函数。

        在学习STM32程序的执行顺序之前,我们需要首先了解STM32的启动方式,这个在STM32的参考手册里有的,如下图:

        一、STM32有三种启动方式:

        1.从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x0000 0000或0x0800 0000。(从STM32内置的Flash启动(0x0800 0000-0x0807 FFFF),一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。)         2.从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。(一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的ISP程序中,提供了串口下载程序的固件,可以通过这个ISP程序将用户程序下载到系统的Flash中。)         3.从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。(从内置SRAM启动(0x2000 0000-0x3FFFFFFF),既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。)(SRAM掉电丢失)         启动模式只决定程序烧录的位置,加载完程序之后会有一个重映射(映射到0x00000000地址位置);真正产生复位信号的时候,CPU还是从开始位置执行。值得注意的是STM32上电复位以后,代码区都是从0x00000000开始的,三种启动模式只是将各自存储空间的地址映射到0x00000000中。         二、STM32的启动文件

        每个STM32工程都会有启动文件的,在建立工程的时候,已经将启动文件放在工程内了,这里我查看的是STM32f10x系列的启动文件,接下来我将一段一段的分析启动文件。

        启动文件的名称是“system_stm32f10x.c”。

 1. 这个文件提供了2个函数和1个全局变量:

SystemInit():设置系统时钟(系统时钟源、PLL锁相环(用于倍频)、AHB/APBx预分频器、Flash设置),这个函数被用作复位之后和主程序分支之前。

SystemCoreClock variable:系统内核时钟变量,包含内核时钟,它被用于用户应用程序设置SysTick定时器或配置其他参数。

SystemCoreClockUpdate():更新变量SystemCoreClock和在程序执行期间调用可以更改核心时钟。 

 2. 每个设备复位之后,HSI内部高速时钟(8MHz)被用于系统时钟源。然后在“startup_stm32f10x_xx.s”文件中调用 SystemInit() 函数,以配置分支到主程序之前的系统时钟。

 3. 如果用户选择的系统时钟源启动失败,则SystemInit()  函数将不做任何事情,HSI仍然用作系统时钟源。 用户可以在SetSysClock()函数中添加一些代码来处理这个问题。 

        4. HSE晶振的默认值设置为8 MHz(或25 MHz,开启使用的产品),请参阅“stm32f10x.h”文件中的“HSE_VALUE”定义。当HSE直接或通过PLL用作系统时钟源时,您使用不同的晶体,您必须根据自己的 HSE 值进行调整配置。

        总结一下,复位之后HSI内部高速时钟(8MHz)被用于系统时钟源,然后调用SystemInit() ,通过它配置时钟。

 

标签:0000,函数,记录,启动,程序,STM32,时钟
From: https://www.cnblogs.com/0x1315547/p/17796757.html

相关文章

  • 『做题记录』[CF1601F]Two Sorts
    [CF1601F]TwoSortslink:https://codeforces.com/problemset/problem/1601/FDescription  有一个数列\(\{a_1,a_2,\ldots,a_n\}\)是一个\(1\simn\)的排列,且所有的数都按照字典序排序,现在给出整数\(n(1\leqn\leq10^{12})\),求\(\left(\sum_{i=1}^n((i-a_i)\bm......
  • stm32 uboot调试1--Apple的学习笔记
    一,前言openocd+stlink的vscode远程gdb调试环境搭建完成了,那么用吧,串口也不连接了。用自带的configs/stm32f429-discovery_defconfig进行的编译,然后就直接调试了。二,问题记录问题1:board_init_f进入fdt初始化就进入hang。答:因为fdt是分离的但是我并没有下载到某个地址,于是先配置为嵌......
  • STM32 OLED显示字符汉字
    本文代码使用HAL库。@TOC前言OLED屏幕是一种高对比度、高亮度、低功耗、灵活可弯曲的显示技术。在电子产品中,OLED屏幕通常用于显示各种文本、图标、图像等内容。本篇文章将介绍使用I2C接口在OLED屏幕上显示字符,汉字。一、OLED接线:我使用的OLED分辨率是128x64。这里......
  • ATC 做题记录
    其实是对着yhx-12243一个一个题噶的。板刷ATC计划。[ARC078F]MoleandAbandonedMine求一个联通图的子图保证\(1\ton\)只有一条路径且联通且边权和最大。考虑把这一条链记下来,围绕这个这条链构造。状压下来每个点的连通性。我们需要知道的是,我们选完一条链后,每个点......
  • nexus3 作为docker仓库与镜像缓存的记录
    因为搞k8s拉取镜像太慢,不同版本每次都要等待半天,用nexus3作为docker镜像的缓存与仓库镜像,虽然权限控制弱一些,够用,记录用法及踩坑。1作为镜像缓存,唯一的坑,就是第一次拉取及后续拉取镜像,没有缓存,也不晓得为啥配置了 insecure-registries和 registry-mirrors没生效,iftop观察流......
  • win10 openocd通过vscode远程调试stm32的uboot--Apple的学习笔记
    一,前言我在uboot支持的cortex-M4内核启动流程分析--Apple的学习笔记中就说过了,我计划要单步调试uboot,但是我只有stlink,所以要基于openocd的gdb来调试,所以就做了尝试,花费约2天时间,虽然做了些无用功,专门还装了ubuntu18.04,且基于ubuntu还安装了openocd这些其实都无用的,但是就是这些过......
  • 本地k8s部署kubesphere及踩坑记录
    什么是KubeSphere首先介绍一下kubesphere是什么,是从官网上摘抄的。KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的IT自动化运维能力,简化企业的DevOps工作流。它的架构可以非常方便地使第三方应用与云原生生......
  • STM32F3系列 ADC采样单端采样模式(基于LL库)
    STM32F3系列ADC单端采样(基于LL库)芯片型号:STM32f303RBT6开发软件:MDK5&CubeMX&VSCode目录目录STM32F3系列ADC单端采样(基于LL库)目录引言1基础知识1.1ADC转换基本流程1.2时钟树1.3关键参数1.3.1位数1.3.2触发信号1.3.3采样时间1.3.4转换时间2CubeMx配置步骤......
  • vscode 安装了clang之后 即使卸载也没有跳转功能记录
     借鉴这位博主  【精选】VSCodeC/C++无法跳转到定义、自动补全、悬停提示功能_c/c++:editconfigurations(json)-CSDN博客 (上图高亮部分)卸载clang 重启VSCode 然后IntelliSenseEngine开关设置为Default 应该就可以了 ......
  • 第八周学习记录
    第四章文件权限4.2基本权限4.2.1ACL的基本用法getfacl命令查看ACL权限,如下图所示: setfacl命令可以设置ACL权限,对每一个文件或目录进行更精确的权限设置,添加“-m”参数可以修改当前文件ACL权限,如下图所示:为用户tom,增加“rwx”权限,使用getfacl命令查看,如下图所示: ......