STM32上电后是怎么启动的?

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

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

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

启动大致流程

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

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

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

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

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

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

相应加载过程如下图

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

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

野火stm32呼吸灯程序_说一说STM32启动过程相关推荐

  1. stm32呼吸灯程序_学习STM32从点灯开始!

    前言 学STM32我们从点灯开始,学Linux驱动我们自然也要点个灯来玩玩,尽量在从这些基础例程中榨取知识,细抠.细抠,为之后更复杂的知识打好基础. 与硬件无关的LED驱动 回顾hello驱动程序,我 ...

  2. stm32呼吸灯程序_STM32裸机开发基础篇02点亮LED

    前言 上一节,我们完成了STM32单片机开发环境的搭建,本节我们正式学习STM32单片机,编程语言的学习,通常是从第一个"hello world"开始,而点灯实验便是单片机学习的开 ...

  3. dsp呼吸灯C语言编程,DSP28335 呼吸灯程序

    DSP28335呼吸灯程序 //########################################################################### // // FI ...

  4. ## STM32——闪烁灯程序

    STM32--闪烁灯程序 单片机的闪烁灯是继点灯后的一个简单的程序,这也是每一个初学者的必经路程,也并没有我们想象的那么难,我们要相信自己.人生难得几回搏,此时不搏待何时. --至每一个为自己的理想而 ...

  5. 模拟IO口简单呼吸灯程序

    定义一个0.1ms 的时钟周期性调用下面C函数 /*呼吸灯程序*/ void BreathingLamp(void) {static uint8_t LEDTimeCount=0;static uin ...

  6. 基于qtLED呼吸灯程序(多线程控制)---全CSDN独家

    本次实验是基于基于qtLED呼吸灯程序(多线程控制),大家都知道呼吸灯都是用pwm波来控制输出电压的大小来控制呼吸灯的一闪一灭来实现呼吸的效果,开呼吸灯程序免不了用while死循环,嵌入式必备程序wh ...

  7. keil5生成一个单片机led呼吸灯程序

    对于生成单片机 LED 呼吸灯程序,您可以以下这样做: 打开 Keil 5 软件,创建一个新项目. 选择您使用的单片机类型和板子,按照向导配置项目. 在程序代码中包含所需的头文件和定义. 使用 for ...

  8. android 呼吸灯权限_小米新机搭载炫彩呼吸灯酷到爆;三星顶级旗舰Note 10正式官宣...

    各位,早上好!即日起,魅族Meizu Pay京津冀互联互通卡免费开卡,你期待吗? 1,苦等436天!国产超优秀ROM终于换代 7月2日,有网友曝光了魅族Flyme 8的海报图片,图片显示:你所期待的我 ...

  9. 用keil编写C语言流水灯程序,简述关于Keil、STM32 用C++编写流水灯程序

    通常来说,在单片机上编程,要么汇编,要么C语言,而用C++++进行开发的很少,那么究竟能不能用C++开发单片机呢? 答案是肯定可以的,下面讲讲基于Keil.STM32,用C++编写流水灯程序的一些内容 ...

最新文章

  1. 我在犹豫是不是该收集这几首MP3
  2. 学习笔记Spark(十)—— Spark MLlib应用(2)—— Spark MLlib应用
  3. 基本数据类型(列表,元祖,字典,集合)
  4. 【MATLAB统计分析与应用100例】案例009:创建一个RandStream类对象,调用其randn方法生成标准正态分布随机数
  5. Oracle序列更新为主键最大值
  6. java integer 值传递_在java中String,对象,Integer(包装类型的)关于引用传递仍是值传递...
  7. JavaScript基本类型和引用类型
  8. python数据分析环境搭建_教你零搭建Python数据分析环境
  9. 20CM网线你会拿来干什么??
  10. Maven - settings.xml里的offline节点的作用
  11. Rabbitmq 延迟队列
  12. 基于python个人睡眠质量分析设计与实现
  13. 谈谈PRNU 光响应非均匀性
  14. Mars Rover
  15. 用Matlab的FDAtool生成IIR滤波器参数
  16. Linux下基于C++11的socket网络编程(线程版本)
  17. 二分查找理论(三种问题类型、两种算法形式)
  18. 网易云音乐数据服务之路
  19. 正负数原码、反码、补码以及位运算
  20. 微信小程序中实现瀑布流

热门文章

  1. SpringBoot2整合Activiti6工作流框架
  2. java 杭州专卖店_杭州JAVA哪家有名气
  3. mysql主从复制周期_Mysql主从复制的实现
  4. java 实体类 代码重复_java – JPA两个单向@OneToMany关系到同一个实体导致重复输入...
  5. linux java文件 core_linux下部署.net core/java
  6. qt将生成的程序打包在他人电脑上可用
  7. Python next 函数 - Python零基础入门教程
  8. Python for循环 - Python零基础入门教程
  9. oracle表空间如何压缩,Oracle里表空间的压缩
  10. vs2017 cmake android,CMake构建VS2017工程