在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32啟動代碼分析

            STM32啟動代碼分析

            作者: 時間:2016-11-25 來源:網(wǎng)絡 收藏
            啟動代碼文件名是STM32F10X.S,它的作用先總結(jié)下,然后再分析。啟動代碼作用一般是:1)堆和棧的初始化;2)向量表定義;3)地址重映射及中斷向量表的轉(zhuǎn)移;4)設置系統(tǒng)時鐘頻率;5)中斷寄存器的初始化;6)進入C應用程序。

            (1)按啟動代碼的次序,先看堆和棧的初始化:

            本文引用地址:http://www.biyoush.com/article/201611/321528.htm

            Stack_Size EQU 0x00000200 ;定義Stack_Size為0x00000200

            AREA STACK, NOINIT, READWRITE, ALIGN=3 ;定義棧,可初始為0,8字節(jié)對齊
            Stack_Mem SPACE Stack_Size ;分配0x200個連續(xù)字節(jié),并初始化為0
            __initial_sp ;匯編代碼地址標號

            Heap_Size EQU 0x00000000

            AREA HEAP, NOINIT, READWRITE, ALIGN=3
            __heap_base
            Heap_Mem SPACE Heap_Size
            __heap_limit


            PRESERVE8;指定當前文件堆棧8字節(jié)對齊
            THUMB ;告訴匯編器下面是32為的Thumb指令,如果需要匯編器將插入位以保證對齊

            (2)中斷向量表定義

            AREA RESET, DATA, READONLY ;定義復位向量段,只讀
            EXPORT __Vectors ;定義一個可以在其他文件中使用的全局標號。此處表示中斷地址

            __Vectors DCD __initial_sp ;給__initial_sp分配4字節(jié)32位的地址0x0
            DCD Reset_Handler ; 給標號Reset Handler分配地址為0x00000004
            DCD NMI_Handler ; 給標號NMI Handler分配地址0x00000008
            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 ;這種形式就是保留地址,不給任何標號分配
            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
            DCD EXTI4_IRQHandler ; EXTI Line 4
            DCD DMAChannel1_IRQHandler ; DMA Channel 1
            DCD DMAChannel2_IRQHandler ; DMA Channel 2
            DCD DMAChannel3_IRQHandler ; DMA Channel 3
            DCD DMAChannel4_IRQHandler ; DMA Channel 4
            DCD DMAChannel5_IRQHandler ; DMA Channel 5
            DCD DMAChannel6_IRQHandler ; DMA Channel 6
            DCD DMAChannel7_IRQHandler ; DMA Channel 7
            DCD ADC_IRQHandler ; ADC
            DCD USB_HP_CAN_TX_IRQHandler ; USB High Priority or CAN TX
            DCD USB_LP_CAN_RX0_IRQHandler ; USB Low Priority or CAN RX0
            DCD CAN_RX1_IRQHandler ; CAN RX1
            DCD CAN_SCE_IRQHandler ; CAN 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
            DCD I2C1_EV_IRQHandler ; I2C1 Event
            DCD I2C1_ER_IRQHandler ; I2C1 Error
            DCD I2C2_EV_IRQHandler ; I2C2 Event
            DCD I2C2_ER_IRQHandler ; I2C2 Error
            DCD SPI1_IRQHandler ; SPI1
            DCD SPI2_IRQHandler ; SPI2
            DCD USART1_IRQHandler ; USART1
            DCD USART2_IRQHandler ; USART2
            DCD USART3_IRQHandler ; USART3
            DCD EXTI15_10_IRQHandler ; EXTI Line 15..10
            DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line
            DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend

            (3)中斷向量表的轉(zhuǎn)移

            AREA |.text|, CODE, READONLY ;代碼段定義


            ; Reset Handler

            Reset_Handler PROC;標記一個函數(shù)的開始
            EXPORT Reset_Handler [WEAK];[WEAK] 選項表示當所有的源文件都沒有 定義這樣一個標號時,編譯器也不給出錯誤信息,在多數(shù)情況下將該標號置為 0 ,若該標號為 B 或 BL 指令引用,則將 B 或 BL指令置為 NOP 操作。EXPORT提示編譯器該標號可以為外部文件引用。
            IMPORT __main ;通知編譯器要使用的標號在其他文件
            LDR R0, =__main;使用“=”表示LDR目前是偽指令不是標準指令。這里是把__main的地址給RO。
            BX R0;BX是ARM指令集和THUMB指令集之間程序的跳轉(zhuǎn)
            ENDP


            ; Dummy Exception Handlers (infinite loops which can be modified)

            NMI_Handler m;"m"其實就是PROC表示匯編函數(shù)的開始
            EXPORT NMI_Handler [WEAK]
            B .
            ENDP
            HardFault_Handler ;""是換行的意思
            PROC
            EXPORT HardFault_Handler [WEAK]
            B . ;"."號到底是什么含義呢,目前還沒查到資料??赡苁潜A舻刂罚┮院笮薷牡陌?br /> ENDP
            MemManage_Handler
            PROC
            EXPORT MemManage_Handler [WEAK]
            B .
            ENDP
            BusFault_Handler
            PROC
            EXPORT BusFault_Handler [WEAK]
            B .
            ENDP
            UsageFault_Handler
            PROC
            EXPORT UsageFault_Handler [WEAK]
            B .
            ENDP
            SVC_Handler PROC
            EXPORT SVC_Handler [WEAK]
            B .
            ENDP
            DebugMon_Handler
            PROC
            EXPORT DebugMon_Handler [WEAK]
            B .
            ENDP
            PendSV_Handler PROC
            EXPORT PendSV_Handler [WEAK]
            B .
            ENDP
            SysTick_Handler PROC
            EXPORT SysTick_Handler [WEAK]
            B .
            ENDP

            Default_Handler PROC

            EXPORT WWDG_IRQHandler [WEAK]
            EXPORT PVD_IRQHandler [WEAK]
            EXPORT TAMPER_IRQHandler [WEAK]
            EXPORT RTC_IRQHandler [WEAK]
            EXPORT FLASH_IRQHandler [WEAK]
            EXPORT RCC_IRQHandler [WEAK]
            EXPORT EXTI0_IRQHandler [WEAK]
            EXPORT EXTI1_IRQHandler [WEAK]
            EXPORT EXTI2_IRQHandler [WEAK]
            EXPORT EXTI3_IRQHandler [WEAK]
            EXPORT EXTI4_IRQHandler [WEAK]
            EXPORT DMAChannel1_IRQHandler [WEAK]
            EXPORT DMAChannel2_IRQHandler [WEAK]
            EXPORT DMAChannel3_IRQHandler [WEAK]
            EXPORT DMAChannel4_IRQHandler [WEAK]
            EXPORT DMAChannel5_IRQHandler [WEAK]
            EXPORT DMAChannel6_IRQHandler [WEAK]
            EXPORT DMAChannel7_IRQHandler [WEAK]
            EXPORT ADC_IRQHandler [WEAK]
            EXPORT USB_HP_CAN_TX_IRQHandler [WEAK]
            EXPORT USB_LP_CAN_RX0_IRQHandler [WEAK]
            EXPORT CAN_RX1_IRQHandler [WEAK]
            EXPORT CAN_SCE_IRQHandler [WEAK]
            EXPORT EXTI9_5_IRQHandler [WEAK]
            EXPORT TIM1_BRK_IRQHandler [WEAK]
            EXPORT TIM1_UP_IRQHandler [WEAK]
            EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
            EXPORT TIM1_CC_IRQHandler [WEAK]
            EXPORT TIM2_IRQHandler [WEAK]
            EXPORT TIM3_IRQHandler [WEAK]
            EXPORT TIM4_IRQHandler [WEAK]
            EXPORT I2C1_EV_IRQHandler [WEAK]
            EXPORT I2C1_ER_IRQHandler [WEAK]
            EXPORT I2C2_EV_IRQHandler [WEAK]
            EXPORT I2C2_ER_IRQHandler [WEAK]
            EXPORT SPI1_IRQHandler [WEAK]
            EXPORT SPI2_IRQHandler [WEAK]
            EXPORT USART1_IRQHandler [WEAK]
            EXPORT USART2_IRQHandler [WEAK]
            EXPORT USART3_IRQHandler [WEAK]
            EXPORT EXTI15_10_IRQHandler [WEAK]
            EXPORT RTCAlarm_IRQHandler [WEAK]
            EXPORT USBWakeUp_IRQHandler [WEAK]

            WWDG_IRQHandler
            PVD_IRQHandler
            TAMPER_IRQHandler
            RTC_IRQHandler
            FLASH_IRQHandler
            RCC_IRQHandler
            EXTI0_IRQHandler
            EXTI1_IRQHandler
            EXTI2_IRQHandler
            EXTI3_IRQHandler
            EXTI4_IRQHandler
            DMAChannel1_IRQHandler
            DMAChannel2_IRQHandler
            DMAChannel3_IRQHandler
            DMAChannel4_IRQHandler
            DMAChannel5_IRQHandler
            DMAChannel6_IRQHandler
            DMAChannel7_IRQHandler
            ADC_IRQHandler
            USB_HP_CAN_TX_IRQHandler
            USB_LP_CAN_RX0_IRQHandler
            CAN_RX1_IRQHandler
            CAN_SCE_IRQHandler
            EXTI9_5_IRQHandler
            TIM1_BRK_IRQHandler
            TIM1_UP_IRQHandler
            TIM1_TRG_COM_IRQHandler
            TIM1_CC_IRQHandler
            TIM2_IRQHandler
            TIM3_IRQHandler
            TIM4_IRQHandler
            I2C1_EV_IRQHandler
            I2C1_ER_IRQHandler
            I2C2_EV_IRQHandler
            I2C2_ER_IRQHandler
            SPI1_IRQHandler
            SPI2_IRQHandler
            USART1_IRQHandler
            USART2_IRQHandler
            USART3_IRQHandler
            EXTI15_10_IRQHandler
            RTCAlarm_IRQHandler
            USBWakeUp_IRQHandler

            B .

            ENDP
            ALIGN


            (4)堆和棧的初始化

            IF :DEF:__MICROLIB ;“DEF”的用法——:DEF:X 就是說X定義了則為真,否則為假

            EXPORT __initial_sp
            EXPORT __heap_base
            EXPORT __heap_limit

            ELSE

            IMPORT __use_two_region_memory
            EXPORT __user_initial_stackheap
            __user_initial_stackheap

            LDR R0, = Heap_Mem
            LDR R1, =(Stack_Mem + Stack_Size)
            LDR R2, = (Heap_Mem + Heap_Size)
            LDR R3, = Stack_Mem
            BX LR

            ALIGN ;填充字節(jié)使地址對齊

            ENDIF

            END



            關(guān)鍵詞: stm32啟動代

            評論


            技術(shù)專區(qū)

            關(guān)閉