野火stm32呼吸灯程序_说一说STM32启动过程

998361537d20e44f9aee34e54bbcf6e4.png

STM32上电后是怎么启动的?

main函数之前单片机都做了些什么?

带着这些疑问我们开始进入游戏。。。。。

首先,开局一张图,过程全靠编,如有说错的地方望能指正

7b826b7509b08600141f881aa8ce1029.png

启动大致流程

1- 上电启动或者硬件复位

2- 单片机从0x00地址开始执行程序,在执行程序前,单片机会根据BOOT引脚设置,将对应的存储器重映射到0x00处,如设置为BOOT0 = 0 ,BOOT1 = X 时,单片机将内部FLASH映射到0x00处,即将0X8000 0000地址映射到0X00处,单片机从FLASH中的程序启动,其他启动方式原理类似,相应的BOOT引脚设置如图

b68f7e00e2848228f9fa4f16b317b326.png

3- 跳转到存储有代码的存储介质(如FLASH)以后,单片机首先找到的是一个中断向量表(向量表如下图所示),向量表第一个值是复位函数指针,它是用来初始化PC指针寄存器的,当PC指针寄存器初始化完成后,单片机会去执行复位函数

d31cf93f7dccdf615125355d4626fb0c.png
来自《Cortex M3与M4权威指南》

4- 复位函数如下图,在复位函数中,首先执行系统时钟初始化函数初始化系统时钟,然后跳转到__main(当然,在__main之前也可以再初始化其他外设,如初始化FSMC配置外部SRAM等)

95ea2308853cf4c26aca307efe6a97c0.png

5- 在__main函数中,会初始化内核的寄存器,如R0-R15,划分堆空间(如果使用到的话)和栈空间(栈空间是C语言程序能运行的必要条件,没有栈,C程序就无法运行),同时初始化程序数据,即将用户代码中的数据从FLASH中搬运到SRAM中,简单理解就是初始化全局变量(这也就是全局变量在C语言中不初始化也不会出现随机值的原因了)

相应加载过程如下图

6de6d0a2b953767b1066a0a4aaccad58.png
来自《野火零死角玩转STM32》

d5627e59e4d62394c98e30cf695a3d1a.png
来自《野火零死角玩转STM32》

6-以上步骤执行完毕后,系统将会进入main函数,进入C语言的世界。

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

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

相关文章

apache启动失败_请检查相关配置.√mysql5.1已启动._1、Apache启动失败,请检查相关配置-百度经验...

前几天电脑系统崩溃了,后边到服务中心重新恢复了系统,但是回来使用APMServ 5.2.6发现:1、Apache启动失败,请检查相关配置。√MySQL5.1已启动。系统的各种服务我都检查过了,都是正常开启的,百思不得其解,后边在百度上搜索一篇文章有个例子照做了以后结果成功了。---------------…

职业规划纵向横向_收下这份《职业规划喂饭式指南》

果不其然!上篇文章发布后,我收到了被拿来举反例的网友小哥的抗议~~~讲道理,最后他拿到的Offer还是十分不错的,从此以后我的朋友圈又多了一位第一手保真瓜主,他好我也好~那么本期《职业规划喂饭式指南》来喽&#xff01…

javascript字典中添加数组_如何在 JavaScript 中更好地使用数组

在 freeCodeCamp 社区阅读原文。本文短小精悍,我保证。在过去的数个月里,我注意到在我审阅的 pull request 中有四个(关于数组使用的)错误经常出现。同时,我自己也会犯这些错误,因此有了这篇文章。让我们一…

mysql join图解_MySQL中Join算法实现原理分析[多图]

在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join。顾名思义,Nested Loop Join 实际上就是通过驱动表的结果集作为循环基础数据&#…

mysql多线程使用一个链接_探索多线程使用同一个数据库connection的后果

在项目中看到有用到数据库的连接池,心里就思考着为什么需要数据库连接池,只用一个连接会造成什么影响?(只用一个connection)?1 猜想:jdbc的事务是基于connection的,如果多线程共用一个connection,会造成多线程之间的事务相互干…

vs中四点画矩形的算法_中考热点,初高中衔接之倒角利器四点共圆

初中数学课程标准修改后,教材中四点共圆知识已经删除掉了,但这样一件强悍且使用简单的武器,我们还是有必要去了解的,近年来对于压轴题以几何为核心的考区来说,有时用到解题更为简洁方便,由此应该理解掌握。…

phpnow mysql字符集_使用PHPnow搭建本地PHP环境+创建MySQL数据库

要想学习WordPress建站,在本地搭建PHP环境是十分必要的,在以后的建站日子里,你可以使用这个环境来进行wordpress的程序学习、调试等工作,等你熟悉了wordpress以后,再购买域名和空间,真正开始你的建站之旅。…

wps如何保存最终状态_如何使得打开word文件显示最终的修改状态

展开全部 在日常工作中,经常为了保护文档而将其设置成最e68a84e8a2ad3231313335323631343130323136353331333363376366终状态,设置文档为最终状态,则是表示已完成这篇文档的编辑,这是文档的最终版本。如果文档被标记为最终状态,则状态属性将设置为“最终状态”,并且将禁用…

python整数反转_敲代码学Python:力扣简单算法之整数反转

学习重点:整数逆序算法力扣(LeetCode)原题​leetcode-cn.com 功能:整数反转 来源:https://leetcode-cn.com/explore/featured/card/top-interview-questions-easy/5/strings/33/ 重点:整数逆序算法 作者&am…

前端累加nan怎么解决_前端面试,你有必要知道的一些JavaScript 面试题(上)

1.使用 typeof bar “object” 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端?使用 typeof 的弊端是显而易见的(这种弊端同使用 instanceof):let obj {};let arr [];console.log(typeof obj object); //trueconsole.log(typ…

tidb 配置mysql数据源_安装tidb数据库

1.下载压缩包安装tar包路径命令:wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz命令:wget http://download.pingcap.org/tidb-latest-linux-amd64.sha2562.检查文件完整性命令:sha256sum -c tidb-latest-linux-amd64.sha2…

linuxos或sv独立客户端不支持应用程序打开方式_搞不明白为什么大家都在学习 k8s

作者 | 小明菜市场来源 | 小明菜市场(ID:fileGeek)头图 | CSDN 下载自东方IC前言都2020年了,你还不知道kubernetes就真的真的真的out啦。(贩卖焦虑体) 什么是k8s,k8s这个词来自于希腊语,有主管,舵手,船长的…

react 图片放在src里面还是public_手写Webpack从0编译Vue/React项目

当前前端开发,90%的项目都是Vue和React,然而70%的同学都基于脚手架创建项目,因为脚手架会包含项目基本框架、webpack配置、scss/sass/less解析、babel配置、DevServer、JSX/Vue文件解析、CSS前缀等,我们要做的就是开发功能模块&am…

python 在线预览文件_用Python PyQt写一个在线预览图片的GUI

在爬完网上一篇帖子,并得到其中的所有图片链接后,写一个GUI来实现在线预览是一个很自然的想法, 相当于实现一个python版的图片浏览器, 通过这个练习,可以让我们更熟悉PyQt这个库。这里我用的是PyQt4。以下是我的写的程…

google 确定某点海拔高_一份“高投资回报率”的用户体验度量方法指南

本文核心就是介绍体验度量方法,以及如何在商业项目中如何发起一个具有高ROI(投资回报率)的用户体验量化流程。 下面文章将分为解读高投资回报和拆解体验度量、实际案例讲解三部分。一、解读高投资回报率高ROI(投资回报率)来定义体验度量流程的原因?3-5年…

md5 java代码_JAVA简单实现MD5注册登录加密实例代码

开发环境:jdk1.7,eclipse框架:springmvc,mybatis工具:maven以下代码复制即可实现MD5加密创建一个mave项目,加web。不懂得可以搜索一下就有了。注册用户的JSP页面代码如下。pageEncoding"utf-8"%&…

一维卷积神经网络_序列特征的处理方法之二:基于卷积神经网络方法

前言上一篇文章介绍了基本的基于注意力机制方法对序列特征的处理,这篇主要介绍一下基本的基于卷积神经网络方法对序列特征的处理,也就是TextCNN方法。序列特征的介绍,背景以及应用可以参考上一篇的详细介绍,这里简单回顾一下定义&…

macos降级_iOS12.3 beta2更新了什么 iOS12.3测试版2新特性与升降级方法

4月0日凌晨,苹果发布了iOS12.3 beta2,作为iOS12.3第二个测试版,相比前一个版本,发布时间间隔近2周,这次依然是小版本更新,不过相对良心一些,主要是多了一些与国内用户相关的东西。iOS12.3 beta …

linux配置usb主从_杂集:浅谈关于Mongodb数据库主从复制

Linux下Mongodb数据库主从复制配置Mongodb的三种集群搭建的方式:Master-Slaver:主从[目前被副本集取代]。Replica Set:副本集。Sharding:切片。Mongodb单实例缺点:适合简易开发时使用,生产使用不行&#xf…

java sax xml文件解析_java解析xml文件-DOM/SAX

java解析xml文件的两种方式1:DOM原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存一个简单的xml使用java解析//builder工厂DocumentBuilderFactory f…