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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

串口IAP实验

發(fā)布時(shí)間:2023/12/16 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 串口IAP实验 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

IAP,即在應(yīng)用編程。很多單片機(jī)都支持這個(gè)功能,STM32也不例外。在之前的FLASH模擬EEPROM實(shí)驗(yàn)里面,我們學(xué)習(xí)了STM32的FLASH自編程,本章我們將結(jié)合FLASH自編程的知識(shí),通過STM32的串口實(shí)現(xiàn)一個(gè)簡單的IAP功能。fficeffice" />

48.1 IAP簡介???

IAP(In Application Programming)即在應(yīng)用編程,IAP是用戶自己的程序在運(yùn)行過程中對(duì)User Flash的部分區(qū)域進(jìn)行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預(yù)留的通信口對(duì)產(chǎn)品中的固件程序進(jìn)行更新升級(jí)。 通常實(shí)現(xiàn)IAP功能時(shí),即用戶程序運(yùn)行中作自身的更新操作,需要在設(shè)計(jì)固件程序時(shí)編寫兩個(gè)項(xiàng)目代碼,
第一個(gè)項(xiàng)目程序不執(zhí)行正常的功能操作,而只是通過某種通信方式(如USB、USART)接收程序或數(shù)據(jù),執(zhí)行對(duì)第二部分代碼的更新;第二個(gè)項(xiàng)目代碼才是真正的功能代碼。這兩部分項(xiàng)目代碼都同時(shí)燒錄在User Flash中,當(dāng)芯片上電后,首先是第一個(gè)項(xiàng)目代碼開始運(yùn)行,它作如下操作:   

1)檢查是否需要對(duì)第二部分代碼進(jìn)行更新   

2)如果不需要更新則轉(zhuǎn)到4)   

3)執(zhí)行更新操作   

4)跳轉(zhuǎn)到第二部分代碼執(zhí)行   

第一部分代碼必須通過其它手段,如JTAG或ISP燒入;第二部分代碼可以使用第一部分代碼IAP功能燒入,也可以和第一部分代碼一起燒入,以后需要程序更新是再通過第一部分IAP代碼更新。  

我們將第一個(gè)項(xiàng)目代碼稱之為Bootloader程序,第二個(gè)項(xiàng)目代碼稱之為APP程序,他們存放在STM32 FLASH的不同地址范圍,一般從最低地址區(qū)開始存放Bootloader,
緊跟其后的就是APP程序(注意,如果FLASH容量足夠,是可以設(shè)計(jì)很多APP程序的,本章我們只討論一個(gè)APP程序的情況)。這樣我們就是要實(shí)現(xiàn)2個(gè)程序:Bootloader和APP。 

STM32的APP程序不僅可以放到FLASH里面運(yùn)行,也可以放到SRAM里面運(yùn)行,本章,我們將制作兩個(gè)APP,一個(gè)用于FLASH運(yùn)行,一個(gè)用于SRAM運(yùn)行。

我們先來看看STM32正常的程序運(yùn)行流程,如圖48.1.1所示:

?



圖48.1.1 STM32正常運(yùn)行流程圖

?????? STM32的內(nèi)部閃存(FLASH)地址起始于0x08000000,一般情況下,程序文件就從此地址開始寫入。此外STM32是基于Cortex-M3內(nèi)核的微控制器,其內(nèi)部通過一張“中斷向量表”
來響應(yīng)中斷,程序啟動(dòng)后,將首先從“中斷向量表”取出復(fù)位中斷向量執(zhí)行復(fù)位中斷程序完成啟動(dòng),而這張“中斷向量表”的起始地址是0x08000004,當(dāng)中斷來臨,STM32的內(nèi)部硬
件機(jī)制亦會(huì)自動(dòng)將PC指針定位到“中斷向量表”處,并根據(jù)中斷源取出對(duì)應(yīng)的中斷向量執(zhí)行中斷服務(wù)程序。

?????? 在圖48.1.1中,STM32在復(fù)位后,先從0X08000004地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,如圖標(biāo)號(hào)①所示;在復(fù)位中斷服務(wù)程序執(zhí)行完之后,會(huì)跳轉(zhuǎn)到我們
的main函數(shù),如圖標(biāo)號(hào)②所示;而我們的main函數(shù)一般都是一個(gè)死循環(huán),在main函數(shù)執(zhí)行過程中,如果收到中斷請求(發(fā)生重中斷),此時(shí)STM32強(qiáng)制將PC指針指回中斷向量表處,如圖標(biāo)號(hào)③所示;然后,根據(jù)中斷源進(jìn)入相應(yīng)的中斷服務(wù)程序,如圖標(biāo)號(hào)④所示;在執(zhí)行完中斷服務(wù)程序以后,程序再次返回main函數(shù)執(zhí)行,如圖標(biāo)號(hào)⑤所示。

?????? 當(dāng)加入IAP程序之后,程序運(yùn)行流程如圖48.1.2所示:

?

?????? 在圖48.1.2所示流程中,STM32復(fù)位后,還是從0X08000004地址取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)到復(fù)位中斷服務(wù)程序,在運(yùn)行完復(fù)位中斷服務(wù)程序之后跳轉(zhuǎn)到IAP的main函數(shù),
如圖標(biāo)號(hào)①所示,此部分同圖48.1.1一樣;在執(zhí)行完IAP以后(即將新的APP代碼寫入STM32的FLASH,灰底部分。新程序的復(fù)位中斷向量起始地址為0X08000004+N+M),跳轉(zhuǎn)至
新寫入程序的復(fù)位向量表,取出新程序的復(fù)位中斷向量的地址,并跳轉(zhuǎn)執(zhí)行新程序的復(fù)位中斷服務(wù)程序,隨后跳轉(zhuǎn)至新程序的main函數(shù),如圖標(biāo)號(hào)②和③所示,同樣main函數(shù)為一個(gè)
死循環(huán),并且注意到此時(shí)STM32的FLASH,在不同位置上,共有兩個(gè)中斷向量表。

?????? 在main函數(shù)執(zhí)行過程中,如果CPU得到一個(gè)中斷請求,PC指針仍強(qiáng)制跳轉(zhuǎn)到地址0X08000004中斷向量表處,而不是新程序的中斷向量表,如圖標(biāo)號(hào)④所示;程序再根據(jù)我們設(shè)置
的中斷向量表偏移量,跳轉(zhuǎn)到對(duì)應(yīng)中斷源新的中斷服務(wù)程序中,如圖標(biāo)號(hào)⑤所示;在執(zhí)行完中斷服務(wù)程序后,程序返回main函數(shù)繼續(xù)運(yùn)行,如圖標(biāo)號(hào)⑥所示。

?????? 通過以上兩個(gè)過程的分析,我們知道IAP程序必須滿足兩個(gè)要求:

  • 新程序必須在IAP程序之后的某個(gè)偏移量為x的地址開始;
  • 必須將新程序的中斷向量表相應(yīng)的移動(dòng),移動(dòng)的偏移量為x;
  • 本章,我們有2個(gè)APP程序,一個(gè)為FLASH的APP,程序在FLASH中運(yùn)行,另外一個(gè)位SRAM的APP,程序運(yùn)行在SRAM中,圖48.1.2雖然是針對(duì)FLASH APP來說的,但是在

    SRAM里面運(yùn)行的過程和FLASH基本一致,只是需要設(shè)置向量表的地址為SRAM的地址。

    1.APP程序起始地址設(shè)置方法

    隨便打開一個(gè)之前的實(shí)例工程,點(diǎn)擊Options for TargetàTarget選項(xiàng)卡,如圖48.1.3所示:

    圖48.1.3 FLASH APP Target選項(xiàng)卡設(shè)置

    ?????? 默認(rèn)的條件下,圖中IROM1的起始地址(Start)一般為0X08000000,大小(Size)為0X80000,即從0X08000000開始的512K空間為我們的程序存儲(chǔ)(因?yàn)槲覀兊腟TM32F103ZET6的
    FLASH大小是512K)。而圖中,我們設(shè)置起始地址(Start)為0X08010000,即偏移量為0X10000(64K字節(jié)),因而,留給APP用的FLASH空間(Size)只有0X80000-0X10000=0X70000
    (448K字節(jié))大小了。設(shè)置好Start和Szie,就完成APP程序的起始地址設(shè)置。

    ?????? 這里的64K字節(jié),需要大家根據(jù)Bootloader程序大小進(jìn)行選擇,比如我們本章的Bootloader程序?yàn)?2K左右,理論上我們只需要確保APP起始地址在Bootloader之后,
    并且偏移量為0X200的倍數(shù)即可(相關(guān)知識(shí),請參考:http://www.openedv.com/posts/list/392.htm)。這里我們選擇64K(0X10000)字節(jié),留了一些余量,方便Bootloader以后的升級(jí)修改。

    ?????? 這是針對(duì)FLASH APP的起始地址設(shè)置,如果是SRAM APP,那么起始地址設(shè)置如圖48.1.4所示:

    ?

    圖48.1.4 SRAM APP Target選項(xiàng)卡設(shè)置

    ?????? 這里我們將IROM1的起始地址(Start)定義為:0X20001000,大小為0XA000(40K字節(jié)),即從地址0X20000000偏移0X1000開始,存放APP代碼。因?yàn)檎麄€(gè)STM32F103ZET6的
    SRAM大小為64K字節(jié),所以IRAM1(SRAM)的起始地址變?yōu)?X2000B000(0x20001000+0xA000=0X2000B000),大小只有0X5000(20K字節(jié))。這樣,整個(gè)STM32F103ZET6的SRAM
    分配情況為:最開始的4K給Bootloader程序使用,隨后的40K存放APP程序,最后20K,用作APP程序的內(nèi)存。這個(gè)分配關(guān)系大家可以根據(jù)自己的實(shí)際情況修改,不一定和我們這里的設(shè)
    置一模一樣,不過也需要注意,保證偏移量為0X200的倍數(shù)(我們這里為0X1000)。

    ?????? 2.中斷向量表的偏移量設(shè)置方法

    ?????? 之前我們講解過,在系統(tǒng)啟動(dòng)的時(shí)候,會(huì)首先調(diào)用systemInit函數(shù)初始化時(shí)鐘系統(tǒng),同時(shí)systemInit還完成了中斷向量表的設(shè)置,我們可以打開systemInit函數(shù),看看函數(shù)體的結(jié)尾處有這樣幾行代碼:

    #ifdef VECT_TAB_SRAM

    SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET;

    ?/* Vector Table Relocation in Internal SRAM. */

    #else

    SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;

    /* Vector Table Relocation in Internal FLASH. */

    #endif

    從代碼可以理解,VTOR寄存器存放的是中斷向量表的起始地址。默認(rèn)的情況VECT_TAB_SRAM是沒有定義,所以執(zhí)行SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; ?

    對(duì)于FLASH APP,我們設(shè)置為FLASH_BASE+偏移量0x10000,所以我們可以在FLASH APP的main函數(shù)最開頭處添加如下代碼實(shí)現(xiàn)中斷向量表的起始地址的重設(shè):

    SCB->VTOR = FLASH_BASE | 0x10000;

    ?????? 以上是FLASH APP的情況,當(dāng)使用SRAM APP的時(shí)候,我們設(shè)置起始地址為:SRAM_bASE+0x1000,同樣的方法,我們在SRAM APP的main函數(shù)最開始處,添加下面代碼:

    SCB->VTOR = SRAM_BASE | 0x1000;

    ?????? 這樣,我們就完成了中斷向量表偏移量的設(shè)置。

    通過以上兩個(gè)步驟的設(shè)置,我們就可以生成APP程序了,只要APP程序的FLASH和SRAM大小不超過我們的設(shè)置即可。不過MDK默認(rèn)生成的文件是.hex文件,并不方便我
    們用作IAP更新,我們希望生成的文件是.bin文件,這樣可以方便進(jìn)行IAP升級(jí)(至于為什么,請大家自行百度HEX和BIN文件的區(qū)別!)。這里我們通過MDK自帶的格式轉(zhuǎn)換
    工具fromelf.exe,來實(shí)現(xiàn).axf文件到.bin文件的轉(zhuǎn)換。該工具在MDK的安裝目錄\ARM\BIN40文件夾里面。

    fromelf.exe轉(zhuǎn)換工具的語法格式為:fromelf [options] input_file。其中options有很多選項(xiàng)可以設(shè)置,詳細(xì)使用請參考光盤《mdk如何生成bin文件.pdf》.

    本章,我們通過在MDK點(diǎn)擊Options for TargetàUser選項(xiàng)卡,在Run User Programs After Build/Rebuild 欄,勾選Run#1和DOS16,并寫入:D:\Keil3.80a\ARM\BIN40\fromelf.exe? --bin -o? ..\OBJ\TEST.bin ..\OBJ\TEST.axf ,如圖48.1.6所示:

    ?

    ?????? 通過這一步設(shè)置,我們就可以在MDK編譯成功之后,調(diào)用fromelf.exe(注意,我的MDK是安裝在D:\Keil3.80A文件夾下,如果你是安裝在其他目錄,請根據(jù)你
    自己的目錄修改fromelf.exe的路徑),根據(jù)當(dāng)前工程的TEST.axf(如果是其他的名字,請記住修改,這個(gè)文件存放在OBJ目錄下面,格式為xxx.axf),生成一個(gè)

    TEST.bin的文件。并存放在axf文件相同的目錄下,即工程的OBJ文件夾里面。在得到.bin文件之后,我們只需要將這個(gè)bin文件傳送給單片機(jī),即可執(zhí)行IAP升級(jí)。

    ?????? 最后再來APP程序的生成步驟:

  • 設(shè)置APP程序的起始地址和存儲(chǔ)空間大小
  • 對(duì)于在FLASH里面運(yùn)行的APP程序,我們可以按照圖48.1.3的設(shè)置。對(duì)于SRAM里面運(yùn)行的APP程序,我們可以參考圖48.1.4的設(shè)置。

  • 設(shè)置中斷向量表偏移量
  • 這一步按照上面講解,重新設(shè)置SCB->VTOR的值即可。

  • 設(shè)置編譯后運(yùn)行fromelf.exe,生成.bin文件.
  • 通過在User選項(xiàng)卡,設(shè)置編譯后調(diào)用fromelf.exe,根據(jù).axf文件生成.bin文件,用于IAP更新。?

    以上3個(gè)步驟,我們就可以得到一個(gè).bin的APP程序,通過Bootlader程序即可實(shí)現(xiàn)更新。

    大家可以打開我們光盤的兩個(gè)APP工程,熟悉這些設(shè)置。

    48.2 硬件設(shè)計(jì)

    本章實(shí)驗(yàn)(Bootloader部分)功能簡介:開機(jī)的時(shí)候先顯示提示信息,然后等待串口輸入接收APP程序(無校驗(yàn),一次性接收),在串口接收到APP程序
    之后,即可執(zhí)行IAP。如果是SRAM APP,通過按下KEY0即可執(zhí)行這個(gè)收到的SRAM APP程序。如果是FLASH APP,則需要先按下WK_UP按鍵,將串口接
    收到的APP程序存放到STM32的FLASH,之后再按KEY2既可以執(zhí)行這個(gè)FLASH APP程序。通過KEY1按鍵,可以手動(dòng)清除串口接收到的APP程序。DS0用于指示程序運(yùn)行狀態(tài)。

    本實(shí)驗(yàn)用到的資源如下:

  • 指示燈DS0
  • 四個(gè)按鍵(KEY0/KEY1/KEY2/WK_UP)
  • 串口
  • TFTLCD模塊
  • 這些用到的硬件,我們在之前都已經(jīng)介紹過,這里就不再介紹了。

    48.3 軟件設(shè)計(jì)

    本章,我們總共需要3個(gè)程序:1,Bootloader;2,FLASH APP;3)SRAM APP;其中,我們選擇之前做過的RTC實(shí)驗(yàn)(在第二十章介紹)來做為FLASH APP程序
    (起始地址為0X08010000),選擇觸摸屏實(shí)驗(yàn)(在第三十一章介紹)來做SRAM APP程序(起始地址為0X20001000)。Bootloader則是通過TFTLCD顯示實(shí)驗(yàn)(在第
    十八章介紹)修改得來。本章,關(guān)于SRAM APP和FLASH APP的生成比較簡單,我們就不細(xì)說,請大家結(jié)合光盤源碼,以及48.1節(jié)的介紹,自行理解。本章軟件設(shè)計(jì)僅針對(duì)Bootloader程序。

    打開本實(shí)驗(yàn)工程,可以看到我們增加了IAP組,在組下面添加了iap.c文件以及其頭文件isp.h。打開iap.c, 代碼如下:

    #include "sys.h"

    #include "delay.h"

    #include "usart.h"

    #include "stmflash.h"

    #include "iap.h"???? ?

    iapfun jump2app;

    u16 iapbuf[1024];

    //appxaddr:應(yīng)用程序的起始地址

    //appbuf:應(yīng)用程序CODE.

    //appsize:應(yīng)用程序大小(字節(jié)).

    void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 appsize)

    {

    ?????? u16 t;

    ?????? u16 i=0;

    ?????? u16 temp;

    ?????? u32 fwaddr=appxaddr;//當(dāng)前寫入的地址

    ?????? u8 *dfu=appbuf;

    ?????? for(t=0;t<appsize;t+=2)

    ?????? {??????????????????????????????????????? ???

    ????????????? temp=(u16)dfu[1]<<8;

    ????????????? temp+=(u16)dfu[0];????? ?

    ????????????? dfu+=2;//偏移2個(gè)字節(jié)

    ????????????? iapbuf[i++]=temp;? ???

    ????????????? if(i==1024)

    ????????????? {

    ???????????????????? i=0;

    ???????????????????? STMFLASH_Write(fwaddr,iapbuf,1024);???

    ???????????????????? fwaddr+=2048;//偏移2048? 16=2*8.所以要乘以2.

    ????????????? }

    ?????? }

    ?????? if(i)STMFLASH_Write(fwaddr,iapbuf,i);//將最后的一些內(nèi)容字節(jié)寫進(jìn)去.?

    }

    //跳轉(zhuǎn)到應(yīng)用程序段

    //appxaddr:用戶代碼起始地址.

    void iap_load_app(u32 appxaddr)

    {

    ?????? if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)????? //檢查棧頂?shù)刂肥欠窈戏?

    ?????? {

    ????????????? jump2app=(iapfun)*(vu32*)(appxaddr+4);????????

    //用戶代碼區(qū)第二個(gè)字為程序開始地址(復(fù)位地址)?????????

    ????????????? MSR_MSP(*(vu32*)appxaddr);???????????????????????????????

    //初始化APP堆棧指針(用戶代碼區(qū)的第一個(gè)字用于存放棧頂?shù)刂?

    ????????????? jump2app();??? //跳轉(zhuǎn)到APP.

    ?????? }

    }

    ?????? 該文件總共只有2個(gè)函數(shù),其中,iap_write_appbin函數(shù)用于將存放在串口接收buf里面的APP程序?qū)懭氲紽LASH。iap_load_app函數(shù),則用于跳轉(zhuǎn)到APP程序運(yùn)行,
    其參數(shù)appxaddr為APP程序的起始地址,程序先判斷棧頂?shù)刂肥欠窈戏?#xff0c;在得到合法的棧頂?shù)刂泛?#xff0c;通過MSR_MSP函數(shù)(該函數(shù)在sys.c文件)設(shè)置棧頂?shù)刂?#xff0c;
    最后通過一個(gè)虛擬的函數(shù)(jump2app)跳轉(zhuǎn)到APP程序執(zhí)行代碼,實(shí)現(xiàn)IAPàAPP的跳轉(zhuǎn)。

    ?????? 打開iap.h代碼如下:

    #ifndef __IAP_H__

    #define __IAP_H__

    #include "sys.h"???

    typedef? void (*iapfun)(void);???? //定義一個(gè)函數(shù)類型的參數(shù).??

    #define FLASH_APP1_ADDR??????????? 0x080010000? ????

    //第一個(gè)應(yīng)用程序起始地址(存放在FLASH)

    //保留0X08000000~0X0800FFFF的空間為Bootloader使用?? ??

    void iap_load_app(u32 appxaddr);???????????????????????????????????????????????? //跳轉(zhuǎn)到APP程序執(zhí)行

    void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 applen);?? //在指定地址開始,寫入bin

    #endif

    ?????? 這部分代碼比較簡單,。本章,我們是通過串口接收APP程序的,我們將usart.c和usart.h做了稍微修改,在usart.h中,我們定義USART_REC_LEN為55K字節(jié),
    也就是串口最大一次可以接收55K字節(jié)的數(shù)據(jù),這也是本Bootloader程序所能接收的最大APP程序大小。然后新增一個(gè)USART_RX_CNT的變量,用于記錄接收到
    的文件大小,而USART_RX_STA不再使用。打開usart.c,可以看到我們修改USART1_IRQHandler部分代碼如下:

    //串口1中斷服務(wù)程序

    //注意,讀取USARTx->SR能避免莫名其妙的錯(cuò)誤?? ????

    u8 USART_RX_BUF[USART_REC_LEN] __attribute__ ((at(0X20001000)));

    //接收緩沖,最大USART_REC_LEN個(gè)字節(jié),起始地址為0X20001000.???

    //接收狀態(tài)

    //bit15, 接收完成標(biāo)志

    //bit14, 接收到0x0d

    //bit13~0,???? 接收到的有效字節(jié)數(shù)目

    u16 USART_RX_STA=0;?????? ?????? //接收狀態(tài)標(biāo)記???? ?

    u16 USART_RX_CNT=0;?????????????????? //接收的字節(jié)數(shù)???? ?

    void USART1_IRQHandler(void)

    {

    ?????? u8 res;????

    #ifdef OS_CRITICAL_METHOD

    //如果OS_CRITICAL_METHOD定義了,說明使用ucosII了.

    ?????? OSIntEnter();???

    #endif

    ?????? if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到數(shù)據(jù)

    ?????? {????

    ????????????? res=USART_ReceiveData(USART1);

    ????????????? if(USART_RX_CNT<USART_REC_LEN)

    ????????????? {

    ???????????????????? USART_RX_BUF[USART_RX_CNT]=res;

    ???????????????????? USART_RX_CNT++;????????????????? ???????????????????????????????????????????????????????????? ?????

    ????????????? }

    ?????? }

    #ifdef OS_CRITICAL_METHOD ?????

    //如果OS_CRITICAL_METHOD定義了,說明使用ucosII了.

    ?????? OSIntExit();? ???????????????????????????????????????????????????????????????????????????? ?

    #endif

    }

    ?????? 這里,我們指定USART_RX_BUF的地址是從0X20001000開始,該地址也就是SRAM APP程序的起始地址!然后在USART1_IRQHandler函數(shù)里面,將串口發(fā)
    送過來的數(shù)據(jù),全部接收到USART_RX_BUF,并通過USART_RX_CNT計(jì)數(shù)。代碼比較簡單,我們就不多說了。

    最后我們看看main函數(shù)如下:

    int main(void)

    {???????????

    ?????? u8 t,key;

    ?????? u16 oldcount=0;???? //老的串口接收數(shù)據(jù)值

    ?????? u16 applenth=0;???? //接收到的app代碼長度

    ?????? u8 clearflag=0;

    ?????? uart_init(256000);? ??? //串口初始化為256000

    ?????? delay_init();??? ?? ? ????? //延時(shí)初始化

    ?????? LCD_Init();??? ??????? //液晶初始化

    ?????? LED_Init();?????????? ? ??? //初始化與LED連接的硬件接口

    ????? KEY_Init();????????????????? //按鍵初始化 ??????

    POINT_COLOR=RED;//設(shè)置字體為紅色

    ?????? LCD_ShowString(60,50,200,16,16,"Warship STM32");????

    ?????? LCD_ShowString(60,70,200,16,16,"IAP TEST");?????

    ?????? LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");

    ?????? LCD_ShowString(60,110,200,16,16,"2012/9/24");?

    ?????? LCD_ShowString(60,130,200,16,16,"WK_UP:Copy APP2FLASH");

    ?????? LCD_ShowString(60,150,200,16,16,"KEY1:Erase SRAM APP");

    ?????? LCD_ShowString(60,170,200,16,16,"KEY0:Run SRAM APP");

    ?????? LCD_ShowString(60,190,200,16,16,"KEY2:Run FLASH APP");

    ?????? POINT_COLOR=BLUE;

    ?????? //顯示提示信息

    ?????? POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色 ?

    ?????? while(1)

    ?????? {

    ?????? ????? if(USART_RX_CNT)

    ????????????? {

    ???????????????????? if(oldcount==USART_RX_CNT)

    //新周期內(nèi),沒有收到任何數(shù)據(jù),認(rèn)為本次數(shù)據(jù)接收完成.

    ???????????????????? {

    ??????????????????????????? applenth=USART_RX_CNT;

    ??????????????????????????? oldcount=0;

    ??????????????????????????? USART_RX_CNT=0;

    ??????????????????????????? printf("用戶程序接收完成!\r\n");

    ??????????????????????????? printf("代碼長度:%dBytes\r\n",applenth);

    ???????????????????? }else oldcount=USART_RX_CNT;????????????????????

    ????????????? }

    ????????????? t++; delay_ms(10);

    ????????????? if(t==30)

    ????????????? {

    ???????????????????? LED0=!LED0; t=0;

    ???????????????????? if(clearflag)

    ???????????????????? {

    ??????????????????????????? clearflag--;

    ??????????????????????????? if(clearflag==0)LCD_Fill(60,210,240,210+16,WHITE);//清除顯示

    ???????????????????? }

    ????????????? }???? ? ??? ?

    ????????????? key=KEY_Scan(0);

    ????????????? if(key==KEY_UP)

    ????????????? {

    ???????????????????? if(applenth)

    ???????????????????? {

    ??????????????????????????? printf("開始更新固件...\r\n");?????

    ??????????????????????????? LCD_ShowString(60,210,200,16,16,"Copying APP2FLASH...");

    ?????????????????????????? if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)

    //判斷是否為0X08XXXXXX.

    ??????????????????????????? {???? ??????

    iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,

    applenth); //更新FLASH代碼??

    ?????????????????????????????????? LCD_ShowString(60,210,200,16,16,"Copy APP Successed!!");

    ?????????????????????????????????? printf("固件更新完成!\r\n");??????

    ??????????????????????????? }else

    ??????????????????????????? {

    ?????????????????????????????????? LCD_ShowString(60,210,200,16,16,"Illegal FLASH APP!? ");?????? ??

    ?????????????????????????????????? printf("非FLASH應(yīng)用程序!\r\n");

    ??????????????????????????? }

    ??????????????????? }else

    ???????????????????? {

    ??????????????????????????? printf("沒有可以更新的固件!\r\n");

    ??????????????????????????? LCD_ShowString(60,210,200,16,16,"No APP!");

    ???????????????????? }

    ???????????????????? clearflag=7;//標(biāo)志更新了顯示,并且設(shè)置7*300ms后清除顯示??????? ?

    ????????????? }

    ????????????? if(key==KEY_DOWN)

    ????????????? {

    ???????????????????? if(applenth)

    ???????????????????? {?????????????????????????????????????????????????????????????????????????????????????????????????????????????

    ??????????????????????????? printf("固件清除完成!\r\n");???

    ??????????????????????????? LCD_ShowString(60,210,200,16,16,"APP Erase Successed!");

    ??????????????????????????? applenth=0;

    ???????????????????? }else

    ???????????????????? {

    ??????????????????????????? printf("沒有可以清除的固件!\r\n");

    ??????????????????????????? LCD_ShowString(60,210,200,16,16,"No APP!");

    ???????????????????? }

    ???????????????????? clearflag=7;//標(biāo)志更新了顯示,并且設(shè)置7*300ms后清除顯示????????????????????????????????????????????????????????

    ????????????? }

    ????????????? if(key==KEY_LEFT)

    ????????????? {

    ???????????????????? printf("開始執(zhí)行FLASH用戶代碼!!\r\n");

    ???????????????????? if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)

    //判斷是否為0X08XXXXXX.

    ???????????????????? {????

    ??????????????????????????? iap_load_app(FLASH_APP1_ADDR);//執(zhí)行FLASH APP代碼

    ???????????????????? }else

    ???????????????????? {

    ??????????????????????????? printf("非FLASH應(yīng)用程序,無法執(zhí)行!\r\n");

    ??????????????????????????? LCD_ShowString(60,210,200,16,16,"Illegal FLASH APP!");??? ??

    ???????????????????? }????????????????????????????????????????????????????????????

    ???????????????????? clearflag=7;//標(biāo)志更新了顯示,并且設(shè)置7*300ms后清除顯示 ?

    ????????????? }

    ????????????? if(key==KEY_RIGHT)

    ????????????? {

    ???????????????????? printf("開始執(zhí)行SRAM用戶代碼!!\r\n");

    ???????????????????? if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x20000000)

    //判斷是否為0X20XXXXXX.

    ???????????????????? {????

    ??????????????????????????? iap_load_app(0X20001000);//SRAM地址

    ???????????????????? }else

    ???????????????????? {

    ??????????????????????????? printf("非SRAM應(yīng)用程序,無法執(zhí)行!\r\n");

    ??????????????????????????? LCD_ShowString(60,210,200,16,16,"Illegal SRAM APP!");???? ??

    ???????????????????? }????????????????????????????????????????????????????????????

    ???????????????????? clearflag=7;//標(biāo)志更新了顯示,并且設(shè)置7*300ms后清除顯示

    ????????????? }????????????????????????? ??

    ????????????? ?

    ?????? }?? ?????? ???

    }

    ?????? 該段代碼,實(shí)現(xiàn)了串口數(shù)據(jù)處理,以及IAP更新和跳轉(zhuǎn)等各項(xiàng)操作。Bootloader程序就設(shè)計(jì)完成了,但是一般要求bootloader程序越小越好(給APP省空間嘛),
    所以,本章我們把一些不需要用到的.c文件全部去掉,最后得到工程截圖如圖48.3.1所示:

    ?

    ?

    圖48.3.1 Bootloader 工程截圖

    ?????? 從上圖可以看出,雖然去掉了一些不用的.c文件,但是Bootloader大小還是有22K左右,比較大,主要原因是液晶驅(qū)動(dòng)和printf占用了比較多的flash,如果大家
    想進(jìn)一步刪減,可以去掉LCD顯示和printf等,不過我們在本章為了演示效果,所以保留了這些代碼。

    ????? 至此,本實(shí)驗(yàn)的軟件設(shè)計(jì)部分結(jié)束。

    ?????? FLASH APP和SRAM APP兩部分代碼,我們在實(shí)驗(yàn)?zāi)夸浵绿峁┝藘蓚€(gè)實(shí)驗(yàn)供大家參考,不過要提醒大家,根據(jù)我們的設(shè)置,FLASH APP的起始地址必須是0X08010000,而SRAM APP的起始地址必須是0X20001000。

    48.4 下載驗(yàn)證

    在代碼編譯成功之后,我們下載代碼到ALIENTEK戰(zhàn)艦STM32開發(fā)板上,得到,如圖48.4.1所示:

    ?

    圖48.4.1 IAP程序界面

    此時(shí),我們可以通過串口,發(fā)送FLASH APP或者SRAM APP到戰(zhàn)艦STM32開發(fā)板,如圖48.4.2所示:

    圖48.4.2 串口發(fā)送APP程序界面

    ?????? 先用串口調(diào)試助手的打開文件按鈕(如圖標(biāo)號(hào)1所示),找到APP程序生成的.bin文件,然后設(shè)置波特率為256000(為了提高速度,Bootloader程序?qū)⒉ㄌ芈时辉O(shè)置為256000了),
    最后點(diǎn)擊發(fā)送文件(圖中標(biāo)號(hào)3所示),將.bin文件發(fā)送給戰(zhàn)艦STM32開發(fā)板。

    ?????? 在收到APP程序之后,我們就可以通過KEY0/KEY2運(yùn)行這個(gè)APP程序了(如果是FLASH APP,則先需要通過WK_UP將其存入對(duì)應(yīng)

    總結(jié)

    以上是生活随笔為你收集整理的串口IAP实验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    免费在线观看午夜视频 | 欧美激情综合色 | 久草青青在线观看 | 丁香综合五月 | 久久久久久久久亚洲精品 | 欧美在线日韩在线 | 黄色网址a | 国产精品久久久久久久久蜜臀 | 人人澡人| 色com网| 狠狠躁日日躁狂躁夜夜躁 | 成av人电影 | 精品在线视频一区 | 欧美大片在线看免费观看 | 亚洲成人动漫在线观看 | 91人人网| 成人网看片 | 成人av高清在线观看 | avwww在线观看 | 日韩高清一区二区 | 国产99久久| 国产成人777777 | 色噜噜狠狠狠狠色综合久不 | 中文字幕观看视频 | 狠狠色狠狠综合久久 | 五月天婷亚洲天综合网精品偷 | 日韩午夜一级片 | 国产精品久久久久久模特 | 国产拍在线 | 色在线免费 | 国产成人精品一区二三区 | 天天操天天操天天 | 国产小视频在线观看免费 | 久久久久区 | 亚洲综合在线五月天 | 国产精品网在线观看 | 国产成人在线播放 | 中文字幕网站视频在线 | 久久久国产高清 | 日韩免费福利 | 成人福利在线 | 欧美美女激情18p | 69国产在线观看 | 精品国产片| 最近中文字幕mv | 久久国产精品一区二区三区四区 | a天堂免费 | 91电影福利 | 伊人超碰在线 | 人人干人人搞 | 久久国产精品免费一区二区三区 | 欧美一区二区三区在线 | 肉色欧美久久久久久久免费看 | 国产免费中文字幕 | 久草免费在线视频 | 国产手机视频在线播放 | 亚洲精品国产精品乱码不99热 | 午夜精品久久久久久久久久久久 | 国产精品久久久久久久久软件 | 久久综合狠狠综合久久狠狠色综合 | 亚洲日本一区二区在线 | 色综合久久88色综合天天人守婷 | 中文国产字幕在线观看 | 天天插天天 | 亚洲春色奇米影视 | 91色视频 | a视频在线观看免费 | 最近av在线| 国产精品电影一区二区 | 国产精品一区二区麻豆 | 国产中文在线字幕 | 五月天久久婷婷 | 久久精品欧美一区 | 天天色天天草天天射 | 欧美一级片免费播放 | 日本二区三区在线 | 97夜夜澡人人双人人人喊 | 97精品国产97久久久久久免费 | 日本在线视频一区二区三区 | 不卡精品视频 | 久久午夜精品影院一区 | 97精品电影院| 国产伦精品一区二区三区四区视频 | 久久99国产精品久久 | www.777奇米 | 精品一二 | 91最新国产 | 国产一区二区在线免费播放 | 中文在线8资源库 | 亚洲精品美女 | 99热国产在线中文 | 97精品国产97久久久久久春色 | 91九色网址 | 97超碰精品 | 婷婷色在线观看 | 一区在线观看 | 欧美精品小视频 | 在线亚洲日本 | 97在线观看免费高清完整版在线观看 | 天天干,夜夜操 | 国产裸体视频网站 | 中文字幕在线看视频 | 91在线看视频免费 | 成人久久视频 | 69国产盗摄一区二区三区五区 | 亚洲天堂网视频 | av网站在线观看播放 | 午夜色站| 亚洲精品在线视频 | 久久久久高清毛片一级 | 午夜色站| 在线视频手机国产 | 国产黄色电影 | 日韩欧美aaa | 国产成人精品在线观看 | 欧美另类一二三四区 | 日韩视频在线不卡 | 黄色网www | 天天综合91| 国产精品片| 免费看片网址 | 成人小视频在线 | 全久久久久久久久久久电影 | 国产精品久久久久久久久久直播 | 免费福利在线观看 | 久久精品一区二区三区视频 | 丝袜av一区 | 在线免费观看一区二区三区 | 日韩中文在线观看 | 国产夫妻性生活自拍 | 国产免费观看久久黄 | 亚洲视频免费视频 | 麻豆成人在线观看 | 日韩无在线 | 狠狠的操你 | av三级av| 一本一本久久aa综合精品 | 美女视频黄色免费 | 欧美9999 | 中文字幕一区二区三区四区久久 | 69久久夜色精品国产69 | 69国产成人综合久久精品欧美 | 不卡av在线免费观看 | 中文在线资源 | 在线视频精品 | 亚洲综合一区二区精品导航 | 久久99久久99精品免观看软件 | 精品日韩视频 | 高清日韩一区二区 | 黄色视屏在线免费观看 | 9ⅰ精品久久久久久久久中文字幕 | adc在线观看 | 国产精品美女久久久 | 亚洲国产一二三 | 视频高清 | 国产精品视频资源 | 亚洲少妇天堂 | 国产不卡在线 | 亚洲精品国精品久久99热一 | 国产精品一区二区在线观看 | 亚洲jizzjizz日本少妇 | 国产字幕在线看 | 久久久久久国产精品亚洲78 | 国产亚洲精品久久久久动 | 欧洲黄色片 | 69精品视频在线观看 | 久久97久久97精品免视看 | 中文字幕日韩伦理 | 国产一区二区视频在线播放 | 午夜精品一区二区三区免费 | 成人免费xyz网站 | 狠狠色丁香婷婷综合视频 | 国产成人333kkk | 成人性生交大片免费观看网站 | 伊人午夜 | 日日碰狠狠躁久久躁综合网 | 欧美xxxxx在线视频 | 国产成人在线看 | 欧美精品在线观看 | 免费成人在线观看视频 | 久久永久视频 | 精品一区二区三区电影 | 天天射射天天 | 丁香 久久 综合 | 日韩免费视频观看 | 成人va视频 | 中文在线字幕免费观 | 亚洲精品在线免费观看视频 | 91精品视频免费看 | 久久国产精品99国产精 | 中文在线免费一区三区 | 夜夜躁日日躁 | www.天天射 | 亚洲国产精品久久久 | 欧美另类一二三四区 | 中文字幕欧美三区 | 看全黄大色黄大片 | 午夜影院一级片 | 88av网站 | 天天干天天射天天插 | 99在线免费视频 | 国产成人精品一区二区在线观看 | 国产一区二区高清视频 | 欧美一级免费黄色片 | 毛片二区| 中文理论片 | 青青啪 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产精品中文在线 | 国产高清精 | 正在播放国产精品 | 美女视频永久黄网站免费观看国产 | 日日爱影视 | 欧美性免费 | 国产手机av在线 | 国产精品乱码久久久久 | 久久夜色精品国产欧美一区麻豆 | 99精品欧美一区二区蜜桃免费 | 国产一二三四在线视频 | 成人午夜影视 | 亚洲黄色免费在线看 | 免费久久视频 | 亚洲国产精品成人va在线观看 | 亚洲视频专区在线 | 久久久精品二区 | 国产精品女人久久久久久 | www.午夜| 高清视频一区 | 玖玖精品在线 | 91精品1区| 欧美一区在线看 | 亚洲欧洲精品一区二区 | 人人澡澡人人 | 亚洲激色 | 天天激情天天干 | 国产精品高清在线观看 | 国产精品入口麻豆www | 在线观看中文字幕2021 | 精品亚洲网 | 丝袜美腿亚洲综合 | 免费日韩在线 | 国产精品久久久久久欧美 | 日日躁夜夜躁xxxxaaaa | 激情视频网页 | 精品国产中文字幕 | 国产精品系列在线观看 | 天天色草 | 国产精品6999成人免费视频 | 丝袜美腿亚洲 | 中文字幕乱码日本亚洲一区二区 | 久久久婷 | 国产乱对白刺激视频在线观看女王 | 欧美成人免费在线 | 精品久久久久久久久久久院品网 | 久草a在线| 日日爱999| 91免费网| 99在线热播精品免费99热 | 久久久精品视频成人 | 亚洲v精品 | 免费欧美高清视频 | 韩国av免费观看 | 97国产小视频 | 色天天综合网 | 精品国产成人 | 欧美十八 | 日韩在线电影观看 | 日韩在线观看av | 国产精品成人品 | 69av视频在线观看 | 久久99精品久久久久久久久久久久 | 激情五月六月婷婷 | www.久久色 | 亚洲高清不卡av | 91视频 - 88av | 国产视频欧美视频 | 一区在线观看视频 | 91免费国产在线观看 | 不卡在线一区 | 亚洲日本国产精品 | 欧美日韩高清在线一区 | 亚洲精品视频在线观看免费 | 国产成人精品一区二区在线观看 | 午夜12点 | 综合网久久 | 欧美精品999| 久色网 | 国产精品丝袜 | 久久再线视频 | 在线视频观看你懂的 | 久久久午夜精品福利内容 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 9999在线观看| 麻豆视频成人 | 国产又粗又猛又色又黄网站 | 激情图片区 | 久久手机免费视频 | 超碰国产在线 | 69国产精品视频免费观看 | 草久在线视频 | 久久综合中文字幕 | 狠狠狠狠狠狠狠狠 | 美女视频永久黄网站免费观看国产 | 久久五月婷婷丁香社区 | 精品视频免费 | 欧美 国产 视频 | 国产免费区 | 日韩精品一区二区在线视频 | 五月天丁香亚洲 | 国产精品一区二区免费视频 | 精品久久久久久久久久久久久 | 亚洲精品乱码久久久久久蜜桃不爽 | av字幕在线 | 久久国产电影 | 国产裸体视频网站 | 九九综合九九综合 | 色吊丝av中文字幕 | 久久尤物电影视频在线观看 | 久久国产午夜精品理论片最新版本 | 国产在线观看国语版免费 | 免费a视频在线观看 | 久久精品久久国产 | 日本不卡一区二区 | 91视频下载 | 日韩精品大片 | 色综久久| 久草精品视频 | 韩国视频一区二区三区 | 久久99国产精品二区护士 | 日韩有码在线播放 | 亚洲精品国偷自产在线99热 | 福利av影院| 日韩av手机在线看 | 久久精品一区二区三区视频 | 国产精品美女久久久久久久 | 国产高清精 | 色婷婷丁香| 69精品久久 | 国产精品女同一区二区三区久久夜 | 人人草在线视频 | 天天视频亚洲 | 精品日韩在线一区 | 玖玖在线资源 | 国产成人精品一区二区三区免费 | 国产在线永久 | www..com毛片| 日韩高清三区 | 91插插插免费视频 | 99视频在线免费看 | 黄色av播放 | 久久免费电影 | 国产精品欧美激情在线观看 | 欧美大片aaa | 亚洲老妇xxxxxx | 国产精品久久在线观看 | 香蕉在线播放 | 在线观看国产 | 久久精品国产v日韩v亚洲 | 国产一区在线免费 | 字幕网av | 久久99精品国产99久久 | 国产午夜小视频 | 午夜电影中文字幕 | 91伊人久久大香线蕉蜜芽人口 | 国产手机精品视频 | 日韩在线第一 | 久久国产精品成人免费浪潮 | 91女子私密保健养生少妇 | 久久激情日本aⅴ | 国产亚洲成人网 | 97成人超碰| 国产aaa免费视频 | 久久美女高清视频 | 99精品在线看 | 精品一区欧美 | 久久久久久久久久久久久影院 | 精品国偷自产在线 | 成人蜜桃视频 | 精品国偷自产国产一区 | 999日韩| 97在线观看免费视频 | 亚洲综合网站在线观看 | 日韩在线观看你懂得 | 午夜视频一区二区三区 | 激情五月看片 | 成人av直播 | 亚洲欧美在线观看视频 | 18pao国产成视频永久免费 | 成人在线观看免费视频 | 色综合久久综合中文综合网 | 天天拍天天干 | 免费观看午夜视频 | 99精品在线免费在线观看 | 99精品在线免费 | 91爱爱视频| 久久少妇| 日本bbbb摸bbbb| 免费a网站 | 亚洲一区二区视频在线 | 欧美性粗大hdvideo | 六月色婷婷 | 欧美日韩国产二区三区 | 91探花在线视频 | 开心激情久久 | 亚洲欧美日韩精品一区二区 | 久久久久免费精品国产 | 日韩午夜剧场 | 亚洲精品久久久久中文字幕m男 | 粉嫩aⅴ一区二区三区 | 精品夜夜嗨av一区二区三区 | 超碰人人99| 精品国产一区二区三区在线观看 | 免费视频区 | 美女视频又黄又免费 | 免费看国产曰批40分钟 | 麻豆视频在线观看 | 免费观看av网站 | 欧美性色19p | 伊人五月婷 | 不卡av电影在线观看 | 五月婷婷在线观看 | 久久男人免费视频 | 欧美国产精品一区二区 | 亚洲精品av在线 | 国产精品一区二区三区视频免费 | www.国产在线| 日韩在线色 | 激情久久五月 | 美女视频黄免费的久久 | 免费视频在线观看网站 | 精品网站999www | 亚洲电影网站 | 天天干天天做天天爱 | 少妇自拍av | 91精品啪啪 | 人人精品 | av一二三区 | 亚欧洲精品视频在线观看 | 亚洲成熟女人毛片在线 | 日韩伦理一区二区三区av在线 | 亚洲午夜久久久久 | 成人黄在线观看 | 亚洲最大色 | www在线观看视频 | 成人小视频在线观看免费 | 成年人app网址 | 婷婷网站天天婷婷网站 | 日本护士撒尿xxxx18 | 国产日韩精品在线观看 | 一区二区三区在线观看免费视频 | 91精品久久久久 | 天堂av免费看 | www.亚洲黄色| 成人久久网 | 久久成年人网站 | 婷五月天激情 | 欧美性色综合网 | 99久久婷婷国产一区二区三区 | 91最新视频在线观看 | 久久久国产精品亚洲一区 | 欧美aaa一级| 国产小视频在线免费观看视频 | 精品主播网红福利资源观看 | 亚洲黄色免费电影 | 婷婷色网| 97国产视频 | 黄色小说在线免费观看 | 久久久麻豆精品一区二区 | 成人在线观看影院 | 啪啪小视频网站 | 天堂av在线网 | 97成人精品视频在线观看 | 成人一区二区在线 | 婷婷久久一区二区三区 | 国产精品久久久久久久久搜平片 | 国内久久精品视频 | 亚洲伊人天堂 | 在线一区二区三区 | 成人av在线资源 | 久久久综合色 | 精品国产乱码久久久久久三级人 | 在线免费视频你懂的 | 久久五月精品 | av在线观 | 久久婷婷国产色一区二区三区 | 日韩精品免费专区 | 久久久黄视频 | 亚洲2019精品| 午夜精品一区二区三区可下载 | a在线一区 | 国语久久 | 天堂网一区二区三区 | 超碰在线98 | 欧美综合色在线图区 | 欧美有色 | 国产精品v a免费视频 | 免费黄色a网站 | 久久视频这里有久久精品视频11 | 中文字幕永久在线 | 六月丁香社区 | 国产黄色特级片 | 国产免费亚洲 | 精品视频久久 | 亚洲精品视频在线观看网站 | 日韩国产精品毛片 | 韩国av三级 | 国产香蕉97碰碰碰视频在线观看 | 久草在线资源网 | 激情欧美一区二区免费视频 | 蜜臀久久99精品久久久无需会员 | 成人毛片在线观看 | 欧美日韩一级久久久久久免费看 | 一区二区 不卡 | 色中色资源站 | 成人亚洲精品国产www | 欧美精品乱码久久久久 | 911久久| 免费91在线观看 | 国产小视频你懂的 | 日批视频| 亚洲精品免费在线观看视频 | 色婷婷激情综合 | 99精品热视频 | 91丨九色丨高潮 | 四虎在线视频 | 成人久久国产 | 91麻豆精品国产自产 | 国产91在线观 | 国产精品99久久久久久小说 | 婷婷丁香六月 | 黄色大全在线观看 | 亚洲综合网站在线观看 | 国产精品网红直播 | 日本久久精品视频 | 天天视频色版 | 国产色中涩 | 精品视频在线看 | 天天射天天操天天色 | 日韩在线看片 | 天天操天天摸天天射 | 精品欧美一区二区精品久久 | 日韩免费网址 | 天天插天天干天天操 | 三级午夜片 | www.久久色 | 五月婷综合网 | 欧洲亚洲激情 | 18国产精品福利片久久婷 | 91九色在线| 天天色天天草天天射 | 亚洲最大av | 国产精品久久久久久久久免费看 | 国产午夜精品一区 | 中国精品少妇 | 在线免费观看不卡av | 蜜臀av性久久久久av蜜臀妖精 | 麻豆视频免费观看 | 国产一级视频 | 久久久国产精品网站 | 久久艹国产 | 亚洲丝袜中文 | 久在线观看视频 | 欧美日产一区 | 右手影院亚洲欧美 | 激情五月六月婷婷 | 中文资源在线观看 | 97看片吧| 美女黄频在线观看 | 日韩精品一区二区在线观看视频 | 99视频在线精品国自产拍免费观看 | av观看免费在线 | 91私密视频 | 国语久久 | 69绿帽绿奴3pvideos | 亚洲精品在线观看网站 | 午夜影视剧场 | 久草免费手机视频 | av在线看网站 | 日本三级大片 | 又污又黄的网站 | 日韩电影在线一区二区 | 97超碰香蕉| 中文字幕免费高 | 精品国产1区 | 欧美 日韩 国产 成人 在线 | 久久永久视频 | 国产精品一区二区吃奶在线观看 | 麻豆一级视频 | 国产一级高清 | 久久免费精品一区二区三区 | 国产精品久久久网站 | 一区 二区电影免费在线观看 | 中文字幕中文中文字幕 | 国产一二区免费视频 | 免费观看国产精品视频 | 欧美精品久久天天躁 | 97av色 | 中文字幕av在线 | 免费日韩一区二区 | 五月婷婷深开心 | 最近日本中文字幕a | 三级小视频在线观看 | 久久av影院 | 日韩二区在线 | 91在线在线观看 | 亚洲自拍偷拍色图 | 成人av电影在线播放 | 日韩剧 | a在线观看视频 | 黄色网址av | 日韩精品电影在线播放 | 亚洲国产黄色片 | 香蕉视频在线观看免费 | 久久久久亚洲精品国产 | 四虎免费av | 天堂va在线高清一区 | 日韩精品视频免费在线观看 | 欧美一级在线观看视频 | 国产精品一区二区在线 | 在线观看www视频 | 91在线观看视频网站 | 国产一二三区在线观看 | 久热色超碰 | 青青河边草手机免费 | 精品久久久久一区二区国产 | 美女网站在线看 | 欧美另类老妇 | 99视频黄 | 亚洲另类视频在线观看 | 日韩电影一区二区在线 | 黄色高清视频在线观看 | 91xav| 国内精品免费 | 国产99久久精品一区二区永久免费 | a极黄色片 | 日韩视频图片 | 黄色视屏在线免费观看 | 久久久久高清 | 天天综合导航 | 韩国av免费观看 | 久av电影| 97超级碰碰 | 成人网色| 高清不卡免费视频 | 99热只有精品在线观看 | 国产高清视频在线播放一区 | 九色91av | 久久精品99久久久久久 | 亚洲国产mv | 麻豆国产精品视频 | 99精品欧美一区二区三区 | 久久久免费精品视频 | 天天操天天干天天摸 | 日韩欧美在线综合网 | 在线免费观看视频你懂的 | 亚洲精品永久免费视频 | 国产又粗又长的视频 | 玖玖玖精品 | 国产午夜一级毛片 | 久久久伦理 | 亚洲春色综合另类校园电影 | 亚洲无吗天堂 | 黄色高清视频在线观看 | 国产亚洲人 | 高清av在线免费观看 | 久操中文字幕在线观看 | 91成人在线视频 | 午夜日b视频 | 超碰99人人 | 九九欧美视频 | 在线天堂日本 | 日韩免费在线观看 | av丝袜在线 | 久久久久久久久久伊人 | 精品高清美女精品国产区 | 蜜臀aⅴ国产精品久久久国产 | 免费av影视| 亚洲精品自在在线观看 | 久久免费av电影 | 欧美91精品 | 欧美精品一二 | 一区二区不卡视频在线观看 | av大全免费在线观看 | 色多多视频在线 | 国产亚洲片| 精品嫩模福利一区二区蜜臀 | 在线亚州 | 国产麻豆果冻传媒在线观看 | a一片一级| 久久香蕉国产 | 中国一级片在线播放 | 天天综合网 天天综合色 | 亚洲国产三级在线观看 | 久久首页 | 欧美性生活大片 | 99热这里是精品 | 在线你懂的视频 | 精品欧美小视频在线观看 | 在线播放国产一区二区三区 | 中文字幕超清在线免费 | 国产精品黄色影片导航在线观看 | 久久久精品福利视频 | 91av免费看 | 18国产精品福利片久久婷 | 在线免费成人 | 久草在线这里只有精品 | 欧美色图视频一区 | 国语自产偷拍精品视频偷 | 欧美综合久久久 | 四虎免费在线观看视频 | 亚洲精区二区三区四区麻豆 | 久久天天综合网 | 免费av电影网站 | 99欧美视频 | 欧美久久久一区二区三区 | 91视频专区| 亚洲国产免费 | 日韩动漫免费观看高清完整版在线观看 | 欧美日韩伦理在线 | 91精品国自产在线观看欧美 | 国产精品女同一区二区三区久久夜 | 午夜 在线 | 午夜精品久久久久久中宇69 | 人人澡人人草 | 国产拍揄自揄精品视频麻豆 | 成人手机在线视频 | 国产不卡在线观看 | 亚洲精品国精品久久99热 | 国产精品美女在线 | 在线看小早川怜子av | 久久这里只有精品首页 | 亚洲精品中文字幕视频 | 亚洲精品成人 | 久久系列 | 狠狠色丁香久久婷婷综 | 国产精选在线观看 | 日韩在线观看第一页 | 免费高清在线一区 | 亚洲免费在线视频 | 精品电影一区二区 | 国产看片网站 | 激情影音 | 91.精品高清在线观看 | 色综合久久88色综合天天 | 国产999精品久久久久久绿帽 | 999精品| 深夜免费福利视频 | 午夜在线看片 | 中文字幕免费一区二区 | 在线一区观看 | 亚洲欧美国产精品 | 免费看的国产视频网站 | 丁香 久久 综合 | 色网站黄 | 国产91精品一区二区麻豆网站 | 亚洲婷婷综合色高清在线 | 伊人视频 | 国产精品18久久久久久首页狼 | 亚洲高清视频在线播放 | 欧美地下肉体性派对 | 国产精品婷婷午夜在线观看 | 天天爽天天爽夜夜爽 | 日韩av伦理片 | 91香蕉视频好色先生 | 国产成人精品久久久久 | 男女拍拍免费视频 | 高清av中文在线字幕观看1 | 黄色片软件网站 | 亚洲一区欧美激情 | 日本久久久久久久久久久 | 在线观看完整版 | 国产99精品在线观看 | 久久国产精品一国产精品 | 日产中文字幕 | 久久免费视频这里只有精品 | 久久综合五月天婷婷伊人 | 九九在线高清精品视频 | 女人18毛片a级毛片一区二区 | 97超碰资源站 | 欧美国产在线看 | 9i看片成人免费看片 | 亚洲乱码精品久久久 | 久久亚洲美女 | 91精品久久久久久综合乱菊 | 欧美少妇xxxxxx | 成人91免费视频 | 黄色视屏在线免费观看 | 亚洲黄色av网址 | 91网在线观看 | 99 色| 91chinese在线 | 伊人欧美| 久久人人射 | 免费看片网址 | 九九在线视频免费观看 | 激情久久久久久久久久久久久久久久 | 精品中文字幕在线 | 色综合天天狠天天透天天伊人 | 国产色视频网站2 | 精品国产99国产精品 | 色视频成人在线观看免 | 91成人精品国产刺激国语对白 | 99精品视频免费观看视频 | 免费成人av在线 | 久久麻豆精品 | 中文 一区二区 | 中文字幕丝袜美腿 | 日日爽视频 | 成人网444ppp | 成年人黄色免费看 | 婷婷丁香色 | 婷婷色中文网 | 天天综合入口 | 中文字幕在线看视频国产中文版 | 日韩成人免费在线 | 中文字幕亚洲情99在线 | 成人综合婷婷国产精品久久免费 | 五月婷在线视频 | 亚洲成av片人久久久 | 97福利 | 免费看三片 | 干天天| 在线观看成人小视频 | av片中文 | 在线观看福利网站 | 国产日韩欧美在线播放 | 国产中文在线观看 | 精品主播网红福利资源观看 | 久久精品老司机 | 亚洲第一av在线播放 | 日韩精品欧美一区 | 欧美日本不卡 | 中文字幕国产视频 | 西西www4444大胆在线 | 国产精品美女在线观看 | 国产午夜精品一区二区三区在线观看 | ,午夜性刺激免费看视频 | 国产精品18久久久久久久网站 | 96av在线| 韩国av免费在线观看 | 天天插天天操天天干 | 99中文在线 | 日韩免费视频线观看 | 精品一区二区免费视频 | 久久久久中文字幕 | 亚洲理论影院 | 欧美一区二区在线看 | 成人在线播放免费观看 | 在线免费精品视频 | 97视频在线免费观看 | 国产探花在线看 | 久久激情五月丁香伊人 | 亚洲精品麻豆视频 | 国产自偷自拍 | 在线观看成年人 | 五月激情六月丁香 | av高清一区二区三区 | 五月天com| 久草视频在线免费 | 日韩欧美成 | 麻豆91视频 | 国产又粗又猛又色又黄视频 | 亚洲自拍偷拍色图 | 国产精品美女久久久久久2018 | 亚洲精品黄色在线观看 | 国产自产高清不卡 | 五月天色站 | 亚洲精品视频中文字幕 | 开心色婷婷 | 91超级碰 | www.神马久久 | 久久成人人人人精品欧 | 91亚洲国产成人久久精品网站 | 爱色av.com| 国产精品成人久久久久 | 久久视频在线视频 | 中文字幕国产精品 | 天天激情综合网 | 超碰在线97免费 | 久久久久久久久毛片精品 | 一区二区三区免费看 | 中文字幕二区 | 五月婷婷六月丁香在线观看 | 成人一级免费电影 | 欧美三级在线播放 | 操操操综合| 国产一区二区久久久久 | 久久成年人网站 | 久久色视频 | 国产中文字幕视频在线观看 | 在线最新av| 国产手机精品视频 | 亚洲精品高清视频 | 免费av在线播放 | 亚洲三级网站 | 久久久久这里只有精品 | 欧美人牲 | 99成人精品 | 亚洲精区二区三区四区麻豆 | 97超级碰碰碰碰久久久久 | 日韩在线三级 | 久久久久久久久久久久久久电影 | 国产精品激情偷乱一区二区∴ | 国产一二区在线观看 | 九色精品免费永久在线 | 午夜视频日本 | 天天射色综合 | 国产91学生粉嫩喷水 | 亚洲国产无 | 国产aaa大片 | 91中文在线观看 | 91在线国产观看 | 亚洲午夜久久久久久久久电影网 | 毛片一区二区 | 国产在线观看xxx | 人人爽人人av | 最近免费中文视频 | 尤物一区二区三区 | 天堂网中文在线 | 国产亚洲欧美在线视频 | 欧美a级在线 | 操操日日 | 天天插天天狠天天透 | 成年人免费看片网站 | 人人爱爱人人 | 日韩a在线观看 | 成av在线| 在线日韩三级 | av888av.com| 蜜桃视频成人在线观看 | 天天干,天天草 | 免费精品视频在线 | 成人午夜影院在线观看 | 超级碰碰视频 | 在线免费试看 | 日韩电影一区二区在线观看 | 久久综合九色综合久久久精品综合 | 97精品国产97久久久久久粉红 | 韩国av永久免费 | 成人黄色一级视频 | 狠狠狠狠狠狠 | 久久精品亚洲一区二区三区观看模式 | 天天爽综合网 | 免费黄色av电影 | 中文字幕资源网 国产 | 精品一区二区av | 黄色大全免费网站 | 精品天堂av | 国产一区二区三区免费在线 | 婷婷色网站 | 国产精品免费大片视频 | 精品国产伦一区二区三区 | 久久精品视频在线观看免费 | 成人羞羞视频在线观看免费 | 欧美久久久久久久久中文字幕 | bbbbb女女女女女bbbbb国产 | 国产一级一片免费播放放 | 天堂资源在线观看视频 | 中国一级特黄毛片大片久久 | 国产97在线播放 | 91香蕉视频污在线 | 一级免费看 | 久久久久久麻豆 | 天天色宗合 | 国产成人一区二区三区在线观看 | 又爽又黄又无遮挡网站动态图 | 人人狠狠综合久久亚洲 | 国产原创av片 | 亚欧日韩av | 一区二区三区久久 | 国产成人精品亚洲精品 | 4438全国亚洲精品在线观看视频 | 波多野结衣视频一区二区三区 | 日日操日日 | 高清免费在线视频 | 日韩理论电影在线观看 | 韩国av在线播放 | 亚洲精品乱码久久久一二三 | 人人草在线视频 | 国产精品久久久久影院日本 | 亚洲精品中文在线观看 | 一区 在线 影院 | 亚洲午夜不卡 | 午夜精品av在线 | 亚洲九九九在线观看 | 欧美另类视频 | 在线 欧美 日韩 | 亚洲久草在线 | 99精品免费 | 91中文字幕在线 | 韩国精品在线观看 | 久草在线视频免费资源观看 | 亚洲伊人成综合网 | 在线观看网站av | 亚洲黄色片在线 | 久久国产精品视频免费看 | 国产99久久久国产精品免费二区 | 国产日韩欧美网站 |