日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32 启动代码分析

發布時間:2023/12/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32 启动代码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#PS:要轉載請注明出處,本人版權所有

#PS:這個只是 《 我自己 》理解,如果和你的

#原則相沖突,請諒解,勿噴
對于keil的啟動代碼(針對STM32F042),添加 備注 和 自己的理解

;******************** (C) COPYRIGHT 2014 STMicroelectronics ******************** ;* File Name : startup_stm32f042.s ;* Author : MCD Application Team,modified by Sky, ;* Version : V1.5.0 ;* Date : 05-December-2014,modified on,01-Nov-2016 ;* Description : STM32F042 Devices vector table for ;* for MDK-ARM toolchain. ;* This module performs: ;* - Set the initial SP ;* - Set the initial PC == Reset_Handler ;* - Set the vector table entries with the exceptions ISR address ;* - Configure the system clock ;* - Branches to __main in the C library (which eventually ;* calls main()). ;* After Reset the CortexM0 processor is in Thread mode, ;* priority is Privileged, and the Stack is set to Main. ;* <<< Use Configuration Wizard in Context Menu >>> ;******************************************************************************* ; @attention ; ; Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); ; You may not use this file except in compliance with the License. ; You may obtain a copy of the License at: ; ; http:;;www.st.com/software_license_agreement_liberty_v2 ; ; Unless required by applicable law or agreed to in writing, software ; distributed under the License is distributed on an "AS IS" BASIS, ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ; See the License for the specific language governing permissions and ; limitations under the License. ; ;*******************************************************************************; ; ;notes:stack,heap,data seg,code seg address of mem is set by compiler ; ;; ; Amount of memory (in bytes) allocated for Stack ; Tailor this value to your application needs ; <h> Stack Configuration ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h>\;;EQU 定義宏 ;;棧大小,1k Stack_Size EQU 0x00000400 ;;AREA 定義段,注意:一個程序是由多個段構成,如CODE,STACK,DATA, ;;ALIGN=3,8字節對齊AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size ;;__initial_sp一個標號,由匯編器進行計算,代表上面SPACE分配內存的最后一個地址,棧為向下增長型 __initial_sp; <h> Heap Configuration ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> ;;堆512bytes Heap_Size EQU 0x00000200AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit ;;PRESERVE8,指定當前文件堆棧8bytes對齊PRESERVE8 ;;THUMB,后面的指令要兼容THUMB指令THUMB; Vector Table Mapped to Address 0 at Reset ;;定義一個叫做RESET的數據段AREA RESET, DATA, READONLY ;;EXPORT聲明標號為外部文件可用EXPORT __VectorsEXPORT __Vectors_EndEXPORT __Vectors_Size ;;DCD是按4字節分配存儲單元 __Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI HandlerDCD HardFault_Handler ; Hard Fault HandlerDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD SVC_Handler ; SVCall HandlerDCD 0 ; ReservedDCD 0 ; ReservedDCD PendSV_Handler ; PendSV HandlerDCD SysTick_Handler ; SysTick Handler; External InterruptsDCD WWDG_IRQHandler ; Window WatchdogDCD PVD_VDDIO2_IRQHandler ; PVD and VDDIO2 through EXTI Line detectDCD RTC_IRQHandler ; RTC through EXTI LineDCD FLASH_IRQHandler ; FLASHDCD RCC_CRS_IRQHandler ; RCC and CRSDCD EXTI0_1_IRQHandler ; EXTI Line 0 and 1DCD EXTI2_3_IRQHandler ; EXTI Line 2 and 3DCD EXTI4_15_IRQHandler ; EXTI Line 4 to 15DCD TSC_IRQHandler ; TSDCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1DCD DMA1_Channel2_3_IRQHandler ; DMA1 Channel 2 and Channel 3DCD DMA1_Channel4_5_IRQHandler ; DMA1 Channel 4, Channel 5DCD ADC1_IRQHandler ; ADC1 DCD TIM1_BRK_UP_TRG_COM_IRQHandler ; TIM1 Break, Update, Trigger and CommutationDCD TIM1_CC_IRQHandler ; TIM1 Capture CompareDCD TIM2_IRQHandler ; TIM2DCD TIM3_IRQHandler ; TIM3DCD 0 ; ReservedDCD 0 ; ReservedDCD TIM14_IRQHandler ; TIM14DCD 0 ; ReservedDCD TIM16_IRQHandler ; TIM16DCD TIM17_IRQHandler ; TIM17DCD I2C1_IRQHandler ; I2C1DCD 0 ; ReservedDCD SPI1_IRQHandler ; SPI1DCD SPI2_IRQHandler ; SPI2DCD USART1_IRQHandler ; USART1DCD USART2_IRQHandler ; USART2DCD 0 ; ReservedDCD CEC_CAN_IRQHandler ; CEC and CANDCD USB_IRQHandler ; USB__Vectors_End__Vectors_Size EQU __Vectors_End - __Vectors;;定義一個.text的代碼段AREA |.text|, CODE, READONLY;STM32F03x devices feature 4Kbytes of static SRAM. STM32F04x devices feature ;6 Kbytes of static SRAM. STM32F05x devices feature 8Kbytes of static SRAM. ;STM32F07xS devices feature 16 Kbytes of static SRAM. STM32F09x devices feature ;32 Kbytes of static SRAM.; Reset handler routine ;;PROC定義子程序 Reset_Handler PROC ;;WEAK:弱定義EXPORT Reset_Handler [WEAK]IMPORT __mainIMPORT SystemInit;;給R0賦值,sp的值LDR R0, =__initial_sp ; set stack pointer ;;R0給MSP寄存器MSR MSP, R0 ;;Check if boot space corresponds to test memory LDR R0,=0x00000004LDR R1, [R0];;R1=0x08000004 OR R1=0x20000004 OR R1=0x1FXX XXXX;;when R1=R1=0x1FXX XXXX,we can know that Reset_Handler'sAddress is not right,;;it maybe in reserved or systemmemory or optionbyte,we must remap address for start ;;Logical shift right by register LSRSLSRS R1, R1, #24;R2=0x0000001FLDR R2,=0x1FCMP R1, R2BNE ApplicationStart ;; SYSCFG clock enable ;RCC_APB2ENR,0x40021018 LDR R0,=0x40021018 LDR R1,=0x00000001STR R1, [R0];; Set CFGR1 register with flash memory remap at address 0;SYS_CFGR1,0x40010000 LDR R0,=0x40010000 LDR R1,=0x00000000STR R1, [R0] ApplicationStartLDR R0, =SystemInitBLX R0LDR R0, =__mainBX R0ENDP; Dummy Exception Handlers (infinite loops which can be modified)NMI_Handler PROCEXPORT NMI_Handler [WEAK];;B . 無限循環B .ENDP HardFault_Handler\PROCEXPORT HardFault_Handler [WEAK]B .ENDP SVC_Handler PROCEXPORT SVC_Handler [WEAK]B .ENDP PendSV_Handler PROCEXPORT PendSV_Handler [WEAK]B .ENDP SysTick_Handler PROCEXPORT SysTick_Handler [WEAK]B .ENDPDefault_Handler PROCEXPORT WWDG_IRQHandler [WEAK]EXPORT PVD_VDDIO2_IRQHandler [WEAK]EXPORT RTC_IRQHandler [WEAK]EXPORT FLASH_IRQHandler [WEAK]EXPORT RCC_CRS_IRQHandler [WEAK]EXPORT EXTI0_1_IRQHandler [WEAK]EXPORT EXTI2_3_IRQHandler [WEAK]EXPORT EXTI4_15_IRQHandler [WEAK]EXPORT TSC_IRQHandler [WEAK]EXPORT DMA1_Channel1_IRQHandler [WEAK]EXPORT DMA1_Channel2_3_IRQHandler [WEAK]EXPORT DMA1_Channel4_5_IRQHandler [WEAK]EXPORT ADC1_IRQHandler [WEAK]EXPORT TIM1_BRK_UP_TRG_COM_IRQHandler [WEAK]EXPORT TIM1_CC_IRQHandler [WEAK]EXPORT TIM2_IRQHandler [WEAK]EXPORT TIM3_IRQHandler [WEAK]EXPORT TIM14_IRQHandler [WEAK]EXPORT TIM16_IRQHandler [WEAK]EXPORT TIM17_IRQHandler [WEAK]EXPORT I2C1_IRQHandler [WEAK]EXPORT SPI1_IRQHandler [WEAK]EXPORT SPI2_IRQHandler [WEAK]EXPORT USART1_IRQHandler [WEAK]EXPORT USART2_IRQHandler [WEAK]EXPORT CEC_CAN_IRQHandler [WEAK]EXPORT USB_IRQHandler [WEAK]WWDG_IRQHandler PVD_VDDIO2_IRQHandler RTC_IRQHandler FLASH_IRQHandler RCC_CRS_IRQHandler EXTI0_1_IRQHandler EXTI2_3_IRQHandler EXTI4_15_IRQHandler TSC_IRQHandler DMA1_Channel1_IRQHandler DMA1_Channel2_3_IRQHandler DMA1_Channel4_5_IRQHandler ADC1_IRQHandler TIM1_BRK_UP_TRG_COM_IRQHandler TIM1_CC_IRQHandler TIM2_IRQHandler TIM3_IRQHandler TIM14_IRQHandler TIM16_IRQHandler TIM17_IRQHandler I2C1_IRQHandler SPI1_IRQHandler SPI2_IRQHandler USART1_IRQHandler USART2_IRQHandler CEC_CAN_IRQHandler USB_IRQHandler B .ENDPALIGN;******************************************************************************* ; User Stack and Heap initialization ;*******************************************************************************IF :DEF:__MICROLIBEXPORT __initial_spEXPORT __heap_baseEXPORT __heap_limitELSEIMPORT __use_two_region_memoryEXPORT __user_initial_stackheap__user_initial_stackheapLDR R0, = Heap_MemLDR R1, =(Stack_Mem + Stack_Size)LDR R2, = (Heap_Mem + Heap_Size)LDR R3, = Stack_MemBX LRALIGNENDIFEND;************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE*****

#PS:請尊重原創,不喜勿噴

#PS:要轉載請注明出處,本人版權所有.

有問題請留言,看到后我會第一時間回復

總結

以上是生活随笔為你收集整理的STM32 启动代码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。