0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

带你一步步了解STM32启动代码

电子设计 来源:网络整理 作者:工程师1 2018-04-19 13:40 次阅读

对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的启动代码。没有BIOS的电脑,那注定是一块板砖!BIOS主要是做一些开机前的准备工作,例如系统时间设定、启动顺序。。。扯远了

其实电脑本身就是从单片机而来,那么单片机也是有启动代码的,只是我们绝大部分情况 不去关心它。

启动代码究竟都干了些什么工作,为何需要它?想想你在c语言中用到了什么东西,而这些东西却是拿来就可以用的?堆、栈!没错,就是他们。我们知道堆和栈是内存中划分出的一块区域,那为什么我们没有亲自划分呢,因为启动代码帮了你的忙!!!再想想单片机工作的时候,有哪些配置被我们忽略了,而它却可以用?时钟,就是这货,我们可以不配置时钟,而你发现它竟然有默认值!还是启动代码帮了你

接下来仔细研究一下stm32的启动代码,首先要知道启动代码藏在哪里:一个叫做startup的汇编文件。启动代码是对硬件的一个最初级的配置,它必须用汇编语言来实现,汇编是真正的硬件编程语言。

从上到下解读启动代码

1、定义栈大小

2、定义堆大小

3、中断向量地址

ps:Cortex-M4内核要求内存的第一个地址是栈指针,第二个地址开始为中断向量。而中断向量的第一个必须是复位,因为代码是从上到下执行,开机首先遇到的就是复位

4、复位中断处理函数

ps1:仔细那看有两个东西需要注意:“SystemInit”这个是时钟初始,“__main”这一句代表跳转到“main”函数。正因为复位这样的写法,所以程序都是从main函数开始执行的

ps2:“SystemInit”具体实现过程在stm32fxxx.c,“__main”也是在某个地方与真正的main关联起来

5、其他中断处理函数

ps1:绝大部分中断的实现系统没有给出,等待程序猿去写。但是中断的名字我们都可以看到的,每一个名字都和上面向量表中对应着。我们知道函数名其实就是一个地址,而中断的入口地址是固定的,只要找对名字,那地址也就找对了。

ps2:中断的入口地址由内核和芯片决定,无法更改。因此不要改启动代码中的中断向量表

6、初始化堆、栈


ps:正因为堆和栈已经被初始化,所以你的C语言才可以顺利的执行

启动代码是非常关键的,所有的CPU都有启动代码。这里完成了最基本的初始化功能,尤其是中断向量表,程序猿每一个中断函数的名字都要与启动代码中的向量表对应,否则中断是无法进入的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6002

    文章

    43982

    浏览量

    620916
  • STM32
    +关注

    关注

    2240

    文章

    10675

    浏览量

    348866
  • BIOS
    +关注

    关注

    5

    文章

    455

    浏览量

    45006
收藏 人收藏

    评论

    相关推荐

    一步步教你在局域网内玩转NAT命令

    一步步教你在局域网内玩转NAT命令  NAT是网络管理中常用的技术命令,其使用环境多是:多个内部计算机在访问INTERNET时使用同个公网IP地址;第二是当公司希望对内部计算机进行有效的安全保护
    发表于 02-24 18:01

    外国牛人教你一步步快速打造首台机器人(超详细)

    外国牛人教你一步步快速打造首台机器人(超详细)
    发表于 08-15 19:30

    一步步写嵌入式操作系统—ARM编程的方法与实践ch02

    一步步写嵌入式操作系统—ARM编程的方法与实践ch02
    发表于 08-20 20:54

    STM32初学者笔记一步步建立自己的STM32函数(分享)

    `[table=98%][tr][td]STM32初学者笔记(1) 一步步建立自己的STM32函数使用自己建立的 STM32F103.H 的 头文件。里面有大量中文注释。非常适合初学者
    发表于 03-10 11:26

    一步步带你学习电子技术

    经验之谈:带你从菜鸟到电子工程师
    发表于 04-28 11:52

    推荐本非常实用的Multisim仿真教程,分为模电,数电,一步步进阶掌握Multsim的仿真工具

    推荐本非常实用的Multisim仿真教程,分为模电,数电,一步步进阶掌握Multsim的仿真工具文件有点大,请全部下载后解压即可
    发表于 12-31 14:18

    CC2530一步步演示程序烧写

    CC2530一步步演示程序烧写第一步——先安装IAR开发环境第二歩——安装CC2530烧写工具第三歩——CC2530串口配置软件使用具体完整步骤看下面文档
    发表于 03-03 14:33

    一步步建立_STM32_UCOS_模板

    一步步建立_STM32_UCOS_模板
    发表于 09-29 11:46

    菜鸟一步步入门SAM4S-XPLAINED--IAR开发环境

    菜鸟一步步入门SAM4S-XPLAINED--IAR开发环境
    发表于 01-25 10:55

    一步步告诉你stm32开发环境搭建流程

    调试下载的工具, 下面这一步要添加USE_STDPERIPH_DRIVER, STM32F10X_HD告诉编译器相关参数配置 最后按OK,确认退出,到此搭建完毕,可以开始编程开发了
    发表于 02-27 15:44

    XMC使用经验:教你一步步使用KEIL-MDK开发XMC1300

    使用手册和例程中,大部分都是采用DAVE平台来讲解的,采用KEI-MDK环境的资料非常少,下面就用此板子作为讲解平台,以个翻转板上6路LED灯为DEMO一步步讲解如何建立MDK工程,及编写外设底层驱动
    发表于 12-14 09:39

    一步步进行调试GPRS模块

    背景:在不知道硬件是否正确情况下,一步步进行调试,最终完成调试。以下是自己调试步骤。1、从gprs模块TX ,RX 单独焊接两个线出来,通过上位机发送AT指令,是否能正常工作。
    发表于 01-25 07:33

    ARM嵌入式系统如何入门?怎样一步步的去学习

    ARM嵌入式系统的学习步骤对于很多新手来说,不知道ARM嵌入式系统如何入门?怎样一步步的去学习?接下来信盈达教育嵌入式培训网就详解的为大家介绍:关于ARM嵌入式系统学习步骤:1.做个最小系统板:如果
    发表于 02-16 06:33

    stm32是如何一步步实现设置地址匹配接收唤醒中断功能的

    为什么要设置地址匹配接收唤醒中断呢?stm32是如何一步步实现设置地址匹配接收唤醒中断功能的?
    发表于 02-28 08:07

    一步步介绍CmBacktrace的相关知识和使用方法

    。定位错误的方法也往往是连接上仿真器,一步步 F10/F11 单步,定位到具体的错误代码,再去猜测、排除、推敲错误原因,这种过程十分痛苦,且花费的时间很长。 当然,也有部分开发者通过故障寄存器信息来定位
    发表于 10-26 15:44