历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2021年10月19日 | stm32专题四:启动文件分析

发布者:等放假的zr0 来源: eefocus关键字:STM32  启动文件 手机看文章 扫描二维码
随时随地手机看文章

stm32的启动文件startup_stm32f10x_hd.s主要包含以下6个部分:


分配栈,包括大小和栈顶地址(不初始化);

分配堆,包括大小和堆起始地址(不初始化);

初始化中断向量表,将栈顶地址初始化为FLASH的0地址,复位程序为0X04地址,并将程序计数器指针PC指向复位程序0X04;

复位程序;

中断服务程序;

初始化1和2分配的堆栈;

以下是启动文件:


;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************

;* File Name          : startup_stm32f10x_hd.s

;* Author             : MCD Application Team

;* Version            : V3.5.0

;* Date               : 11-March-2011

;* Description        : STM32F10x High Density Devices vector table for MDK-ARM 

;*                      toolchain. 

;*                      This module performs:

 

;*                      - Set the initial SP

;*                      - 初始化堆栈指针SP

 

;*                      - Set the initial PC == Reset_Handler

;*                      - 初始化PC指针 == Reset_Handler复位程序,上电复位后的第一个程序

 

;*                      - Set the vector table entries with the exceptions ISR address

;*                      - 以规定的ISR(中断服务请求)地址来设置中断向量表

 

;*                      - Configure the clock system and also configure the external 

;*                        SRAM mounted on STM3210E-EVAL board to be used as data 

;*                        memory (optional, to be enabled by user)

;*                      - 配置系统时钟,配置挂载到stm32板上的外部SRAM(可选项)

 

;*                      - Branches to __main in the C library (which eventually

;*                        calls main()).

;*                      - 调用Ck库函数 __main,去到C的世界

 

;*                      After Reset the CortexM3 processor is in Thread mode,

;*                      priority is Privileged, and the Stack is set to Main.

;* <<< Use Configuration Wizard in Context Menu >>>   

;*******************************************************************************

; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.

; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,

; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE

; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING

; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

;*******************************************************************************

 

 

; 1-栈

; Amount of memory (in bytes) allocated for Stack

; 为堆栈分配内存,以字节为单位

 

; Tailor this value to your application needs

; 可以根据需要修改栈的大小

 

; Stack Configuration

; 配置栈(栈就是一块内存):变量(局部/全局),函数调用

 

;    Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>

;

 

Stack_Size      EQU     0x00000400

; 定义栈大小 1024字节(1KB)

 

                AREA    STACK, NOINIT, READWRITE, ALIGN=3

;               告诉编译器汇编一个数据段,段名为STACK,不初始化,可读可写,8字节对齐

 

Stack_Mem       SPACE   Stack_Size

;               分配内存空间,单位字节,大小为Stack_Size

__initial_sp

; 栈顶地址

 

 

; 2-堆

; Heap Configuration

; 配置堆,主要用于动态内存分配,malloc()

 

;     Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>

;

 

Heap_Size       EQU     0x00000200

; 512字节

 

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base

Heap_Mem        SPACE   Heap_Size

__heap_limit

; 堆起始地址

 

                PRESERVE8   ; 当前堆栈以8字节对齐

                THUMB       ; 兼容THUMB指令集,THUMB是16位指令集,现在使用的THUMB-2是32位指令

 

 

; 3-中断向量表

; Vector Table Mapped to Address 0 at Reset

; 初始化中断向量表,向量表在复位时映射到地址0

 

                AREA    RESET, DATA, READONLY

;               汇编一个数据段,属性只读

 

                EXPORT  __Vectors       

;               向量表起始地址

 

                EXPORT  __Vectors_End

;               向量表结束地址

 

                EXPORT  __Vectors_Size

 

__Vectors       DCD     __initial_sp               ; Top of Stack

;               把栈顶地址初始化成向量表的起始地址,解释如下:

;               向量表从FLASH的0地址开始放置,以4个字节为一个单位,地址0存放的是栈

;               顶地址,0X04存放的是复位程序的地址,以此类推。从代码上看,向量表中存放

;               的都是中断服务函数的函数名,可我们知道C语言中的函数名就是一个地址。      

 

                DCD     Reset_Handler              ; Reset Handler

;               初始化复位程序地址,地址0X04

 

                DCD     NMI_Handler                ; NMI Handler

                DCD     HardFault_Handler          ; Hard Fault Handler

                DCD     MemManage_Handler          ; MPU Fault Handler

                DCD     BusFault_Handler           ; Bus Fault Handler

                DCD     UsageFault_Handler         ; Usage Fault Handler

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     SVC_Handler                ; SVCall Handler

                DCD     DebugMon_Handler           ; Debug Monitor Handler

                DCD     0                          ; Reserved

                DCD     PendSV_Handler             ; PendSV Handler

                DCD     SysTick_Handler            ; SysTick Handler

 

                ; External Interrupts

                DCD     WWDG_IRQHandler            ; Window Watchdog

                DCD     PVD_IRQHandler             ; PVD through EXTI Line detect

                DCD     TAMPER_IRQHandler          ; Tamper

                DCD     RTC_IRQHandler             ; RTC

                DCD     FLASH_IRQHandler           ; Flash

                DCD     RCC_IRQHandler             ; RCC

                DCD     EXTI0_IRQHandler           ; EXTI Line 0

                DCD     EXTI1_IRQHandler           ; EXTI Line 1

                DCD     EXTI2_IRQHandler           ; EXTI Line 2

                DCD     EXTI3_IRQHandler           ; EXTI Line 3

[1] [2] [3] [4]
关键字:STM32  启动文件 引用地址:stm32专题四:启动文件分析

上一篇:stm32专题三:位带操作—GPIO输出和输入
下一篇:stm32专题五:时钟树(一)寄存器

推荐阅读

        乱花渐欲迷人眼,千元机该如何选?         m1390012018-10-19 09:08        随着OPPO和vivo相继发布线上新品,千元机领域成为国产四大厂商的第二战场,在四大厂商的千元机中,我们看到了更多的技术下放,很多本来被藏私于旗舰产品的技术也在这些产品上见到,这对于手机用户来说毫无疑问是一件好的事情,但是随之而来的...
////////////////////////////////////////////////////////////////////// Copyright(C), 2013-2016, GEC Tech. Co., Ltd.//// File name: GPLE/bmp.c//// Author: Vincent Lin (林世霖) 微信公众号:秘籍酷//// Date: 2016-11// // Description: 处理BMP格式图像数据//// GitHub: github.com/vincent040 Bug Report: 2...
  在手术机器人领域,达芬奇手术机器人一直占有重要地位。   对于医生来说,达芬奇手术机器人可以提供与开放直视效果一致的手术视野,保证手眼的协调。另外,高分辨率的立体腔镜可以提供放大几十倍的高清三维图像,降低错误的发生率。而对患者来说,达芬奇手术机器人可以明显改善手术效果,减少术后并发症、损伤和失血,使患者能够恢复得更快。  ...
智能驾驶辅助系统已经广泛应用于量产汽车中,当我们在开车过程中,一些智能驾驶辅助系统可以有效地帮助我们提高驾驶的便利性和舒适性,例如当前应用较为广泛的自适应巡航控制系统,驾驶员开启该系统后车辆,可以以确定速度或确定车距进行巡航行驶,这大大提升了驾驶的便利性。最近,搭载NOP领航辅助功能的蔚来ES8出事了。NOP领航辅助功能也是智能驾驶辅助系...

史海拾趣

问答坊 | AI 解惑

低成本线路板测试软件的设计思路

低成本线路板测试软件的设计思路…

查看全部问答∨

请问WCELoad这个工具在哪?

我搜索了wince60目录什么也没找到,我想在我的iamge里打包这个工具,但是找不到它怎么办?是不是要在catalog里选什么组件啊? …

查看全部问答∨

wince中RETAILMSG不能在串口输出消息

我在wince的public目录下的驱动代码中加入RETAILMSG(1,(.....)), 可是在串口中无法打印出任何trace,为什么? 在palform的bsp中加的trace都能够正常显示出来。 请大家指教一二。。。。。。。谢谢!!…

查看全部问答∨

WinCE下怎么实现屏幕锁定?

没有键盘作辅助操作,只有触摸屏,怎么实现屏幕锁定(此锁定仅是无法操作,但是屏幕上该刷新的东西还得继续刷新)?…

查看全部问答∨

用C#编写wince串口通信应用程序的源代码

最近要编写一个关于Wince串口通信应用程序,谁有用C#编写的,能贴出来让大家分享吗?谢谢!…

查看全部问答∨

板子没有USB、有串口转USB接口,如何DFU?

板子没有USB,但有个串口、和串口转USB的接口(这样PC的USB连着板子的串口),板子有办法可以进DFU模式,但PC这边怎么弄呢?我想的是:先装上驱动,然后用DFU客户端(是DfuSe Demo吧)下载DFU文件,但安装驱动(Driver\\STDFU.inf)时windows ...…

查看全部问答∨

3.6V 至6V 输入,3.3V 输出,微型高效率DC/DC 转换器

此参考设计旨在给输入电压范围为3.6V至6.0V的MSP430器件供电。…

查看全部问答∨

【项目总结】基于lm3s的幅频特性测试仪,包含AD转换,ad9850扫频信号产生,lcd显示

                   前段时间学校安排制作一个幅频特性测试仪,一开始使用的51,做到一半感觉比较吃力。于是学校就给我我一块lm3s811,拿到这个板子也就两周不到,昨天刚刚交了作品。两周时间学 ...…

查看全部问答∨

求个降压的电路

想用KI2300这个场效应管做个DC5V入3V出负载电流1A降压的电路但对场效应管不是好熟悉。高手赐教?…

查看全部问答∨

各位大神你们有没有遇到过这个问题??

IAP升级时用Keil for ARM 4.10 与4.23 为什么产生的BIN文件为什么不一样?? 4.10 运行在 XP环境, 4.23运行在 Win7 环境。。。。。。 有没有遇到过这样的情况??我 用的是Win7环境。。。。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved