STM32单片机启动文件startup_stm32f10x_hd.s详解

发布者:chunying最新更新时间:2022-01-28 来源: eefocus关键字:STM32  单片机  启动文件  startup_stm32f10x_hd 手机看文章 扫描二维码
随时随地手机看文章

启动文件源码如下:


; 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    ;EQU定义栈空间的大小 1024字节,栈空间由编译器自动分配变量所占内存,该汇编语句等效于#define Stack_Size 0x00000400

 

                AREA    STACK, NOINIT, READWRITE, ALIGN=3 ;定义一个名为STACK的内存单元,它是可读写的,对齐方式为2^3=8字节对齐

Stack_Mem       SPACE   Stack_Size    ;SPACE分配连续的栈存储空间,大小为0x00000400(1K),把首地址赋给Stack_Mem

__initial_sp      ;初始化堆栈指针,指向堆栈顶。

                                                  

; Heap Configuration

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

;

 

;堆初始化

Heap_Size       EQU     0x00000200    ;EQU定义堆空间的大小,堆空间由人为手动分配变量所占内存,该汇编语句等效于#define Heap_Size 0x00000200

 

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3  ;定义一个名为HEAP的内存单元,它是可读写的,对齐方式为2^3=8字节对齐

__heap_base ;堆起始地址 

Heap_Mem        SPACE   Heap_Size ;SPACE分配连续的堆存储空间,大小为0x00000200(512Bytes),把首地址赋给Heap_Mem

__heap_limit   ;堆终止地址,与__heap_base配合限制堆的大小 

 

                PRESERVE8     ;告诉编译器以8字节对齐,命令指定当前文件保持栈的八字节对齐

                THUMB   ;告诉编译器使用THUMB指令集,THUMB 必须位于使用新语法的任何Thumb代码之前;定义复位段(中断向量表),并初始化

 

;中断向量表定义

; Vector Table Mapped to Address 0 at Reset ;中断向量表默认从地址0开始,如果使用了向量表重定位,则从重定位地址开始。假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000。

                AREA    RESET, DATA, READONLY ;定义一个名为RESET的数据段,它是只读类型的。

                EXPORT  __Vectors ;声明全局变量_Vectors,该标号可在其他文件中使用,表示中断向量表入口地址

                EXPORT  __Vectors_End ;向量表终止地址

                EXPORT  __Vectors_Size ;向量表空间大小

 

 

__Vectors       DCD     __initial_sp               ; Top of Stack  Top of Stack 第一个表项是栈顶地址;该处物理地址值即为 __Vetors 标号所表示的值;该地址中存储__initial_sp所表示的地址值,

;大小为一个字(32bit) 

                DCD     Reset_Handler              ; Reset Handler      复位异常,装载完栈顶后,第一个执行的,并且不返回。

                DCD     NMI_Handler                ; NMI Handler 不可屏蔽中断

                DCD     HardFault_Handler          ; Hard Fault Handler  硬件错误中断

                DCD     MemManage_Handler          ; MPU Fault Handler  内存管理错误中断

                DCD     BusFault_Handler           ; Bus Fault Handler  总线错误中断,一般发生在数据访问异常,比如fsmc访问不当

                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  挂起异常,此处可以用作RTOS的上下文切换异常,这是被推荐使用的,因为Cortex-M4会在异常发生时自动保存R0-R3,R12,R13(堆栈指针SP),R14(链接地址,也叫返回地址LR,在异常返回时使用),R15(程序计数器PC,为当前应用程序+4)和中断完成时自动恢复,我们只需保存R4-R11,大大减少了中断响应和上下文切换的时间。

                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

                DCD     EXTI4_IRQHandler           ; EXTI Line 4

                DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1

                DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2

                DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3

                DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4

                DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5

                DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6

                DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7

                DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2

                DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX

                DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0

                DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1

                DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE

                DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5

                DCD     TIM1_BRK_IRQHandler        ; TIM1 Break

                DCD     TIM1_UP_IRQHandler         ; TIM1 Update

                DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation

                DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare

                DCD     TIM2_IRQHandler            ; TIM2

                DCD     TIM3_IRQHandler            ; TIM3

                DCD     TIM4_IRQHandler            ; TIM4

[1] [2] [3] [4]
关键字:STM32  单片机  启动文件  startup_stm32f10x_hd 引用地址:STM32单片机启动文件startup_stm32f10x_hd.s详解

上一篇:STM32系列单片机在进入main函数前都在干些什么?
下一篇:关于STM32系列单片机中断触发时间问题

推荐阅读最新更新时间:2024-11-16 20:07

基于s3c2410的ARMer9开发平台的使用
我的宿主机操作系统是RedHat9.0(建议安装的时候选择 完全安装 ) 一个嵌入式Linux系统从软件的角度来看,分为四个层次: Boot Loader. 包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。 Linux kernel. 特定于嵌入式板子的定制内核以及内核的启动参数。 File system. 包括根文件系统和建立于 Flash 内存设备之上的文件系统。通常用 ramdisk 来作为root fs。 User application. 特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入
[单片机]
关于51单片机定时器的灵活使用
前段时间,做一个项目,有串口收发指令判断,按键类型判断,长短按之类,power的定时关电,事件的轮询扫描更新和display的定时扫描。这些要求就对定时器提出了要求,但是我的51单片机只有两个定时器,其中一个又有debug口的波特率产生之用。于是乎我可以用的定时器就只剩下了一个。怎么办?可能大家都只能用变量在定时中断函数去做多了任务就行了,但是我总是感觉这样会导致代码看起来太不具有条理性,而且对于日后的管理不是很容易。思来想去,就想到了linux内核中对于定时器的封装,那种面向对象的思想。 想法有了,我觉得实现就是很简单了。下面给大家贴上我的代码: .h 文件: #ifndef __SC_TIMER_H #define
[单片机]
STM32的GPIO使用的函数剖析
该文是自己学习了一段STM32后所写,是对STM32使用固件库编程最简单的一段程序,是对固件库函数的一部分进行解析。如有错误之处请指正,不胜感激。 一、 GPIO_Init函数解析 1 1、参数GPIO_TypeDef 1 2、参数GPIO_InitStruct 2 3、函数代码详解 4 4、备注 6 一、GPIO_Init函数解析 首先来看一下GPIO_Init函数的原型void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)。这个函数的实现是在Stm32f10x_gpio.c文件中,若要使用该函数在相应的应用程序的前
[单片机]
DS3231温度读取实验 附单片机源程序
DS3231作为一个走时精准的RTC芯片,内部带有温度补偿电路,此例将读取其中11H和12H寄存器,提取测得的温度值并传送到串口输出。 类似程序网上非常之多,不再赘述,在此重新提说几处需要注意的地方。 1.根据DS3231的芯片手册,其温度传感器的精度为±3℃,毕竟不是专用的温度传感器,在使用中可以作为一个参考,且仅此而已。 2.根据DS3231的芯片手册,其温度分辨率为±0.25℃,所以其小数部分读出的值只能是.00、.25、.50、.75这四种,如果读出的值不是这四种,则数据处理有误。 3.本实验使用一个float型数据直接接收了转换的温度值,没有对补码的符号位进行判断等。 注明:本程序没有使用CONV位进行强制转换,但是
[单片机]
DS3231温度读取实验 附<font color='red'>单片机</font>源程序
基于STC51单片机的霓虹灯
设计要求:# 使用PWM驱动8个LED灯 人眼不能观察到灯光全灭 灯光要有动画效果 设计概述:# 按照设计要求,为了更直观的说明脉冲宽度调制技术(PWM),所以霓虹灯的动画效果为流水灯形式。所需要的单片机芯片为STC89C52,所用的硬件工具是由华清远见开发的基于STC89C52的智能小车。该小车配备所需要的LED灯模块,8个LED灯由P1口来控制。STC89C52是一种低功耗,高性能的8位微控制器,是加强版的80C51单片机,但是与80C51单片机一样不具备PWM硬件模块,所以我们需要自己写一个程序来软件模拟PWM方波。 PWM是一种方波,可以实现数字信号控制模拟电路,它有两个重要参数周期或频率,占空比。占空比 = 高电
[单片机]
罗德与施瓦茨射频一致性测试系统R&S TS8980
全球首套支持LTE-Advanced Pro上行64QAM和LTE-Advanced上行载波聚合验证的射频一致性测试系统R&S TS8980 罗德与施瓦茨射频一致性测试系统R&S TS8980成为全球首套支持LTE-Advanced Pro上行64QAM和LTE-Advanced 上行载波聚合验证的测试系统。射频一致性验证是GCF规定的设备认证的重要组成部分。终端产商可以使用此套系统验证采用最先进芯片方案的设备是否符合GCF对于上行 CA 和上行 64QAM的要求。 2016年5月12日,慕尼黑 ― 伴随着LTE-Advanced Pro上行64QAM和LTE-Advanced上行链路载波聚合验证成功,罗德与施瓦茨公
[测试测量]
罗德与施瓦茨射频一致性测试系统R&<font color='red'>S</font> TS8980
DSP与单片机的一种高速通信实现方案
摘 要:介绍了一种利用双口RAM实现DSP与单片机高速数据通信的方法,给出了它们之间的接口电路以及软件实现方案。 关键词:DSP;双口RAM;接口电路;数据通信 1 引言   数字信号处理器(DSP)是一种适合于实现各种数字信号处理运算的微处理器,具有下列主要结构特点:(1)采用改进型哈佛(Harvard)结构,具有独立的程序总线和数据总线,可同时访问指令和数据空间,允许实际在程序存储器和数据存储器之间进行传输;(2)支持流水线处理,处理器对每条指令的操作分为取指、译码、执行等几个阶段,在某一时刻同时对若干条指令进行不同阶段的处理;(3)片内含有专门的硬件乘法器,使乘法可以在单周期内完成;(4)特殊的指令结构和
[应用]
AT89S52的智能快速充电器控制系统的设计
  本控制系统是为120w智能快速稳压电源设计的。   该快速充电器是为部队在野战条件下工作而研制的,因此要求其具有体积小、重量轻、智能化程度高、操作简便等优点,同时对电源的可靠性和抗干扰性提出了很高的要求。有稳压供电和充电两种工作方式。稳压供电时输出恒定的24V;处于充电状态时有四种充电方式:常规充电、快速充电、电池浮冲、电池训练,可以为镉镍、氢镍蓄电池充电。   2. 控制系统总体设计要求   根据实际情况,本控制系统要完成以下功能:   (1) 能自动识别电池的类型(镍镉电池、镍氢电池、锂电池)。   (2) 有稳压供电和充电两种工作模式。   (3) 采用最高电压Vmax、最高温度Tmax、最长充电时间tm
[电源管理]
AT89<font color='red'>S</font>52的智能快速充电器控制系统的设计

推荐帖子

保护电力电容应该注意哪些因素
无功补偿的电力电容器的正常寿命应该是几年?保护电力电容应该注意哪些因素(温度什么的)\0\0\0eeworldpostqq保护电力电容应该注意哪些因素通常使用条件下,寿命20年是需要的,
抛砖引玉 电源技术
一个逻辑工程师的成长之路-理论篇
面试了很多人,有些水平高,有些水平低,有一些公司有严格的职级,比如华为,完全可以根据其职级来得知其逻辑水平,而且华为的业务职级和技术职级还是分开的。我们公司也有职级,但是,不同的公司之间,或者说,逻辑工程师,没有一个比较普遍、统一的标准来衡量其水平。我一直比较困惑于这个问题,原因来自于从小受到的教育和长大后经常看的小说。小时候的学习成绩,是非常容易识别和量化的,分高分低,一比就知。成年以后,看过各种小说,武力高低,也是有非常明确的量化的,一个人完全可以非常清楚的知道,自己的级别。比如《绝世唐
yifeilw FPGA/CPLD
看了以前很多关于bootloader的帖子, 还是解决不了的疑问
看了这个版面以前很多关于bootloader的帖子,还是解决不了心中的疑问,特来打扰一下大家.是关于wince下bootloader的问题(不考虑linux)现在市场上的开发板,很多都是用ADS独立编译一个bootloader,用这个bootloader加载系统(nk.bin或nk.nb0),这个bootloader第一次一般用jtag工具烧写,以后就可以用usb或串口来更新,这个bootloader是不是应该叫nboot+eboot呢bootloader的生命周期在操
henbane 嵌入式系统
国庆散分!
想散个分,等级太低了只能搞一百--版主不要把我的贴搞到扩充板块的去了国庆好开心国庆散分!接分60大庆,接分好多散分帖啊~~~~~分,接大清早,凑个热闹接分。。。大清早,凑个热闹10.1早上10.00,国庆大阅兵!顶起!我来接分!!!国庆快乐呵呵!
Anna2007 嵌入式系统
分享:功率分析仪直连CAN网络
介绍一款可以把功率分析仪接入到CAN总线网络里的神器,WT-CAN通信适配器:iDAQ-WTCAN。就是下图这个小盒子。有了它,就可以直接将横河的WT5000或WT1800E系列功率分析仪接入到您的CAN系统中,轻松获取需要的功率参数。  为什么需要CAN通信适配器?  CAN总线因其优异的稳定性和可扩展性,不但在汽车电子领域应用非常广泛,在风电、光伏等领域也有一定的应用。所以很多相关的集成测试系统也都采用CAN总线作为数据采集传输的通信方式,这样的好处是可以直接获取CAN总线上的数
灞波儿奔 RF/无线
【2024 DigiKey创意大赛】基于STM32MP157的智能垃圾桶
基于STM32MP157的智能垃圾桶一、作品简介作品照片;作品功能介绍;物料清单及简介,如使用的板卡、芯片、模块等;100-200字多功能智能垃圾桶,主要用了k210开发板来做识别和控制以及用stm32mp157来做传感器数据采集以及图像传输。主要功能如下垃圾分类识别+舵机控制语音控制垃圾桶开关检测垃圾桶的满溢程度摄像头读取图像信息并通过UDP传输至客户端使用视觉识别
zfw152666 DigiKey得捷技术专区
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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