STM32
直播中

张鹏

7年用户 1133经验值
私信 关注
[问答]

怎么去编写startup_stm32f10x_hd.s 文件的源代码呢

startup_STM32f10x_hd.s是什么?有何作用?
怎么去编写startup_stm32f10x_hd.s 文件的源代码呢?

回帖(4)

赵鑫

2021-11-26 09:22:41
      startup_stm32f10x_hd.s是一个启动文件里面,是使用语言写的基本程序,当STM32上电启动的时候,会看这里的语言把这个程序,运行起来建立起来C,所以我们使用文件的原因启动文件。改文件使用的原因是Cortex-M3内核支持的指令,参考《Cortex-M3权威指南中文》内指令集章节
      
     startup_stm32f10x_hd.s文件是ST官方提供的,该文件可以从KEIL5安装目录中找到,也可以从ST库里面找到,找到该文件后吧启动文件添加到工程里面。不同型号的芯片以及不同编译环境使用的汇编文件是不一样的,但功能相同。
      
     对于启动文件部分,我们主要总结功能,主要功能如下:
     


  • 突发火花SP
  • 初始化程序执行PC
  • 设置堆、栈的大小
  • 设置中断表的入口地址
  • 配置外部 SRAM 成为数据
  • 调用 SystemInit() 函数 STM32 的系统目录配置
  • 设置C库分支的入口“__main”(最后调用main函数)

  Reset_Hander
; Reset handler     ; 汇编里面注释用的是";",相当于 C 语言的 “//” 注释符 2 Reset_Handler   PROC        ;PROC 是子程序定义伪指令。这里相当于 C 语言定义了一个函数为 Reset_Handler 3                 EXPORT  Reset_Handler             [WEAK]   ;EXPORT 表示 Reset_Handler 这个子程序可供其他模块调用,相当于C的函数声明;[WEAK]表示弱定义 4                 IMPORT  __main        ;IMPORT 说明 __main 这个标号在其他文件,在链接时候需去其他文件中寻找。相当于c中引入函数声明 5                 IMPORT  SystemInit 6                 LDR     R0, =SystemInit    ;把 SystemInit 的地址加载到寄存器 R0 中 7                 BLX     R0               ;程序跳转到 R0 中地址执行程序,即执行 SystemInit 函数内容   8                 LDR     R0, =__main     ;把 __main 的地址加载到寄存器 R0 9                 BX      R0          ;程序跳转到 R0 中地址执行程序,即执行 __main 函数,执行完毕后即可进入 main 函数10                 ENDP
      下面是startup_stm32f10x_hd.s源代码
   
;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************  2 ;* File Name          : startup_stm32f10x_hd.s  3 ;* Author             : MCD Application Team  4 ;* Version            : V3.5.0  5 ;* Date               : 11-March-2011  6 ;* Description        : STM32F10x High Density Devices vector table for MDK-ARM   7 ;*                      toolchain.   8 ;*                      This module performs:  9 ;*                      - Set the initial SP 10 ;*                      - Set the initial PC == Reset_Handler 11 ;*                      - Set the vector table entries with the exceptions ISR address 12 ;*                      - Configure the clock system and also configure the external  13 ;*                        SRAM mounted on STM3210E-EVAL board to be used as data  14 ;*                        memory (optional, to be enabled by user) 15 ;*                      - Branches to __main in the C library (which eventually 16 ;*                        calls main()). 17 ;*                      After Reset the CortexM3 processor is in Thread mode, 18 ;*                      priority is Privileged, and the Stack is set to Main. 19 ;* <<< Use Configuration Wizard in Context Menu >>>    20 ;******************************************************************************* 21 ; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS 22 ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. 23 ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, 24 ; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE 25 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING 26 ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. 27 ;******************************************************************************* 28  29 ; Amount of memory (in bytes) allocated for Stack 30 ; Tailor this value to your application needs 31 ; Stack Configuration 32 ;    Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> 33 ; 34  35 Stack_Size      EQU     0x00000400 36  37                 AREA    STACK, NOINIT, READWRITE, ALIGN=3 38 Stack_Mem       SPACE   Stack_Size 39 __initial_sp 40                                                    41 ; Heap Configuration 42 ;     Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> 43 ; 44  45 Heap_Size       EQU     0x00000200 46  47                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3 48 __heap_base 49 Heap_Mem        SPACE   Heap_Size 50 __heap_limit 51  52                 PRESERVE8 53                 THUMB 54  55  56 ; Vector Table Mapped to Address 0 at Reset 57                 AREA    RESET, DATA, READONLY 58                 EXPORT  __Vectors 59                 EXPORT  __Vectors_End 60                 EXPORT  __Vectors_Size 61  62 __Vectors       DCD     __initial_sp               ; Top of Stack 63                 DCD     Reset_Handler              ; Reset Handler 64                 DCD     NMI_Handler                ; NMI Handler 65                 DCD     HardFault_Handler          ; Hard Fault Handler 66                 DCD     MemManage_Handler          ; MPU Fault Handler 67                 DCD     BusFault_Handler           ; Bus Fault Handler 68                 DCD     UsageFault_Handler         ; Usage Fault Handler 69                 DCD     0                          ; Reserved 70                 DCD     0                          ; Reserved 71                 DCD     0                          ; Reserved 72                 DCD     0                          ; Reserved 73                 DCD     SVC_Handler                ; SVCall Handler 74                 DCD     DebugMon_Handler           ; Debug Monitor Handler 75                 DCD     0                          ; Reserved 76                 DCD     PendSV_Handler             ; PendSV Handler 77                 DCD     SysTick_Handler            ; SysTick Handler 78  79                 ; External Interrupts 80                 DCD     WWDG_IRQHandler            ; Window Watchdog 81                 DCD     PVD_IRQHandler             ; PVD through EXTI Line detect 82                 DCD     TAMPER_IRQHandler          ; Tamper 83                 DCD     RTC_IRQHandler             ; RTC 84                 DCD     FLASH_IRQHandler           ; Flash 85                 DCD     RCC_IRQHandler             ; RCC 86                 DCD     EXTI0_IRQHandler           ; EXTI Line 0 87                 DCD     EXTI1_IRQHandler           ; EXTI Line 1 88                 DCD     EXTI2_IRQHandler           ; EXTI Line 2 89                 DCD     EXTI3_IRQHandler           ; EXTI Line 3 90                 DCD     EXTI4_IRQHandler           ; EXTI Line 4 91                 DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1 92                 DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2 93                 DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3 94                 DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4 95                 DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5 96                 DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6 97                 DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7 98                 DCD     ADC1_2_IRQHandler          ; ADC1 & ADC2 99                 DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX100                 DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0101                 DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1102                 DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE103                 DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5104                 DCD     TIM1_BRK_IRQHandler        ; TIM1 Break105                 DCD     TIM1_UP_IRQHandler         ; TIM1 Update106                 DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation107                 DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare108                 DCD     TIM2_IRQHandler            ; TIM2109                 DCD     TIM3_IRQHandler            ; TIM3110                 DCD     TIM4_IRQHandler            ; TIM4111                 DCD     I2C1_EV_IRQHandler         ; I2C1 Event112                 DCD     I2C1_ER_IRQHandler         ; I2C1 Error113                 DCD     I2C2_EV_IRQHandler         ; I2C2 Event114                 DCD     I2C2_ER_IRQHandler         ; I2C2 Error115                 DCD     SPI1_IRQHandler            ; SPI1116                 DCD     SPI2_IRQHandler            ; SPI2117                 DCD     USART1_IRQHandler          ; USART1118                 DCD     USART2_IRQHandler          ; USART2119                 DCD     USART3_IRQHandler          ; USART3120                 DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10121                 DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line122                 DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend123                 DCD     TIM8_BRK_IRQHandler        ; TIM8 Break124                 DCD     TIM8_UP_IRQHandler         ; TIM8 Update125                 DCD     TIM8_TRG_COM_IRQHandler    ; TIM8 Trigger and Commutation126                 DCD     TIM8_CC_IRQHandler         ; TIM8 Capture Compare127                 DCD     ADC3_IRQHandler            ; ADC3128                 DCD     FSMC_IRQHandler            ; FSMC129
举报

李可熠

2021-11-26 09:22:47
1
举报

孙秀英

2021-11-26 09:22:53
DCD     SDIO_IRQHandler            ; SDIO130                 DCD     TIM5_IRQHandler            ; TIM5131                 DCD     SPI3_IRQHandler            ; SPI3132                 DCD     UART4_IRQHandler           ; UART4133                 DCD     UART5_IRQHandler           ; UART5134                 DCD     TIM6_IRQHandler            ; TIM6135                 DCD     TIM7_IRQHandler            ; TIM7136                 DCD     DMA2_Channel1_IRQHandler   ; DMA2 Channel1137                 DCD     DMA2_Channel2_IRQHandler   ; DMA2 Channel2138                 DCD     DMA2_Channel3_IRQHandler   ; DMA2 Channel3139                 DCD     DMA2_Channel4_5_IRQHandler ; DMA2 Channel4 & Channel5140 __Vectors_End141 142 __Vectors_Size  EQU  __Vectors_End - __Vectors143 144                 AREA    |.text|, CODE, READONLY145                 146 ; Reset handler147 Reset_Handler   PROC148                 EXPORT  Reset_Handler             [WEAK]149                 IMPORT  __main150                 IMPORT  SystemInit151                 LDR     R0, =SystemInit152                 BLX     R0               153                 LDR     R0, =__main154                 BX      R0155                 ENDP156                 157 ; Dummy Exception Handlers (infinite loops which can be modified)158 159 NMI_Handler     PROC160                 EXPORT  NMI_Handler                [WEAK]161                 B       .162                 ENDP163 HardFault_Handler164                 PROC165                 EXPORT  HardFault_Handler          [WEAK]166                 B       .167                 ENDP168 MemManage_Handler169                 PROC170                 EXPORT  MemManage_Handler          [WEAK]171                 B       .172                 ENDP173 BusFault_Handler174                 PROC175                 EXPORT  BusFault_Handler           [WEAK]176                 B       .177                 ENDP178 UsageFault_Handler179                 PROC180                 EXPORT  UsageFault_Handler         [WEAK]181                 B       .182                 ENDP183 SVC_Handler     PROC184                 EXPORT  SVC_Handler                [WEAK]185                 B       .186                 ENDP187 DebugMon_Handler188                 PROC189                 EXPORT  DebugMon_Handler           [WEAK]190                 B       .191                 ENDP192 PendSV_Handler  PROC193                 EXPORT  PendSV_Handler             [WEAK]194                 B       .195                 ENDP196 SysTick_Handler PROC197                 EXPORT  SysTick_Handler            [WEAK]198                 B       .199                 ENDP200 201 Default_Handler PROC202 203                 EXPORT  WWDG_IRQHandler            [WEAK]204                 EXPORT  PVD_IRQHandler             [WEAK]205                 EXPORT  TAMPER_IRQHandler          [WEAK]206                 EXPORT  RTC_IRQHandler             [WEAK]207                 EXPORT  FLASH_IRQHandler           [WEAK]208                 EXPORT  RCC_IRQHandler             [WEAK]209                 EXPORT  EXTI0_IRQHandler           [WEAK]210                 EXPORT  EXTI1_IRQHandler           [WEAK]211                 EXPORT  EXTI2_IRQHandler           [WEAK]212                 EXPORT  EXTI3_IRQHandler           [WEAK]213                 EXPORT  EXTI4_IRQHandler           [WEAK]214                 EXPORT  DMA1_Channel1_IRQHandler   [WEAK]215                 EXPORT  DMA1_Channel2_IRQHandler   [WEAK]216                 EXPORT  DMA1_Channel3_IRQHandler   [WEAK]217                 EXPORT  DMA1_Channel4_IRQHandler   [WEAK]218                 EXPORT  DMA1_Channel5_IRQHandler   [WEAK]219                 EXPORT  DMA1_Channel6_IRQHandler   [WEAK]220                 EXPORT  DMA1_Channel7_IRQHandler   [WEAK]221                 EXPORT  ADC1_2_IRQHandler          [WEAK]222                 EXPORT  USB_HP_CAN1_TX_IRQHandler  [WEAK]223                 EXPORT  USB_LP_CAN1_RX0_IRQHandler [WEAK]224                 EXPORT  CAN1_RX1_IRQHandler        [WEAK]225                 EXPORT  CAN1_SCE_IRQHandler        [WEAK]226                 EXPORT  EXTI9_5_IRQHandler         [WEAK]227                 EXPORT  TIM1_BRK_IRQHandler        [WEAK]228                 EXPORT  TIM1_UP_IRQHandler         [WEAK]229                 EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]230                 EXPORT  TIM1_CC_IRQHandler         [WEAK]231                 EXPORT  TIM2_IRQHandler            [WEAK]232                 EXPORT  TIM3_IRQHandler            [WEAK]233                 EXPORT  TIM4_IRQHandler            [WEAK]234                 EXPORT  I2C1_EV_IRQHandler         [WEAK]235                 EXPORT  I2C1_ER_IRQHandler         [WEAK]236                 EXPORT  I2C2_EV_IRQHandler         [WEAK]237                 EXPORT  I2C2_ER_IRQHandler         [WEAK]238                 EXPORT  SPI1_IRQHandler            [WEAK]239                 EXPORT  SPI2_IRQHandler            [WEAK]240                 EXPORT  USART1_IRQHandler          [WEAK]241                 EXPORT  USART2_IRQHandler          [WEAK]242                 EXPORT  USART3_IRQHandler          [WEAK]243                 EXPORT  EXTI15_10_IRQHandler       [WEAK]244                 EXPORT  RTCAlarm_IRQHandler        [WEAK]245                 EXPORT  USBWakeUp_IRQHandler       [WEAK]246                 EXPORT  TIM8_BRK_IRQHandler        [WEAK]247                 EXPORT  TIM8_UP_IRQHandler         [WEAK]248                 EXPORT  TIM8_TRG_COM_IRQHandler    [WEAK]249                 EXPORT  TIM8_CC_IRQHandler         [WEAK]250                 EXPORT  ADC3_IRQHandler            [WEAK]251                 EXPORT  FSMC_IRQHandler            [WEAK]252                 EXPORT  SDIO_IRQHandler            [WEAK]253                 EXPORT  TIM5_IRQHandler            [WEAK]254                 EXPORT  SPI3_IRQHandler            [WEAK]255                 EXPORT  UART4_IRQHandler           [WEAK]256                 EXPORT  UART5_IRQHandler           [WEAK]257                 EXPORT  TIM6_IRQHandler            [WEAK]258                 EXPORT  TIM7_IRQHandler            [WEAK]259                 EXPORT  DMA2_Channel1_IRQHandler   [WEAK]260                 EXPORT  DMA2_Channel2_IRQHandler   [WEAK]261                 EXPORT  DMA2_Channel3_IRQHandler   [WEAK]262                 EXPORT  DMA2_Channel4_5_IRQHandler [WEAK]263 264 WWDG_IRQHandler265 PVD_IRQHandler266 TAMPER_IRQHandler267 RTC_IRQHandler268 FLASH_IRQHandler269 RCC_IRQHandler270 EXTI0_IRQHandler271 EXTI1_IRQHandler272 EXTI2_IRQHandler273 EXTI3_IRQHandler274 EXTI4_IRQHandler275 DMA1_Channel1_IRQHandler276 DMA1_Channel2_IRQHandler277 DMA1_Channel3_IRQHandler278 DMA1_Channel4_IRQHandler279 DMA1_Channel5_IRQHandler280 DMA1_Channel6_IRQHandler281 DMA1_Channel7_IRQHandler282 ADC1_2_IRQHandler283 USB_HP_CAN1_TX_IRQHandler284 USB_LP_CAN1_RX0_IRQHandler285 CAN1_RX1_IRQHandler286 CAN1_SCE_IRQHandler287 EXTI9_5_IRQHandler288 TIM1_BRK_IRQHandler289 TIM1_UP_IRQHandler290 TIM1_TRG_COM_IRQHandler291 TIM1_CC_IRQHandler292 TIM2_IRQHandler293 TIM3_IRQHandler294 TIM4_IRQHandler295 I2C1_EV_IRQHandler296 I2C1_ER_IRQHandler297 I2C2_EV_IRQHandler298 I2C2_ER_IRQHandler299 SPI1_IRQHandler300 SPI2_IRQHandler301 USART1_IRQHandler302 USART2_IRQHandler303 USART3_IRQHandler304 EXTI15_10_IRQHandler305 RTCAlarm_IRQHandler306 USBWakeUp_IRQHandler307 TIM8_BRK_IRQHandler308 TIM8_UP_IRQHandler309 TIM8_TRG_COM_IRQHandler310 TIM8_CC_IRQHandler311 ADC3_IRQHandler312 FSMC_IRQHandler313 SDIO_IRQHandler314 TIM5_IRQHandler315 SPI3_IRQHandler316 UART4_IRQHandler317 UART5_IRQHandler318 TIM6_IRQHandler319 TIM7_IRQHandler320 DMA2_Channel1_IRQHandler321 DMA2_Channel2_IRQHandler322 DMA2_Channel3_IRQHandler323 DMA2_Channel4_5_IRQHandler324                 B       .325 326                 ENDP327 328                 ALIGN329 330 ;*******************************************************************************331 ; User Stack and Heap initialization332 ;*******************************************************************************333                  IF      :DEF:__MICROLIB334                 335                  EXPORT  __initial_sp336                  EXPORT  __heap_base337                  EXPORT  __heap_limit338                 339                  ELSE340                 341                  IMPORT  __use_two_region_memory342                  EXPORT  __user_initial_stackheap343                  344 __user_initial_stackheap345 346                  LDR     R0, =  Heap_Mem347                  LDR     R1, =(Stack_Mem + Stack_Size)348                  LDR     R2, = (Heap_Mem +  Heap_Size)349                  LDR     R3, = Stack_Mem350                  BX      LR351 352                  ALIGN353 354                  ENDIF355 356                  END357 358 ;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****startup_stm32f10x_hd.s   
      
要操作STM32传感器程序,我们就需要使用C语言对其进行封装,这部分代码都 stm32f10x.h
      
举报

jinyi7016

2021-11-29 09:40:17
这个是芯片启动上电后,运行的一段代码,是用于初始化芯片的。
你没有必要自己重新写。如果是修改,使用ARM的汇编语法进行修改
举报

更多回帖

发帖
×
20
完善资料,
赚取积分