STM32那点事(1)_STM32F40_41xx启动文件详解

STM32 官方为广大开发者提供一套统一开发固件,主要是屏蔽寄存器封装,提供初始化等功能,较少开发者负担。只需要调用相关模块封装,对相关结构提初始化即可,较少开发调试时间。

ARM之Cortex M3的启动过程

目前,多数MCU厂商都提供一个启动文件。当然,编程者也可以自己编写启动文件,具体编写要求ARM的网站上都有相关文档进行说明。下面分析一下STM32启动文件startup_stm32f407xx.s

STM32F0单片机快速入门三 MCU启动过程               这篇可以好好看看,来龙去脉讲得比较清楚

最初芯片内是不能存储代码的,需要外挂EPROM,就是下面这种带个小玻璃窗的存储器。擦除 EPROM 中的代码需要用紫外线照射几分钟才行。

后来出现了 Flash 这种可电擦写的存储器,并集成在了单片机内部。

后来,有芯片厂商把这种代码在出厂时就固化在芯片里,极大的方便了代码下载和程序更新。STM32F030内部就固化了Bootloader。当我们把一个引脚 BOOT0 拉高的同时,重新给芯片上电或复位,就会触发Boootloader进入运行。此时我们通过单片机的串口就可以把新程序发送给单片机,发送完后把 BOOT0 拉低,再复位单片机,新程序就会运行起来。

Startup Code 可以译为启动代码。单片机上电或复位后最先执行的一段代码。一般主要会完成堆栈指针的设置,复位向量的获取和加载,然后初始化变量,最后跳转到用户代码。在详细看启动代码之前,我们先看一下 STM32F030 的内存映射。

STM32(一)之启动文件简介

本文以STM32F103为例,介绍STM32的启动文件。

一般而言,系统上电后第一个执行的是由汇编所编写的启动文件,其主要工作为一下五部分:

(1)、初始化堆栈指针SP=_initial_sp

(2)、初始化PC指针,令其=Reset_Handler

(3)、初始化中断向量表

(4)、配置系统时钟

(5)、调用C库函数_main初始化用户堆栈,从而最终调用main函数进入C的世界

这上述的五个功能一般都由STM32官方在它们提供的官方库里的ASM文件(汇编启动文件)startup_stm32f10x_hd.s实现,因此在实际中只需要根据所用编译软件的不同选择对应的ASM文件,然后将之加入编译的工程中,再编写自己的main文件便可,而系统时钟已在ASM文件中设为72M,以及向量表已经设置完成(向量表的介绍在别的文章里介绍)。

kEIL5环境下移置STM32库文件            打开Keil5新建工程,Project-New Project,并在新工程目录下新建5个文件夹,STARTUP、CMSSIS、FWLIB、USER、DOC;

启动文件、库文件是和自己写的c文件一起编译之后,一块烧到flash里面的。

库函数也是用到什么外设的库,才把它的库文件加入工程中。

BootLoader与MCU启动过程相关推荐

  1. 浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解

    内容提要 注:本文摘自NXP工程师胡恩伟的微信公众号"汽车电子expert成长之路",大家感兴趣可以关注一下. 引言 1. S32K1xx系列MCU启动过程详解(startup_S ...

  2. TI OMAP Bootloader Project 关于启动过程

    以下wiki详细讲解了启动过程 http://omappedia.org/wiki/Bootloader_Project http://omappedia.org/wiki/OMAP3_U-Boot_ ...

  3. Bootloader启动过程

    1.作用 嵌入式系统的引导加载程序,系统上电后运行的第一段程序.在完成对系统的初始化任务后,它会将非易失性存储器(通常是FLASH)中的Linux内核拷贝到RAM中,然后跳转到内核的第一条指令处继续执 ...

  4. 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)

    1.Linux内核启动过程概述 一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序.其中 Bootloader是系统启 ...

  5. Linux内核启动过程和Bootloader(总述)

    1.Linux内核启动过程概述     一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序.其中 Bootloader ...

  6. BootLoader(U-Boot)启动过程记录

    BootLoader(U-Boot)启动过程记录 定义 Bootloader终极目的是引导内核,加载内核到内存然后跳转到内核的地方执行,在加载之前也会做一些硬件的初始化等等操作.启动模式分为两种:启动 ...

  7. linux系统需要占多大的内存,linux启动过程Bootloader、kernel

    256M可以推1080P屏幕 128M可以基本运行并安装 256M可以勉强开启特效 512M流畅运行特效 当然内存越大越好,特效与显卡也有关系 和windows相比,当然linux对内存的需求小 Bo ...

  8. Tiva C(TM4C)的bootloader和启动过程与stm32对比

    gossip: 最近在咸鱼捡了个123GXL的板子,板子没到就先装好了环境,然后看了看资料,前天板子到了,先点了个灯,然后把板子扔到一边又继续看资料去了emmm... 看资料的时候发现有些东西挺有意思 ...

  9. Analyzing the Linux boot process-分析Linux启动过程

    本文翻译自Analyzing the Linux boot process. 箴言:了解运行良好的系统是将来处理不可避免的故障的很好准备 开源软件领域中流行的最为古老笑话:"the code ...

最新文章

  1. springmvc3.2+spring+hibernate4全注解方式整合(一)
  2. 干货|python基础知识总结
  3. hdu1874(畅通工程续)
  4. R语言获得所有Aesthetics(美学映射)参数:使用长表输出、使用宽表输出
  5. VTK:网格之HyperTreeGridSource
  6. 根据用户查进程_【磨叽教程】Android进阶教程之在Android系统下各进程之间的优先级关系...
  7. 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
  8. axure弹窗关闭_干货来袭,Axure插入图标的几种办法
  9. goroutine 相关知识8
  10. MySQL 对 CREATE TABLE IF NOT EXISTS SELECT 的处理
  11. 求100以内素数C++
  12. 使用maven打jar包
  13. ubuntu 安装 flash 软件 卸载
  14. 打印纸张尺寸的简单说明
  15. 读书笔记:《少有人走的路1----心智成熟的旅程》
  16. 实用网站推荐(3):菜鸟教程
  17. 动物网页html5设置思想,网站设计思想
  18. Hexo sakura整理
  19. 2022-2028全球与中国数据虚拟化解决方案市场现状及未来发展趋势
  20. 【python】详解pandas.DataFrame.resample根据时间聚合采样(一)

热门文章

  1. c语言combine函数,combine
  2. python2.7除法_对python中的float除法和整除法的实例详解
  3. 使用 Blender* 重新拓扑 VR 和游戏素材
  4. Android Studio 3.5 Canary 12 发布
  5. Elasticsearch 5
  6. 酷!一键构建我自己的PHP框架的开发环境
  7. VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】
  8. 比较Spring AOP与AspectJ
  9. 8)排序④排序算法之归并排序
  10. Python urllib和urllib2模块学习(一)