日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

STM32F4启动流程分析

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

前言

因為在做有關STM32F407ZET6的項目,其中一項內容是通過IAP來對STM32進行在線升級,那么首先需要對STM32的啟動流程需要做到詳細了解。

硬件及調試配置說明:

使用芯片:STM32F407ZET6

調試軟件:IAR6.3.0

軟件庫:STM32的HAL庫,版本V1.3.0

啟動文件:startup_stm32f407xx.s,版本V1.2.1

必須說明:? ?因為本人使用的IAR開發平臺,因此程序中的指令都是IAR指令集(關于IAR指令,參見《EWARM_AssemblerReference.ENU.pdf》文檔),因此會發現很多匯編指令會和在別的地方看到的不一樣,但是基本指令的功能基本類似,比如IAR中的SECTION指令和標準ARM指令集中的AREA指令。而且,同類型的文件在擴展名上也可能不同,比如對于“分散加載文件”,IAR擴展名為.icf,但是keil擴展名是.scf,而且編輯命令也不同。

(一)啟動文件

我們需要了解:一般的,工程文件件中會包含很多的C文件以及必要的S文件(匯編文件)。用戶在使用IDE(集成開發平臺)對工程進行一鍵式處理時,經預處理->編譯->匯編->鏈接后生成可執行文件。其中,每一個S或C文件在經過匯編器“匯編”后都會生成對應的目標文件(.o或.obj或類似格式文件),然后由鏈接器對各個目標文件進行鏈接,決定各個目標文件在最終可執行文件(bin或hex或類似格式文件)里的位置。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可參考文檔:http://blog.sina.com.cn/s/blog_65fbc556010162j6.html? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??https://blog.csdn.net/shenjianxz/article/details/52130111

我們只需要知道startup_stm32f407xx.s文件成成的目標文件在最終可執行文件中是第一個被執行的!

(我想:不同的源文件(C或S)之間是通過函數調用或參數引用而相互關聯起來的。即使是main函數,也是被startup_stm32f407xx.s中匯編代碼所調用的,而且此段匯編代碼前不再存在其他代碼,因此匯編程序應該在最前面執行;同時,通過在線調試,可以看到可執行文件的反匯編文件,其中startup_stm32f407xx.s程序確實是在最前面

STM32F4和STM32F1的啟動文件略不相同,但是基本內容是一樣的。啟動文件的工作按順序依次分為以下幾項:

?- Set the initial SP
?- Set the initial PC == _iar_program_start,
- Set the vector table entries with the exceptions ISR? address.?

- Branches to main in the C library (which eventually? calls main()).

(1)設置堆棧
(2)初始化PC指針
(3)設置向量表

(4)跳轉到main函數

下面進行分段是分析:

第一段說明:

?????MODULE ?cstartup;; Forward declaration of sections.SECTION CSTACK:DATA:NOROOT(3)SECTION .intvec:CODE:NOROOT(2)EXTERN __iar_program_startEXTERN SystemInitPUBLIC __vector_table【1】MODULE 控制指令是用來標記 modules 源碼的開始和結束,后邊的 ?cstartup 是模塊的名字,此文檔的最后的 END 表明模塊的結束
【2】SECTION 指令是聲明段,一個段不能同時包含 public symbol 和 pubweak symbol ,模塊只有在相同的名字的模塊沒有被鏈接進來的時候才會被鏈接進來。
? ? ????語法格式:SECTION section:type [flag] [(align)]
? ? ? ? align,是用于指定地址對齊到 2^align,他的取值是 0 到 30
? ? ? ? flag,取值NOROOT、ROOT、REORDER、NOREORDER,默認是ROOT,NOROOT表示如果這個段中的符號沒有被引用,將會被連接器舍棄,即可被優化。ROOT表示不可被優化。REORDER表示開始一個新的名字是 section 的段(section),NOREORDER表示開始一個新的名字為 section 的片段(fragment),多個片段組成一個段(section)
? ? ? ? type,memory 的類型,取值是 CODE、CONST、DATA
? ? ? ? section,段的名字
【3】EXTERN 用導入(引用)其他模塊的 symbol(符號)

【4】PUBLIC 導出 symbol(符號)

第二段:

DATA __vector_tableDCD sfe(CSTACK)DCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI HandlerDCD HardFault_Handler ; Hard Fault HandlerDCD MemManage_Handler ; MPU Fault HandlerDCD BusFault_Handler ; Bus Fault HandlerDCD UsageFault_Handler ; Usage Fault HandlerDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD 0 ; ReservedDCD SVC_Handler ; SVCall HandlerDCD DebugMon_Handler ; Debug Monitor HandlerDCD 0 ; ReservedDCD PendSV_Handler ; PendSV HandlerDCD SysTick_Handler ; SysTick Handler; External InterruptsDCD WWDG_IRQHandler ; Window WatchDog DCD PVD_IRQHandler ; PVD through EXTI Line detection DCD TAMP_STAMP_IRQHandler ; Tamper and TimeStamps through the EXTI line DCD RTC_WKUP_IRQHandler ; RTC Wakeup through the EXTI line DCD FLASH_IRQHandler ; FLASH DCD RCC_IRQHandler ; RCC DCD EXTI0_IRQHandler ; EXTI Line0 DCD EXTI1_IRQHandler ; EXTI Line1 DCD EXTI2_IRQHandler ; EXTI Line2 DCD EXTI3_IRQHandler ; EXTI Line3 DCD EXTI4_IRQHandler ; EXTI Line4 DCD DMA1_Stream0_IRQHandler ; DMA1 Stream 0 DCD DMA1_Stream1_IRQHandler ; DMA1 Stream 1 DCD DMA1_Stream2_IRQHandler ; DMA1 Stream 2 DCD DMA1_Stream3_IRQHandler ; DMA1 Stream 3 DCD DMA1_Stream4_IRQHandler ; DMA1 Stream 4 DCD DMA1_Stream5_IRQHandler ; DMA1 Stream 5 DCD DMA1_Stream6_IRQHandler ; DMA1 Stream 6 DCD ADC_IRQHandler ; ADC1, ADC2 and ADC3s DCD CAN1_TX_IRQHandler ; CAN1 TX DCD CAN1_RX0_IRQHandler ; CAN1 RX0 DCD CAN1_RX1_IRQHandler ; CAN1 RX1 DCD CAN1_SCE_IRQHandler ; CAN1 SCE DCD EXTI9_5_IRQHandler ; External Line[9:5]s DCD TIM1_BRK_TIM9_IRQHandler ; TIM1 Break and TIM9 DCD TIM1_UP_TIM10_IRQHandler ; TIM1 Update and TIM10 DCD TIM1_TRG_COM_TIM11_IRQHandler ; TIM1 Trigger and Commutation and TIM11DCD 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 ; External Line[15:10]s DCD RTC_Alarm_IRQHandler ; RTC Alarm (A and B) through EXTI Line DCD OTG_FS_WKUP_IRQHandler ; USB OTG FS Wakeup through EXTI line DCD TIM8_BRK_TIM12_IRQHandler ; TIM8 Break and TIM12 DCD TIM8_UP_TIM13_IRQHandler ; TIM8 Update and TIM13 DCD TIM8_TRG_COM_TIM14_IRQHandler ; TIM8 Trigger and Commutation and TIM14DCD TIM8_CC_IRQHandler ; TIM8 Capture Compare DCD DMA1_Stream7_IRQHandler ; DMA1 Stream7 DCD FSMC_IRQHandler ; FSMC DCD SDIO_IRQHandler ; SDIO DCD TIM5_IRQHandler ; TIM5 DCD SPI3_IRQHandler ; SPI3 DCD UART4_IRQHandler ; UART4 DCD UART5_IRQHandler ; UART5 DCD TIM6_DAC_IRQHandler ; TIM6 and DAC1&2 underrun errors DCD TIM7_IRQHandler ; TIM7 DCD DMA2_Stream0_IRQHandler ; DMA2 Stream 0 DCD DMA2_Stream1_IRQHandler ; DMA2 Stream 1 DCD DMA2_Stream2_IRQHandler ; DMA2 Stream 2 DCD DMA2_Stream3_IRQHandler ; DMA2 Stream 3 DCD DMA2_Stream4_IRQHandler ; DMA2 Stream 4 DCD ETH_IRQHandler ; Ethernet DCD ETH_WKUP_IRQHandler ; Ethernet Wakeup through EXTI line DCD CAN2_TX_IRQHandler ; CAN2 TX DCD CAN2_RX0_IRQHandler ; CAN2 RX0 DCD CAN2_RX1_IRQHandler ; CAN2 RX1 DCD CAN2_SCE_IRQHandler ; CAN2 SCE DCD OTG_FS_IRQHandler ; USB OTG FS DCD DMA2_Stream5_IRQHandler ; DMA2 Stream 5 DCD DMA2_Stream6_IRQHandler ; DMA2 Stream 6 DCD DMA2_Stream7_IRQHandler ; DMA2 Stream 7 DCD USART6_IRQHandler ; USART6 DCD I2C3_EV_IRQHandler ; I2C3 event DCD I2C3_ER_IRQHandler ; I2C3 error DCD OTG_HS_EP1_OUT_IRQHandler ; USB OTG HS End Point 1 Out DCD OTG_HS_EP1_IN_IRQHandler ; USB OTG HS End Point 1 In DCD OTG_HS_WKUP_IRQHandler ; USB OTG HS Wakeup through EXTI DCD OTG_HS_IRQHandler ; USB OTG HS DCD DCMI_IRQHandler ; DCMI DCD 0 ; Reserved DCD HASH_RNG_IRQHandler ; Hash and RNGDCD FPU_IRQHandler ; FPU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;【1】DATA 表示下邊中的標簽是 32 位的標簽,THUMB 表示下邊的標簽是 16 位的標簽,所謂的標簽是 地址的別名,不占用代碼空間,給編譯器看的
【2】 DCD 是數據定義或者 重定位指令,為的是定義一個值,或者保留 memory,DCD 別名是 DC32,用于聲明一個 32 位的常量,這部分是中斷向量表的內容,需要注意的是,他們的順序不能改變,此部分會放到 flash 的最開始部分,當系統啟動的時候會加載前另個地址,第一個地址是 c 程序的棧的棧頂地址,第二個地址是向量表的開始地址,中斷發生時會根據向量表的首地址和偏移量來找到程序的入口

【3】sfe 指令作用是返回棧的結尾,因為棧的增長方向是反方向的

第三段:中斷處理函數

;; Default interrupt handlers. ;;THUMBPUBWEAK Reset_HandlerSECTION .text:CODE:REORDER:NOROOT(2) Reset_HandlerLDR R0, =SystemInitBLX R0LDR R0, =__iar_program_startBX R0PUBWEAK NMI_HandlerSECTION .text:CODE:REORDER:NOROOT(1) NMI_HandlerB NMI_HandlerPUBWEAK HardFault_HandlerSECTION .text:CODE:REORDER:NOROOT(1) HardFault_HandlerB HardFault_HandlerPUBWEAK MemManage_HandlerSECTION .text:CODE:REORDER:NOROOT(1) MemManage_HandlerB MemManage_HandlerPUBWEAK BusFault_HandlerSECTION .text:CODE:REORDER:NOROOT(1) BusFault_HandlerB BusFault_HandlerPUBWEAK UsageFault_HandlerSECTION .text:CODE:REORDER:NOROOT(1) UsageFault_HandlerB UsageFault_HandlerPUBWEAK SVC_HandlerSECTION .text:CODE:REORDER:NOROOT(1) SVC_HandlerB SVC_HandlerPUBWEAK DebugMon_HandlerSECTION .text:CODE:REORDER:NOROOT(1) DebugMon_HandlerB DebugMon_HandlerPUBWEAK PendSV_HandlerSECTION .text:CODE:REORDER:NOROOT(1) PendSV_HandlerB PendSV_HandlerPUBWEAK SysTick_HandlerSECTION .text:CODE:REORDER:NOROOT(1) SysTick_HandlerB SysTick_HandlerPUBWEAK WWDG_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) WWDG_IRQHandler B WWDG_IRQHandlerPUBWEAK PVD_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) PVD_IRQHandler B PVD_IRQHandlerPUBWEAK TAMP_STAMP_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TAMP_STAMP_IRQHandler B TAMP_STAMP_IRQHandlerPUBWEAK RTC_WKUP_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) RTC_WKUP_IRQHandler B RTC_WKUP_IRQHandlerPUBWEAK FLASH_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) FLASH_IRQHandler B FLASH_IRQHandlerPUBWEAK RCC_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) RCC_IRQHandler B RCC_IRQHandlerPUBWEAK EXTI0_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) EXTI0_IRQHandler B EXTI0_IRQHandlerPUBWEAK EXTI1_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) EXTI1_IRQHandler B EXTI1_IRQHandlerPUBWEAK EXTI2_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) EXTI2_IRQHandler B EXTI2_IRQHandlerPUBWEAK EXTI3_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) EXTI3_IRQHandlerB EXTI3_IRQHandlerPUBWEAK EXTI4_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) EXTI4_IRQHandler B EXTI4_IRQHandlerPUBWEAK DMA1_Stream0_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA1_Stream0_IRQHandler B DMA1_Stream0_IRQHandlerPUBWEAK DMA1_Stream1_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA1_Stream1_IRQHandler B DMA1_Stream1_IRQHandlerPUBWEAK DMA1_Stream2_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA1_Stream2_IRQHandler B DMA1_Stream2_IRQHandlerPUBWEAK DMA1_Stream3_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA1_Stream3_IRQHandler B DMA1_Stream3_IRQHandlerPUBWEAK DMA1_Stream4_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA1_Stream4_IRQHandler B DMA1_Stream4_IRQHandlerPUBWEAK DMA1_Stream5_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA1_Stream5_IRQHandler B DMA1_Stream5_IRQHandlerPUBWEAK DMA1_Stream6_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA1_Stream6_IRQHandler B DMA1_Stream6_IRQHandlerPUBWEAK ADC_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) ADC_IRQHandler B ADC_IRQHandlerPUBWEAK CAN1_TX_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) CAN1_TX_IRQHandler B CAN1_TX_IRQHandlerPUBWEAK CAN1_RX0_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) CAN1_RX0_IRQHandler B CAN1_RX0_IRQHandlerPUBWEAK CAN1_RX1_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) CAN1_RX1_IRQHandler B CAN1_RX1_IRQHandlerPUBWEAK CAN1_SCE_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) CAN1_SCE_IRQHandler B CAN1_SCE_IRQHandlerPUBWEAK EXTI9_5_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) EXTI9_5_IRQHandler B EXTI9_5_IRQHandlerPUBWEAK TIM1_BRK_TIM9_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM1_BRK_TIM9_IRQHandler B TIM1_BRK_TIM9_IRQHandlerPUBWEAK TIM1_UP_TIM10_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM1_UP_TIM10_IRQHandler B TIM1_UP_TIM10_IRQHandlerPUBWEAK TIM1_TRG_COM_TIM11_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM1_TRG_COM_TIM11_IRQHandler B TIM1_TRG_COM_TIM11_IRQHandlerPUBWEAK TIM1_CC_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM1_CC_IRQHandler B TIM1_CC_IRQHandlerPUBWEAK TIM2_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM2_IRQHandler B TIM2_IRQHandlerPUBWEAK TIM3_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM3_IRQHandler B TIM3_IRQHandlerPUBWEAK TIM4_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM4_IRQHandler B TIM4_IRQHandlerPUBWEAK I2C1_EV_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) I2C1_EV_IRQHandler B I2C1_EV_IRQHandlerPUBWEAK I2C1_ER_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) I2C1_ER_IRQHandler B I2C1_ER_IRQHandlerPUBWEAK I2C2_EV_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) I2C2_EV_IRQHandler B I2C2_EV_IRQHandlerPUBWEAK I2C2_ER_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) I2C2_ER_IRQHandler B I2C2_ER_IRQHandlerPUBWEAK SPI1_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) SPI1_IRQHandler B SPI1_IRQHandlerPUBWEAK SPI2_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) SPI2_IRQHandler B SPI2_IRQHandlerPUBWEAK USART1_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) USART1_IRQHandler B USART1_IRQHandlerPUBWEAK USART2_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) USART2_IRQHandler B USART2_IRQHandlerPUBWEAK USART3_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) USART3_IRQHandler B USART3_IRQHandlerPUBWEAK EXTI15_10_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) EXTI15_10_IRQHandler B EXTI15_10_IRQHandlerPUBWEAK RTC_Alarm_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) RTC_Alarm_IRQHandler B RTC_Alarm_IRQHandlerPUBWEAK OTG_FS_WKUP_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) OTG_FS_WKUP_IRQHandler B OTG_FS_WKUP_IRQHandlerPUBWEAK TIM8_BRK_TIM12_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM8_BRK_TIM12_IRQHandler B TIM8_BRK_TIM12_IRQHandlerPUBWEAK TIM8_UP_TIM13_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM8_UP_TIM13_IRQHandler B TIM8_UP_TIM13_IRQHandlerPUBWEAK TIM8_TRG_COM_TIM14_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM8_TRG_COM_TIM14_IRQHandler B TIM8_TRG_COM_TIM14_IRQHandlerPUBWEAK TIM8_CC_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM8_CC_IRQHandler B TIM8_CC_IRQHandlerPUBWEAK DMA1_Stream7_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA1_Stream7_IRQHandler B DMA1_Stream7_IRQHandlerPUBWEAK FSMC_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) FSMC_IRQHandler B FSMC_IRQHandlerPUBWEAK SDIO_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) SDIO_IRQHandler B SDIO_IRQHandlerPUBWEAK TIM5_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM5_IRQHandler B TIM5_IRQHandlerPUBWEAK SPI3_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) SPI3_IRQHandler B SPI3_IRQHandlerPUBWEAK UART4_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) UART4_IRQHandler B UART4_IRQHandlerPUBWEAK UART5_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) UART5_IRQHandler B UART5_IRQHandlerPUBWEAK TIM6_DAC_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM6_DAC_IRQHandler B TIM6_DAC_IRQHandlerPUBWEAK TIM7_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) TIM7_IRQHandler B TIM7_IRQHandlerPUBWEAK DMA2_Stream0_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA2_Stream0_IRQHandler B DMA2_Stream0_IRQHandlerPUBWEAK DMA2_Stream1_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA2_Stream1_IRQHandler B DMA2_Stream1_IRQHandlerPUBWEAK DMA2_Stream2_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA2_Stream2_IRQHandler B DMA2_Stream2_IRQHandlerPUBWEAK DMA2_Stream3_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA2_Stream3_IRQHandler B DMA2_Stream3_IRQHandlerPUBWEAK DMA2_Stream4_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA2_Stream4_IRQHandler B DMA2_Stream4_IRQHandlerPUBWEAK ETH_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) ETH_IRQHandler B ETH_IRQHandlerPUBWEAK ETH_WKUP_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) ETH_WKUP_IRQHandler B ETH_WKUP_IRQHandlerPUBWEAK CAN2_TX_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) CAN2_TX_IRQHandler B CAN2_TX_IRQHandlerPUBWEAK CAN2_RX0_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) CAN2_RX0_IRQHandler B CAN2_RX0_IRQHandlerPUBWEAK CAN2_RX1_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) CAN2_RX1_IRQHandler B CAN2_RX1_IRQHandlerPUBWEAK CAN2_SCE_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) CAN2_SCE_IRQHandler B CAN2_SCE_IRQHandlerPUBWEAK OTG_FS_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) OTG_FS_IRQHandler B OTG_FS_IRQHandlerPUBWEAK DMA2_Stream5_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA2_Stream5_IRQHandler B DMA2_Stream5_IRQHandlerPUBWEAK DMA2_Stream6_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA2_Stream6_IRQHandler B DMA2_Stream6_IRQHandlerPUBWEAK DMA2_Stream7_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DMA2_Stream7_IRQHandler B DMA2_Stream7_IRQHandlerPUBWEAK USART6_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) USART6_IRQHandler B USART6_IRQHandlerPUBWEAK I2C3_EV_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) I2C3_EV_IRQHandler B I2C3_EV_IRQHandlerPUBWEAK I2C3_ER_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) I2C3_ER_IRQHandler B I2C3_ER_IRQHandlerPUBWEAK OTG_HS_EP1_OUT_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) OTG_HS_EP1_OUT_IRQHandler B OTG_HS_EP1_OUT_IRQHandlerPUBWEAK OTG_HS_EP1_IN_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) OTG_HS_EP1_IN_IRQHandler B OTG_HS_EP1_IN_IRQHandlerPUBWEAK OTG_HS_WKUP_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) OTG_HS_WKUP_IRQHandler B OTG_HS_WKUP_IRQHandlerPUBWEAK OTG_HS_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) OTG_HS_IRQHandler B OTG_HS_IRQHandlerPUBWEAK DCMI_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) DCMI_IRQHandler B DCMI_IRQHandlerPUBWEAK HASH_RNG_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) HASH_RNG_IRQHandler B HASH_RNG_IRQHandlerPUBWEAK FPU_IRQHandlerSECTION .text:CODE:REORDER:NOROOT(1) FPU_IRQHandler B FPU_IRQHandlerEND

【1】THUMB 表明下邊是 thumb 指令

【2】Reset_Handler:復位操作后,mcu執行的中斷處理函數

R0 = SystemInit????????????????????? ? ?

BLX? ? ?R0?????????????????????跳轉到 SystemInit 函數(stm32的第一個函數),并將處理器切換到 thumb 態?????????????????????????????

R0 = __iar_program_start????????? ??

BX? ? ? R0??????????????????????跳轉到 __iar_program_start 函數,狀態也是切換到 thumb 狀態

注意:此處BLX 和BX 的用法與區別不過多介紹;

【3】SystemInit函數(大同小異),功能:完成芯片正常運行所需的必備功能項的配置

//#define VECT_TAB_SRAM //RAM或Flash2RAM中運行 #define VECT_TAB_OFFSET 0x0 //!< Vector Table base offset field. //This value must be a multiple of 0x200. void SystemInit(void) {/* FPU settings ------------------------------------------------------------*/#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */#endif/* Reset the RCC clock configuration to the default reset state ------------*//* Set HSION bit */RCC->CR |= (uint32_t)0x00000001;/* Reset CFGR register */RCC->CFGR = 0x00000000;/* Reset HSEON, CSSON and PLLON bits */RCC->CR &= (uint32_t)0xFEF6FFFF;/* Reset PLLCFGR register */RCC->PLLCFGR = 0x24003010;/* Reset HSEBYP bit */RCC->CR &= (uint32_t)0xFFFBFFFF;/* Disable all interrupts */RCC->CIR = 0x00000000;#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM)SystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM *//* Configure the Vector Table location add offset address ------------------*/ #ifdef VECT_TAB_SRAMSCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */ #elseSCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ #endif }

【3.1】FPU浮點數運算設置,stm32f4系列支持浮點數運算;

【3.2】配置復位和時鐘相關的寄存器:RCC結構體變量包含所有的寄存器成員;

【3.3】外部SRAM配置(一般沒有使用外部SRAM);

【3.4】Vector向量表重定位(非常重要):配置中斷向量表的基地址和偏移量

(1)當在RAM中調試代碼時,需要將向量的基地址修改為RAM1的起始地址;這種情況不用這種模式

(2)一般我們配置的是NAND FLASH啟動模式,應該將向量的基地址修改為FLASH的起始地址

(3)地址偏移量:當我們的工程文件是stm32上電第一個程序時,應設置VECT_TAB_OFFSET=0;如果在此工程文件前,還有另外的執行程序PRO(比如用于IAP在線升級的bootloader程序),那么需要根據PRO程序的大小來設置VECT_TAB_OFFSET的大小,同時需要注意VECT_TAB_OFFSET的值必須是0x200的2*n(n=1,2,3...)倍數;(此段內容后續 會詳細介紹)

【4】此處的 __iar_program_start 在程序中找不到是因為它已經被封裝到了 IAR 自帶的C庫啟動代碼中了,當我們編譯的時候,在項目屬性的 linker,library中勾選了 Automatic runtime library ,就告訴了編譯器用庫中的 __iar_program_start ,具體實現了什么,我們可以查看 IAR 工具為我們提供的源碼,具體路徑在 IAR 安裝目錄下的 arm\src\lib\thumb ,我們可以看到有的文件分別的提供了 匯編代碼和 c 代碼。

查看cstartup_M.c,里面定義了__iar_program_start函數

void __iar_program_start( void ) {__iar_init_core();__iar_init_vfp();__cmain(); }

其中:

【4.1】此段的程序中前兩個函數是弱函數,在工程共沒有定義

【4.2】__cmain 函數作用是初始化段和底層硬件,最后調用main

至此,庫文件中的啟動文件先分析到這里

(二)啟動流程總結:

(1)一般我們配置STM32從flash啟動,啟動流程如下:

【1.1】MCU上電后從0x0800 0000處讀取棧頂地址并保存——>MCU從0x0800 0004處讀取中斷向量表的起始地址——>根據MCU系統設定的中斷偏移量來計算出復位中斷向量(起始地址+0),其內容=Reset_Handler,即復位中斷處理程序入口地址——>跳轉到復位中斷處理程序入口處(通過設置PC指針,MCU自動完成,我們不需要管);

【1.2】復位中斷函數:

R0 = SystemInit? ? ? ? ? ? ? ? ? ? ? ? ?
BLX? ? ?R0? ? ? ? ? ? ? ? ? ? ?跳轉到 SystemInit 函數(stm32的第一個函數),并將處理器切換到 thumb 態? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
R0 = __iar_program_start? ? ? ? ? ??

BX? ? ? R0??????????????????????跳轉到 __iar_program_start 函數,狀態也是切換到 thumb 狀態

最后的跳轉函數時main函數,即進入用戶程序

【1.3】main循環:

需要注意:用戶main程序一般內部是一個while(1)死循環(否則,main函數執行完成后,MCU會跳進Hard Fault硬件錯誤處)

當發生xx中斷時:MCU保存現場——>MCU從0x0800 0004處讀取中斷向量表的起始地址——>根據中斷偏移量來計算出xx中斷向量,然后取出xx中斷處理程序入口地址

【1.4】MCU跳轉到xx中斷處理程序入口地址處,開始執行中斷處理函數。

【1.5】xx中斷處理程序完成后,MCU恢復現場,繼續執行。



(2)STM32的啟動模式簡述:

上面講解的是STM32從flash啟動(用戶APP程序是從0x08000000開始),實際上STM32支持多種啟動模式,這里進行簡單介紹:

【2.1】STM32的啟動模式由芯片的啟動引腳BOOT0和BOOT1決定:MCU在上電時會讀取BOOT0和BOOT1引腳的電平狀態并鎖存,系統根據電平狀態來從選擇啟動方式(注意:這里說的啟動是指正常的上電,當我們采用jlink/jtag進行程序燒寫或調試時,MCU會會忽略引腳狀態)。下面是官方使用指南的說明:


【2.2】STM32三種啟動模式對應的物理存儲介質均是芯片內置的,它們是:
????? ? a.????主閃存存儲器 = 芯片內置的Flash。
????? ? b.????系統存儲器 = 芯片內部一塊特定的區域,芯片出廠時在這個區域預置了一段Bootloader,就是通常說的ISP程序。這個區域的內容在芯片出廠后用戶無法進行讀寫操作。

????? ? c.??SRAM = 芯片內置的RAM區,具有掉電丟失性。

補充解釋:我們知道MCU上電是從0x0000 0000開始執行代碼,但是我們發現STM32三種啟動模式對應的物理存儲介質均不在0x0000 0000處(也不可能同時在),而且地址不連續。這就是,“根據啟動引腳,映射到Flash、系統存儲區或SRAM”這句話的奇妙,可以理解成一下2點:

A 根據不同的啟動模式, 對應到各種啟動模式的不同物理存儲介質將被映像到第0塊(啟動存儲區);

B??即使被映像到啟動存儲區,仍然可以在它原先的存儲器空間內訪問相關的存儲器。(未驗證,值得去探究!!)

A 就是:邏輯上講MCU上電是從0x0000 0000開始執行代碼,但是實際上PC指針是從實際對應的物理存儲介質處開始執行。

比如我們從flash啟動,通過IAR或KEIL在線調試,會發現MCU運行時的PC指針是從0x0800 0000開始的。

B就是:因為經過系統映射,那么對映射區的讀寫 = 對實際物理介質區的讀寫

比如:在00/01啟動模式下,仍可讀寫執行0x08xxxxxx中的數據和代碼, 并和讀寫執行0x00xxxxxx是一回事;在11啟動模式下,仍可讀寫執行0x20xxxxxx 并和讀寫執行0x00xxxxxx是一回事


?

【2.3】三種啟動方式對比:

a.? ?主閃存存儲器:最常用的方式,程序掉電不丟失,因此當我們確定工程完全達到使用要求后,一般是將文件燒寫到flash中。
b.???系統存儲器啟動:這種模式啟動的程序功能是由廠家設置的。一般來說,這種啟動方式用的比較少。一般來說,我們選用這種啟動模式時,是為了從串口(或是其他類似方式)下載程序,因為在廠家提供的BootLoader中,提供了串口下載程序的固件,可以通過這個BootLoader將程序下載到系統的Flash中。但是這個下載方式需要以下步驟:
????????Step1:????將BOOT0設置為1,BOOT1設置為0,然后按下復位鍵,這樣才能從系統存儲器啟動BootLoader
????????Step2:????最后在BootLoader的幫助下,通過串口下載程序到Flash中
????????Step3:????程序下載完成后,又有需要將BOOT0設置為GND,手動復位,這樣,STM32才可以從Flash中啟動
可以看到,利用這種模式下載程序的流程稍顯繁瑣,但是可以通過普通串口代替專用燒寫接口,不需要使用專用燒寫工具。
c.????內置SRAM:因為SRAM掉電數據丟失,因此這個模式一般用于程序調試,而且SRAM的可擦除次數要遠高于flash比如:當代碼僅修改了局部內容,可以考慮從這個模式啟動代碼(也就是STM32的內存中),用于快速的程序調試,等程序調試完成后,再將程序下載到Flash中。(還有,一般的,程序在RAM執行速度要比flash快一些)

(3)工程源文件與可執行文件的聯系之“分散加載文件

我們在使用ARM集成開發工具對工程進行開發時,基本流程如下:


源文件經預處理->編譯->匯編->鏈接生成目標文件,生產目標文件之前,我們基本上都可以不用深入研究;目標文件經過連接器連接,生成可執行文件。這里我們需要關注一個問題:不同的目標文件是按照什么規則連接在一起的呢?

所依靠的文件即是:分散加載腳本,

【3.1】簡單介紹:對于分散加載的概念,在《ARM體系結構與編程》書中第11章有明確介紹。

????分散加載文件(即scatter file,IAR工程中其后綴為.scf)是一個文本文件,通過編寫一個分散加載文件來指定ARM連接器在生成映像文件時如何分配RO,RW,ZI等數據的存放地址。如果不用SCATTER文件指定,那么ARM連接器會按照默認的方式來生成映像文件,一般情況下我們是不需要使用分散加載文件的。

什么時候使用scatter file:
1、存在復雜的地址映射:例如代碼和數據需要分開存放在多個區域。
2、存在多個存儲器類型:包含Flash, ROM, SDRAM,快速SRAM。我們根據代碼與數據的特性把他們發在不同的存儲器中,比如中斷處理部分放在快速SRAM內部來提高響應速度,而把不常用到的代 碼放到速度比較慢的Flash內。
3、函數的地址固定定位:可以利用Scatter file實現把某個函數放在固定地址,而不管其應用程序是否已經改變或重新編譯。
4、利用符號確定堆和堆棧。
5、內存映射的IO:利用scatter file可以實現把某個數據段放在精確的地址處。因此對于嵌入式系統來說scatter file是必不可少的,因為嵌入式系統采用了ROM, RAM和內存映射的IO。

【3.2】IAR中的stm32F407的.scf文件的一般格式如下:

/*###ICF### Section handled by ICF editor, don't touch! ****/ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ /*-Specials-*/ define symbol __ICFEDIT_intvec_start__ = 0x08000000;/*中斷向量表開始地址*/ /*-Memory Regions-*/ /*定義內部FLASH地址 */--/*定義內部RAM地址 */ define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;/*閃存起始地址*/ define symbol __ICFEDIT_region_ROM_end__ = 0x0800FFFF;/*閃存結束地址---flash大小64k*/ define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;/*SRAM起始地址*/ define symbol __ICFEDIT_region_RAM_end__ = 0x20004FFF;/*SRAM結束地址---SRAM大小20k*/ /*-Sizes-*//* 棧和堆大小*/ define symbol __ICFEDIT_size_cstack__ = 0x800; /*棧大小*/ define symbol __ICFEDIT_size_heap__ = 0x800;/*堆大小*/ /**** End of ICF editor section. ###ICF###*/ define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };//CSTACK塊屬性(8字節對齊、大小__ICFEDIT_size_cstack__) define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; /* 下列語句定義所定義地址空間內可完成的操作類型*/ initialize by copy { readwrite }; do not initialize { section .noinit }; place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; //__ICFEDIT_intvec_start__賦值給.intvec標識符 place in ROM_region { readonly }; place in RAM_region { readwrite, block CSTACK, block HEAP };

后續關于分散加載文件會有更加詳細的說明;


(三)

由于自身能力有限,本文章存在相關表述問題,希望大家能夠批評指正,相互交流,共同進步!

QQ聯系方式:1030843709(泊葉)



總結

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

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

日韩色高清 | 麻豆91精品91久久久 | 午夜久久福利视频 | 激情开心色 | 成年美女黄网站色大片免费看 | 日韩a在线观看 | 国产精品久久av | 日日夜夜天天久久 | 热久久免费视频精品 | 国产精品aⅴ| 欧美黑人性爽 | 日韩精品视频第一页 | 国产丝袜制服在线 | 亚洲视频aaa | 久久精品看片 | 久久99精品久久久久久清纯直播 | 久久手机免费观看 | 国产小视频你懂的在线 | 日韩激情片在线观看 | 高清av网 | 在线视频18在线视频4k | 免费精品国产 | 国产特级毛片aaaaaa毛片 | 91精品免费看 | 91大神精品视频在线观看 | 久久噜噜少妇网站 | 在线精品视频免费播放 | 97国产精品视频 | 亚洲涩涩涩涩涩涩 | 亚洲专区一二三 | 91av官网 | 精品久久久久久亚洲 | 黄色天堂在线观看 | a黄色一级| 久久首页 | 婷婷丁香自拍 | 成人99免费视频 | 国产成人在线免费观看 | 亚洲好视频 | 亚洲综合情 | 天天操夜 | 国偷自产视频一区二区久 | 天天干天天做 | 国产一区二区在线免费 | 99国产一区 | 亚洲午夜久久久久久久久 | 极品美女被弄高潮视频网站 | 久草视频在线观 | 一区二区三区av在线 | 国产日韩欧美在线 | 福利一区在线视频 | 99人成在线观看视频 | 久久字幕网 | 国产高清不卡 | www免费视频com━ | 一级片免费观看 | 国产日韩视频在线观看 | 亚洲精品女人久久久 | 免费在线观看a v | 欧美黄污视频 | 一级黄色片在线观看 | 天天添夜夜操 | 日韩免| 美女视频黄的免费的 | 黄色毛片网站在线观看 | 亚洲97在线 | 国产最新91 | 亚洲一级片在线看 | 日日碰狠狠添天天爽超碰97久久 | 国产高清在线免费 | 黄a网站 | 黄色网址在线播放 | 午夜精品久久久久久久爽 | 91欧美视频网站 | 中文字幕亚洲精品日韩 | 三级黄色欧美 | 激情深爱.com| 探花视频在线观看免费版 | 九九久久久久久久久激情 | 欧美日韩国产精品一区 | 久久国产免费视频 | 天天操天天操天天爽 | 久久影视精品 | 狠狠色丁香婷婷综合橹88 | 婷婷久久五月 | www.黄色片网站 | 中文字幕字幕中文 | 成人黄色免费在线观看 | 一区二区精品在线观看 | 国产精品 欧美 日韩 | 亚洲精品无 | 91在线看视频免费 | 久久av在线播放 | 日韩在线中文字幕视频 | 在线观看网站av | 亚洲 欧美 国产 va在线影院 | 久草av在线播放 | 久久97超碰 | 精品视频中文字幕 | 久久欧美综合 | 国产精品一区二区三区在线播放 | 一级黄色片在线免费看 | 精品国产免费久久 | 久久久亚洲成人 | 欧美日韩精品在线一区二区 | 国产精品久久久久久爽爽爽 | 韩日精品在线 | 99精品视频99 | 亚洲最大av在线播放 | 在线视频福利 | 国产一区二区在线影院 | 狠狠狠色丁香综合久久天下网 | 国产精品免费不卡 | 最新中文字幕在线播放 | 日韩网站一区 | 欧美在线99 | 全黄网站| 午夜电影久久 | 91精品国产三级a在线观看 | 日韩一区正在播放 | 日韩欧美在线免费观看 | 四虎影视av | 在线观看国产中文字幕 | 亚洲欧美少妇 | 精品国产乱码一区二区三区在线 | 天天看天天操 | 久久伊99综合婷婷久久伊 | 国产成人99av超碰超爽 | 高清av中文在线字幕观看1 | 国产五月色婷婷六月丁香视频 | 麻豆视频网址 | 亚洲成人免费在线观看 | 免费福利在线视频 | 伊人电影在线观看 | 9992tv成人免费看片 | 九九99靖品 | 99精品热 | 亚洲国产精品小视频 | 日本3级在线观看 | 亚洲欧洲精品一区二区精品久久久 | 日本激情视频中文字幕 | 97精品国产aⅴ | 久久99久久精品国产 | 久久久久久久毛片 | 日韩毛片在线一区二区毛片 | 日韩三级一区 | 99精品视频在线观看视频 | 婷婷色在线观看 | 麻豆国产在线播放 | 亚洲精品视频在线观看免费 | 日韩av在线高清 | 美女中文字幕 | 精品福利国产 | 91成人网在线观看 | 精品国产乱子伦一区二区 | 最近字幕在线观看第一季 | 日韩高清无线码2023 | 精品一区二区免费在线观看 | 国产黄色片久久 | 午夜免费在线观看 | 91精品国自产在线 | 免费观看av网站 | 天天综合网国产 | 亚洲视频免费在线 | 999日韩 | 丁香婷婷深情五月亚洲 | 丁香久久婷婷 | 97视频久久久 | 波多野结衣亚洲一区二区 | 激情欧美丁香 | 国产成人精品亚洲日本在线观看 | 福利视频网址 | 色狠狠操 | 欧美久久久久久久久中文字幕 | 亚洲免费视频在线观看 | 一区二区视频网站 | av 一区二区三区 | 国产精品午夜av | 国产精品免费人成网站 | 亚洲视频每日更新 | 日韩区欠美精品av视频 | 在线看国产一区 | 伊人婷婷综合 | 黄色毛片视频免费 | 免费看久久 | 在线观看 国产 | 国产视频午夜 | 在线中文视频 | 黄色网址在线播放 | 中国一级片免费看 | 五月导航 | 久草精品电影 | 免费又黄又爽的视频 | 亚洲欧美在线观看视频 | 2018好看的中文在线观看 | 国产精品成人自产拍在线观看 | 久久精品国产免费看久久精品 | 一区二区精品在线视频 | 黄色免费电影网站 | 日韩在线一二三区 | 99视频精品在线 | 日韩小视频网站 | 国产精品毛片久久久久久久 | 色网站在线观看 | 日韩有码在线播放 | 天天色成人 | 欧美精品久久久久久久久久丰满 | 日本99精品 | 午夜精品一区二区三区在线 | 国精产品999国精产品视频 | 中文字幕在线播放视频 | 黄色片网站 | 国产精品a成v人在线播放 | 伊人网综合在线观看 | 超碰在线97观看 | www.色在线| 97视频人人 | 在线视频欧美精品 | 午夜久久影视 | 国产一二区免费视频 | 91在线视频观看 | 国产精品乱码一区二三区 | 国产99久久久国产 | 91久久精品一区 | 国产区在线 | 四虎在线免费观看 | 亚洲v欧美v国产v在线观看 | 亚洲国产日韩一区 | 欧美在一区 | 午夜精品久久久久久久久久 | 亚洲综合成人av | 99久久99久久 | 久久国精品 | 天天色综合三 | 亚洲永久精品国产 | 国产精品美女久久久久久久久 | 亚洲狠狠干 | 中文字幕 国产视频 | 中字幕视频在线永久在线观看免费 | 国产午夜免费视频 | 伊人久操 | 成人午夜片av在线看 | 成人av网址大全 | 在线观看视频在线观看 | 久久一区二区三区超碰国产精品 | 麻豆一区在线观看 | 夜夜嗨av色一区二区不卡 | 美女视频永久黄网站免费观看国产 | 国产五十路毛片 | 亚洲国产视频直播 | 成人免费在线观看电影 | 亚洲精品av在线 | 精品一区二区在线播放 | 青青草国产免费 | 久久99亚洲精品久久 | 99c视频在线 | 四虎国产视频 | 91免费看黄 | 4438全国亚洲精品在线观看视频 | a v在线视频 | 日日夜夜精品 | 黄色免费电影网站 | 久久精品网| 日韩三级久久 | 一级黄色片毛片 | 国产香蕉视频 | 成年人网站免费观看 | 国产成人免费 | 在线观看你懂的网址 | 一区二区在线不卡 | 欧美日韩亚洲第一页 | 婷婷在线网站 | 国产xxxx性hd极品 | 9在线观看免费 | 成人免费精品 | 在线蜜桃视频 | 高清视频一区二区三区 | 美女在线观看av | 国产91综合一区在线观看 | 91禁看片 | 日本中文一级片 | 国产精品亚洲a | 热久久影视 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产一区视频在线 | 久久蜜臀av | 五月婷网 | 天天插天天爱 | 亚洲精品玖玖玖av在线看 | 久久精品视频免费 | 四虎成人精品永久免费av | 久久五月网 | 一本一本久久a久久精品牛牛影视 | 九九免费在线视频 | 日本精品中文字幕 | 免费看黄色91 | 婷婷色网视频在线播放 | 日韩精品久久一区二区三区 | 国产精品1区2区 | 色搞搞| www.精选视频.com | 麻豆成人在线观看 | 天天射天天干天天 | 日韩精品无| 91在线国产观看 | 人人看人人爱 | 免费观看福利视频 | 亚洲第一区在线播放 | 精品1区二区 | 成人免费xxxxxx视频 | 国产麻豆精品一区 | 天天色中文 | 欧美日韩高清在线观看 | 精品欧美一区二区在线观看 | 97免费视频在线播放 | 黄色在线视频网址 | 2020天天干夜夜爽 | 黄色毛片电影 | 五月天天在线 | 久要激情网 | 国产精品夜夜夜一区二区三区尤 | 综合网成人| 亚洲综合在线一区二区三区 | 西西www4444大胆在线 | 日韩电影在线观看一区二区三区 | 日韩欧美精品一区二区三区经典 | 成人免费网站在线观看 | 国产一二三区在线观看 | 丁香婷婷深情五月亚洲 | 免费看片黄色 | 久久久国产精品一区二区三区 | 国产精品久久久99 | 国产青春久久久国产毛片 | 亚洲午夜av电影 | 在线一二区 | 欧美精品在线观看 | 91porny九色在线播放 | 在线导航av| 国产综合片 | 欧美男男激情videos | 免费看国产曰批40分钟 | 久久影院精品 | 成人手机在线视频 | 91麻豆精品国产 | 国产精品麻 | 国产成人精品一区二区三区 | 中文字幕超清在线免费 | 久久久性| 国产精品九九视频 | 久久99久久99精品 | 激情久久小说 | 丁香婷婷综合色啪 | 欧美 亚洲 另类 激情 另类 | 欧美性大胆 | 成人免费观看大片 | 久艹在线免费观看 | 国产一区二区三区视频在线 | 人人插超碰 | 天天摸天天操天天舔 | 91精品一区国产高清在线gif | 色婷婷色 | 免费av 在线 | 亚洲精品大全 | 久久婷婷精品视频 | 婷婷丁香狠狠爱 | 18+视频网站链接 | 亚洲综合视频在线观看 | 国产999精品久久久久久麻豆 | 亚洲小视频在线观看 | 456成人精品影院 | 日韩中文在线字幕 | 最近日本韩国中文字幕 | 亚洲欧洲久久久 | 91亚洲精品久久久中文字幕 | 精品国产1区2区3区 国产欧美精品在线观看 | 久久国产精品99久久久久久丝袜 | 久久9999久久 | www.天天操 | 日本字幕网| 婷婷福利影院 | 免费国产在线精品 | 免费毛片一区二区三区久久久 | 欧美精品免费视频 | 久久香蕉国产精品麻豆粉嫩av | 国产精品国内免费一区二区三区 | www.99久久.com| 人人爽人人搞 | 国产成人香蕉 | 国产一区二区日本 | 九九热视频在线免费观看 | 69av网| 日韩欧美久久 | 国产一级大片在线观看 | 久久这里只有精品视频99 | 国产视频久久久久 | 成人性生交大片免费看中文网站 | 婷婷六月综合亚洲 | 日批视频在线观看免费 | 日韩三级不卡 | 九九视频精品在线 | 久久国产欧美日韩精品 | 激情综合色播五月 | 欧美日韩久久久 | 国产精品色婷婷 | 亚洲人久久久 | 日韩理论电影网 | 麻豆久久久| 日本精品视频在线观看 | 久久久久久久久久久黄色 | 国产精品日韩在线观看 | 探花视频在线观看免费 | 精品一二三四视频 | 国产精品免费一区二区三区 | 丁五月婷婷 | 日日狠狠 | 国产在线观看黄 | 91精品在线视频观看 | 色网站在线 | 国产男女爽爽爽免费视频 | 亚洲欧美视频一区二区三区 | 亚洲专区欧美 | 国产一区二区中文字幕 | 在线免费观看一区二区三区 | av在线一级 | 欧美a级成人淫片免费看 | 久久久久久99精品 | 91传媒在线| 免费一级片在线观看 | 热久久精品在线 | 日韩成人黄色av | 黄色在线观看免费网站 | 色婷婷六月天 | 久久无码av一区二区三区电影网 | 欧美精品乱码99久久影院 | 亚洲成人黄色网址 | 精品国产_亚洲人成在线 | 欧美片网站yy | 国产亚洲欧美精品久久久久久 | 性色av免费在线观看 | 香蕉视频免费看 | 国产美女免费观看 | 一级精品视频在线观看宜春院 | 特级西西444www大精品视频免费看 | 天天操天天舔天天爽 | 五月综合在线观看 | 国产综合在线观看视频 | 天天综合网天天综合色 | 国产一区视频免费在线观看 | 13日本xxxxxⅹxxx20 | 在线看一区| 四虎成人免费影院 | 九九久久免费视频 | www日韩欧美 | 国产一区在线视频播放 | 精品久久久久久电影 | 人人狠| 在线免费观看黄色 | 91成人网在线 | 亚欧日韩av | 免费日韩视频 | av大全在线看 | 99久久精品国产亚洲 | www.在线看片.com | 日本黄色免费观看 | 久草电影在线 | 在线观看国产v片 | 在线观看国产成人av片 | 中文字幕91 | 国产精品婷婷 | 午夜精品久久久久久久久久久 | 91色亚洲| 国产乱对白刺激视频在线观看女王 | 免费成人在线视频网站 | 麻豆视频免费观看 | 91片网| 干天天 | 日韩欧美网址 | 91久久精品一区二区二区 | 色综合五月 | 中文字幕xxxx | 69精品视频在线观看 | 人人搞人人搞 | 黄色毛片视频免费观看中文 | 麻豆传媒在线免费看 | 九九免费在线观看 | 久久综合狠狠综合 | 亚洲精品久久在线 | 日日操天天操夜夜操 | 一区二区三区福利 | 四虎成人精品永久免费av九九 | 激情av一区二区 | 国产精品999久久久 久产久精国产品 | .国产精品成人自产拍在线观看6 | 久久五月天色综合 | 丁香视频免费观看 | 一区二区三区久久精品 | 久久尤物电影视频在线观看 | 亚洲综合网站在线观看 | 国产成人精品一区二区在线 | 在线观看视频一区二区三区 | 国产九九热视频 | 亚洲精品女人久久久 | 五月色综合 | 亚洲春色综合另类校园电影 | 欧美日韩国产一区二 | 开心激情网五月天 | 久久九九影院 | 久久久蜜桃一区二区 | 精品国产一区二区三区久久 | 亚洲精品国产精品国 | 久久免费视频网 | 国内视频在线观看 | 亚洲精品综合一区二区 | 天天爱天天干天天爽 | 欧美日韩视频网站 | 人人狠狠综合久久亚洲 | 亚洲开心激情 | 深夜免费福利 | 国内精品二区 | 亚洲三级在线 | 狠狠操夜夜操 | 亚洲精品乱码久久久久久高潮 | 国产精品久久久久aaaa九色 | 日韩欧美国产精品 | 在线观看一区二区精品 | 婷婷久久丁香 | 午夜精品电影 | 欧美精品久久久久久久 | 亚洲播放一区 | 国内精品久久久久久久影视麻豆 | av不卡中文| www.五月天激情 | 久久久精品欧美一区二区免费 | 六月丁香色婷婷 | 亚洲久在线| 欧美韩国日本在线观看 | 久久久色| 日韩免费在线观看网站 | 91麻豆国产 | 国产无区一区二区三麻豆 | 91高清不卡| 国产精品99久久久久久宅男 | 国产一区在线精品 | 亚洲午夜小视频 | 视频三区在线 | 国产一区二区久久久久 | 国产午夜小视频 | 亚洲精品九九 | av免费观看网站 | 久久久精品国产一区二区电影四季 | 天天插天天操天天干 | 婷婷在线视频 | 夜夜夜夜夜夜操 | 欧美精品v国产精品 | 麻豆视频在线免费观看 | 国产高清视频在线免费观看 | 亚洲一区免费在线 | 中文国产成人精品久久一 | 黄色免费观看网址 | 亚洲成av人片在线观看香蕉 | 99这里只有精品99 | 免费国产黄线在线观看视频 | 免费午夜av | 91大神电影 | 日韩色视频在线观看 | 精品久久久久国产免费第一页 | 久久免费视频播放 | 国产资源精品 | av成人在线观看 | 久久午夜网| 久久免费精品一区二区三区 | 天天骚夜夜操 | 亚洲国产中文字幕在线视频综合 | 国产一级片免费观看 | 99精品国产一区二区三区不卡 | 中文字幕一区三区 | 欧美 亚洲 另类 激情 另类 | 久久久久亚洲最大xxxx | av丝袜美腿 | 99精品久久只有精品 | 手机色在线 | 中文字幕国产在线 | 国产精品成人一区二区三区吃奶 | 精品国产成人 | 久久久久国产一区二区三区 | 久久国产乱| 韩国三级av在线 | 综合天天久久 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 欧美在线aa| 国产福利在线免费观看 | 天天干夜夜干 | 免费高清在线观看电视网站 | 国产精品久久久久久久久久久免费 | 国产高h视频 | 国产一级视屏 | 国产精品区二区三区日本 | 2021国产精品视频 | 丰满少妇在线观看资源站 | 免费av网址在线观看 | 欧美日韩视频观看 | 98涩涩国产露脸精品国产网 | 久久综合九色综合欧美就去吻 | 欧美一区二区伦理片 | 色九色 | 一区二区三区四区五区在线 | 黄色a级片在线观看 | 久久精品视频网 | 日韩免费看视频 | 嫩模bbw搡bbbb搡bbbb | 狠狠色丁香婷婷综合橹88 | 999视频网站| 亚洲精品在线观看中文字幕 | 91大神精品视频在线观看 | 久久久久久伊人 | 99这里只有精品视频 | 99精品99 | 91热爆在线观看 | 日韩av手机在线看 | 亚洲黄色免费网站 | 国产精品久久久久久久久免费 | 欧美性色黄大片在线观看 | 狠狠色丁香婷婷综合橹88 | 一区二区三区四区五区在线视频 | 久草精品在线播放 | 国产剧情在线一区 | 99免费精品视频 | 国内视频在线观看 | 最近的中文字幕大全免费版 | 色综合久久中文字幕综合网 | 97成人精品区在线播放 | 337p西西人体大胆瓣开下部 | 色婷婷狠狠五月综合天色拍 | 婷婷精品在线视频 | 国产精品美女在线 | 国内精品久久久久影院日本资源 | 最近中文字幕在线播放 | 国产日韩精品欧美 | 中文字幕第一 | 亚洲欧美婷婷六月色综合 | 国产精品一区二区免费 | 欧美一级特黄高清视频 | 国产成人av网 | 九九热免费视频在线观看 | 久久久久成人精品亚洲国产 | 国产色婷婷精品综合在线手机播放 | 亚洲黄色免费在线看 | 国产亚洲视频在线免费观看 | 91在线超碰| 在线播放国产一区二区三区 | 亚洲国产中文字幕 | a久久免费视频 | 免费看污在线观看 | 欧美人操人 | 国产视频一区在线 | 精品影院一区二区久久久 | 成人三级视频 | 美女网站视频一区 | 成人免费视频a | 国产在线观看午夜 | 精品免费观看 | 久久理论视频 | 片黄色毛片黄色毛片 | 国产成人在线免费观看 | 久草免费在线视频观看 | 国产一级性生活 | 日韩免费三级 | 色99色| 久久综合九色综合97_ 久久久 | 亚洲国产精品免费 | 色婷婷丁香 | 日韩免费在线一区 | 欧美一区二区三区免费观看 | 天天鲁一鲁摸一摸爽一爽 | 久久99国产精品久久 | 国产91对白在线播 | 亚洲综合五月天 | 国产中文a | 999久久久久久久久 69av视频在线观看 | 色中色综合 | 日韩羞羞 | 欧美男女爱爱视频 | www.色综合.com | 蜜臀一区二区三区精品免费视频 | 欧美一级大片在线观看 | 日韩国产高清在线 | 久久精品a | 国产成人一区二区精品非洲 | 精品xxx| 黄色网免费 | 亚洲成人午夜av | 日日夜夜噜噜噜 | 欧美一区二区在线 | www.久久久.cum | 亚洲精品视频在线免费 | 色视频成人在线观看免 | 亚洲一区精品人人爽人人躁 | 国产69精品久久久久99 | 在线色吧 | 精品一区二区在线观看 | 免费看片在线观看 | 久久色中文字幕 | 成人a在线观看高清电影 | 97色se| 久久精品视频免费播放 | 日本精品视频免费 | 亚洲激情校园春色 | 黄色软件视频大全免费下载 | 超碰在线97免费 | 国产91精品看黄网站在线观看动漫 | 欧美日韩一区久久 | 国产视频久久久 | 国产色区 | 日韩电影中文,亚洲精品乱码 | 亚洲一本视频 | 超碰在线免费福利 | 欧美最新大片在线看 | 99视频在线观看视频 | 丁香激情五月婷婷 | 国产精品99久久久久久小说 | 99久久国产免费,99久久国产免费大片 | 97电影院在线观看 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 操操操人人人 | 色www精品视频在线观看 | 亚洲jizzjizz日本少妇 | 在线精品在线 | 99久久夜色精品国产亚洲 | 亚洲精品国产自产拍在线观看 | 久久综合婷婷 | 美女国内精品自产拍在线播放 | 性色av香蕉一区二区 | 国产免费叼嘿网站免费 | 成人免费一区二区三区在线观看 | 手机看片国产 | 国产福利一区二区在线 | 一区电影 | 国产精品不卡在线观看 | 又湿又紧又大又爽a视频国产 | 国产精品去看片 | 国产99久久精品一区二区永久免费 | 亚洲成人av在线播放 | 中国一级片视频 | 免费国产在线精品 | 狠狠的日日| 国产少妇在线观看 | 亚洲成人家庭影院 | 在线看国产视频 | 一区二区三区免费看 | 亚洲经典视频 | 欧美激情综合五月色丁香 | 免费观看性生交 | 国产在线免费观看 | 黄色免费在线看 | av观看久久久 | 成人av高清在线观看 | 九月婷婷色 | 99久热在线精品视频成人一区 | 色欧美成人精品a∨在线观看 | 黄色在线视频网址 | 天天射成人 | 激情婷婷丁香 | 免费亚洲视频 | 91视频电影 | 99视频网址 | 精品久久久久久久久久久院品网 | 黄网站免费大全入口 | 日韩三级视频在线观看 | 在线观看黄污 | 美女视频黄免费网站 | 欧美性爽爽 | 国内精品美女在线观看 | 在线视频观看亚洲 | 日韩av一区二区三区在线观看 | 国产99视频在线观看 | 91香蕉视频好色先生 | 国产精品免费观看网站 | 免费黄色在线网址 | av网站手机在线观看 | 国产高清日韩 | 色黄久久久久久 | 国产香蕉97碰碰久久人人 | 国精产品999国精产品岳 | 人人爽人人av | 欧美另类xxx | 亚洲免费av在线播放 | 视频1区2区 | 成人久久久久久久久久 | 99视频精品 | 国产69精品久久久久99 | 久久综合欧美 | 黄色免费在线看 | 日韩色区| 日韩在线电影一区二区 | 精品国产伦一区二区三区观看说明 | 国产高清免费av | 国产午夜视频在线观看 | www.xxxx欧美| 五月婷婷六月丁香激情 | 91av在| 国产精品久久久久一区二区 | 日日操夜 | 亚洲精品视频在线免费播放 | 丁香花中文在线免费观看 | 国产精品久久久久久久久费观看 | 日韩在线视频免费播放 | 久久人人爽人人爽人人片av免费 | 麻豆视频在线免费看 | 国产精品porn | av不卡免费看 | 九九亚洲精品 | 国产黄在线 | 五月婷在线 | 中文字幕一区二区三区四区在线视频 | 成人免费大片黄在线播放 | 久久国产色 | 亚洲我射av| 特级毛片网 | 欧美一区二区三区在线视频观看 | 国产精品免费一区二区三区 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 麻豆小视频在线观看 | 国产精品福利午夜在线观看 | 精品国产乱子伦一区二区 | 日韩免费观看视频 | a级片久久| 黄色免费视频在线观看 | 黄色在线观看免费 | 久久精品香蕉 | 国产成人精品午夜在线播放 | 免费视频xnxx com | 丰满少妇麻豆av | 国产aaa大片 | 日韩欧美不卡 | 婷婷天天色 | 国产 欧美 日本 | 天天干天天怕 | 一区二区三区精品在线 | 久久亚洲私人国产精品va | 8x成人在线 | 久久久久国产精品视频 | 狠狠地操| 91在线视频一区 | 午夜手机电影 | 国产精品免费观看网站 | 九九免费精品视频 | 天天综合网久久综合网 | 在线之家免费在线观看电影 | 日韩网站中文字幕 | 亚洲精品国产精品乱码不99热 | 亚洲欧美日韩国产精品一区午夜 | 成人v| 天天射综合 | 亚洲人成综合 | 97人人网 | 免费福利片2019潦草影视午夜 | 午夜日b视频 | 亚洲精选在线观看 | 黄色免费观看视频 | 国产精品普通话 | 日本最新一区二区三区 | 欧美一级日韩三级 | 92精品国产成人观看免费 | 亚洲一级片在线观看 | 99热99| 手机av在线免费观看 | 国产高清免费在线播放 | 国产精品久久久久久久7电影 | 91黄色小视频 | 国产丝袜一区二区三区 | 国产精品18久久久久久久久久久久 | 亚洲成人av在线播放 | 日韩av在线看 | 夜夜夜夜夜夜操 | 国产黄色片久久久 | 久久免费观看少妇a级毛片 久久久久成人免费 | 国产黄色一级片在线 | 水蜜桃亚洲一二三四在线 | 国产日本高清 | 超碰97公开 | 1024手机在线看 | 日韩精品一区二区三区免费观看视频 | 亚州av网站 | 精品国产久 | 欧美日韩国产一二 | 久草久草在线 | 国产一级在线视频 | 五月天中文字幕mv在线 | 一区二区三区手机在线观看 | 国产精品久久久久久久久久不蜜月 | 国产精品女同一区二区三区久久夜 | 一区二区三区在线不卡 | 中文字幕日韩国产 | aaawww| 91成人在线观看喷潮 | 国产美女精品人人做人人爽 | 欧美日韩免费视频 | 免费看污的网站 | 国内一级片在线观看 | 一区二区电影在线观看 | 日韩高清国产精品 | 有码视频在线观看 | 涩涩网站在线看 | www.黄色| 精品综合久久久 | www色婷婷com| 久久永久视频 | 成人毛片在线观看 | 狠狠狠色丁香婷婷综合久久五月 | 色天天中文 | 日日日日日 | 久久精品看 | 黄色三级在线观看 | 久国产在线播放 | 伊人激情网 | 日韩精品在线视频免费观看 | 91精品在线麻豆 | 国产一区二区久久久久 | 欧洲性视频 | 国产成人精品久久久久蜜臀 | 国产精品99久久久久久久久久久久 | 欧美日韩免费一区二区三区 | 在线观看日韩免费视频 | 成人av影院在线观看 | 国产成人亚洲在线电影 | 99热九九这里只有精品10 | 日韩精品一区二区三区中文字幕 | 成人一区二区在线 | 国产清纯在线 | 国产xx在线 | 99精品在线看 | 91精品办公室少妇高潮对白 | 六月天综合网 | 日韩专区av | 99久久www | 久久国产午夜精品理论片最新版本 | 四虎在线观看视频 | 久久人人添人人爽添人人88v | 91成人短视频在线观看 | 在线看国产 | 在线观看免费视频你懂的 | 中文av一区二区 | 久久综合狠狠狠色97 | 久久99精品国产99久久6尤 | 国内精品久久久 | 欧美日韩p片 | 国产精品1区2区3区在线观看 | 亚洲一区二区三区毛片 | 99亚洲视频 | 天天插天天射 | 天天玩天天干 | 久草观看 | 麻豆视频免费 | 91亚洲国产| 黄色精品国产 | 国产美女久久 | 人人看人人草 | 国产香蕉av| 91视频免费观看 | 高清视频一区二区三区 | 在线观看av不卡 | 99久久精品久久久久久清纯 | 日韩av片免费在线观看 | 免费国产亚洲视频 | 中文字幕成人网 | 亚洲精品字幕在线 | 国产视频一区在线播放 | 狠狠操天天射 | av在线h | 99av国产精品欲麻豆 | 最新中文字幕在线播放 | 欧美色伊人 | 国产精品女同一区二区三区久久夜 | 香蕉视频最新网址 | 在线看一级片 | 国产成人精品在线观看 | 国产在线精品视频 | 一本—道久久a久久精品蜜桃 | 欧美色精品天天在线观看视频 | 久久高清国产视频 | 国产a级片免费观看 | 中文av在线免费观看 | 少妇bbw搡bbbb搡bbb | 99久久www免费 | 国产视频一区二区在线 | 国产一区二区久久精品 | 欧美日韩中文国产 | 97国产精品 | 精品国产一区二区三区四区vr | 婷婷激情五月综合 | 99视频免费观看 | 97在线观看免费视频 | 一二三区高清 | 国产精品1区2区3区在线观看 | 久久久久久久久久久久电影 | 精品国产一区二区三区av性色 | 91精品视频在线 | 黄色毛片观看 |