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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【stm32f407】SPI实验 驱动W25Q128「建议收藏」

發布時間:2023/12/19 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 【stm32f407】SPI实验 驱动W25Q128「建议收藏」 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.SPI介紹

SPI 是英語SerialPeripheral interface的縮寫,顧名思義就是串行外圍設備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在

EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的

管腳上只占用四根線,節約了芯片的管腳,同時為PCB的布局上節省空間,提供方便,正是出于這種簡單易用的特性,現在越來越多的芯片集成了這種

通信協議,STM32F4也有SPI接口。下面我們看看SPI的內部簡明圖

SPI接口一般使用4條線通信:

MISO 主設備數據輸入,從設備數據輸出。

MOSI 主設備數據輸出,從設備數據輸入。

SCLK時鐘信號,由主設備產生。

CS從設備片選信號,由主設備控制。

從圖中可以看出,主機和從機都有一個串行移位寄存器,主機通過向它的SPI串行寄存器

寫入一個字節來發起一次傳輸。寄存器通過MOSI信號線將字節傳送給從機,從機也將自己的移位寄存器中的內容通過MISO信號線返回給主機。這樣,兩個移位寄存器中的內容就被交換。外設的寫操作和讀操作是同步完成的。如果只進行寫操作,主機只需忽略接收到的字節;反之,若主機要讀取從機的一個字節,就必須發送一個空字節來引發從機的傳輸。

SPI主要特點有:可以同時發出和接收串行數據;可以當作主機或從機工作;提供頻率可

編程時鐘;發送結束中斷標志;寫沖突保護;總線競爭保護等。

SPI總線四種工作方式 SPI 模塊為了和外設進行數據交換,根據外設工作要求,其輸出串

行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響。如果CPOL=0,串行同步時鐘的空閑狀態為低電平;如果CPOL=1,串行同步時鐘的空閑狀態為高電平。時 鐘 相 位(CPHA)能夠配置用于選擇兩種不同的傳輸協議之一進行數據傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數據被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣。SPI主模塊和與之通信的外設備時鐘相位和極性應該一致。不同時鐘相位下的總線數據傳輸時序如圖

TM32F4的SPI功能很強大,SPI時鐘最高可以到37.5Mhz,支持DMA,可以配置為SPI

協議或者I2S協議(支持全雙工I2S)。

二.庫函數應用

SPI

相關的庫函數和定義分布在文件stm32f4xx_spi.c以及頭文件stm32f4xx_spi.h中。STM32的主模式配置步驟如下:

拿SPI1舉例

1) 配置相關引腳的復用功能,使能SPI1時鐘。

PB3、4、5這3個(SCK.、MISO、MOSI,CS使用軟件管理方式),所以設置這三個為復用IO,復用功能為AF5。

使能SPI1時鐘的方法為:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//使能SPI1時鐘

復用PB3,PB4,PB5為SPI1引腳的方法為:

GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI1); //PB3復用為 SPI1

GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_SPI1); //PB4復用為 SPI1

GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_SPI1); //PB5復用為 SPI1

同時我們要設置相應的引腳模式為復用功能模式:

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//復用功能

2) 初始化SPI1,設置SPI1工作模式等。

這一步全部是通過SPI1_CR1來設置,我們設置SPI1為主機模式,設置數據格式為8位,然后通過CPOL和CPHA位來設置SCK時鐘極性及采樣方式。并設置SPI1的時鐘頻率(最大37.5Mhz),以及數據的格式(MSB在前還是LSB在前)。在庫函數中初始化SPI的函數為:

void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);

跟其他外設初始化一樣,第一個參數是SPI標號,這里我們是使用的SPI1。下面我們來看看第二個參數結構體類型SPI_InitTypeDef的定義:

typedefstruct

{

uint16_tSPI_Direction;

uint16_tSPI_Mode;

uint16_tSPI_DataSize;

uint16_tSPI_CPOL;

uint16_tSPI_CPHA;

uint16_tSPI_NSS;

uint16_tSPI_BaudRatePrescaler;

uint16_tSPI_FirstBit;

uint16_tSPI_CRCPolynomial;

}SPI_InitTypeDef;

結構體成員變量比較多,接下來我們簡單講解一下:

第一個參數SPI_Direction是用來設置SPI的通信方式,可以選擇為半雙工,全雙工,以及串行發和串行收方式,這里我們選擇全雙工模式

SPI_Direction_2Lines_FullDuplex。

第二個參數SPI_Mode用來設置SPI的主從模式,這里我們設置為主機模式SPI_Mode_Master,當然有需要你也可以選擇為從機模式SPI_Mode_Slave。

第三個參數SPI_DataSiz為8 位還是16 位幀格式選擇項,這里我們是8 位傳輸,選擇SPI_DataSize_8b。

第四個參數SPI_CPOL用來設置時鐘極性,我們設置串行同步時鐘的空閑狀態為高電平所以我們選擇SPI_CPOL_High。

第五個參數SPI_CPHA用來設置時鐘相位,也就是選擇在串行同步時鐘的第幾個跳變沿(上升或下降)數據被采樣,可以為第一個或者第二個條邊沿采集,這里我們選擇第二個跳變沿,所以選擇SPI_CPHA_2Edge

第六個參數SPI_NSS設置NSS信號由硬件(NSS管腳)還是軟件控制,這里我們通過軟件控制NSS關鍵,而不是硬件自動控制,所以選擇SPI_NSS_Soft。

第七個參數SPI_BaudRatePrescaler很關鍵,就是設置SPI波特率預分頻值也就是決定SPI的時鐘的參數,從2 分頻到256 分頻8 個可選值,初始化的時候我們選擇256 分頻值SPI_BaudRatePrescaler_256, 傳輸速度為84M/256=328.125KHz。

第八個參數SPI_FirstBit 設置數據傳輸順序是MSB位在前還是LSB位在前,,這里我們選擇SPI_FirstBit_MSB高位在前。

第九個參數SPI_CRCPolynomial是用來設置CRC校驗多項式,提高通信可靠性,大于1即可。

設置好上面9個參數,我們就可以初始化SPI外設了。初始化的范例格式為:

SPI_InitTypeDef SPI_InitStructure;

SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex; //雙線雙向全雙工

SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主SPI

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // SPI發送接收8位幀結構

SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//串行同步時鐘的空閑狀態為高電平

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//第二個跳變沿數據被采樣

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信號由軟件控制

SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_256; //預分頻256

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //數據傳輸從MSB位開始

SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值計算的多項式

SPI_Init(SPI2, &SPI_InitStructure); //根據指定的參數初始化外設SPIx寄存器

3) 使能SPI1。

這一步通過SPI1_CR1的bit6來設置,以啟動SPI1,在啟動之后,我們就可以開始SPI通訊了。庫函數使能SPI1的方法為:

SPI_Cmd(SPI1, ENABLE); //使能SPI1外設

4) SPI傳輸數據

通信接口當然需要有發送數據和接受數據的函數,固件庫提供的發送數據函數原型為:

void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data);

這個函數很好理解,往SPIx數據寄存器寫入數據Data,從而實現發送。

固件庫提供的接受數據函數原型為:

uint16_t SPI_I2S_ReceiveData(SPI_TypeDef* SPIx) ;

這個函數也不難理解,從SPIx數據寄存器讀出接受到的數據。

5) 查看SPI傳輸狀態

在SPI傳輸過程中,我們經常要判斷數據是否傳輸完成,發送區是否為空等等狀態,這是通過函數SPI_I2S_GetFlagStatus實現的,這個函數很簡單就不詳細講解,判斷發送是否完成的方法是:

SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE);

三.庫函數應用源碼

voidSPI1_Init(void)
{ 
 GPIO_InitTypeDef GPIO_InitStructure;
 SPI_InitTypeDef SPI_InitStructure;
 
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//使能GPIOB時鐘
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);//使能SPI1時鐘

 //GPIOFB3,4,5初始化設置
 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//PB3~5復用功能輸出 
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF;//復用功能
 GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;//推挽輸出
 GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;//100MHz
 GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;//上拉
 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
 
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource3,GPIO_AF_SPI1);//PB3復用為 SPI1
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource4,GPIO_AF_SPI1);//PB4復用為 SPI1
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource5,GPIO_AF_SPI1);//PB5復用為 SPI1

 //這里只針對SPI口初始化
 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,ENABLE);//復位SPI1
 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1,DISABLE);//停止復位SPI1

 SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex; //設置SPI單向或者雙向的數據模式:SPI設置為雙線雙向全雙工
 SPI_InitStructure.SPI_Mode =SPI_Mode_Master; //設置SPI工作模式:設置為主SPI
 SPI_InitStructure.SPI_DataSize =SPI_DataSize_8b; //設置SPI的數據大小:SPI發送接收8位幀結構
 SPI_InitStructure.SPI_CPOL =SPI_CPOL_High; //串行同步時鐘的空閑狀態為高電平
 SPI_InitStructure.SPI_CPHA =SPI_CPHA_2Edge; //串行同步時鐘的第二個跳變沿(上升或下降)數據被采樣
 SPI_InitStructure.SPI_NSS =SPI_NSS_Soft; //NSS信號由硬件(NSS管腳)還是軟件(使用SSI位)管理:內部NSS信號有SSI位控制
 SPI_InitStructure.SPI_BaudRatePrescaler= SPI_BaudRatePrescaler_256; //定義波特率預分頻的值:波特率預分頻值為256
 SPI_InitStructure.SPI_FirstBit =SPI_FirstBit_MSB; //指定數據傳輸從MSB位還是LSB位開始:數據傳輸從MSB位開始
 SPI_InitStructure.SPI_CRCPolynomial =7; //CRC值計算的多項式
 SPI_Init(SPI1,&SPI_InitStructure); //根據SPI_InitStruct中指定的參數初始化外設SPIx寄存器

 SPI_Cmd(SPI1, ENABLE); //使能SPI外設

 SPI1_ReadWriteByte(0xff);//啟動傳輸 
} 
//SPI1速度設置函數
//SPI速度=fAPB2/分頻系數
//@refSPI_BaudRate_Prescaler:SPI_BaudRatePrescaler_2~SPI_BaudRatePrescaler_256 
//fAPB2時鐘一般為84Mhz:
voidSPI1_SetSpeed(u8 SPI_BaudRatePrescaler)
{
assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//判斷有效性
 SPI1->CR1&=0XFFC7;//位3-5清零,用來設置波特率
 SPI1->CR1|=SPI_BaudRatePrescaler; //設置SPI1速度 
 SPI_Cmd(SPI1,ENABLE); //使能SPI1
} 
//SPI1 讀寫一個字節
//TxData:要寫入的字節
//返回值:讀取到的字節
u8SPI1_ReadWriteByte(u8 TxData)
{  

 while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE) == RESET){}//等待發送區空 
 
 SPI_I2S_SendData(SPI1, TxData); //通過外設SPIx發送一個byte 數據
 
 while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE) == RESET){} //等待接收完一個byte 

 return SPI_I2S_ReceiveData(SPI1); //返回通過SPIx最近接收的數據 
  
}

四.W25Q128介紹

W25Q128是華邦公司推出的大容量SPI FLASH產品,W25Q128的容量為128Mb,該系列還有W25Q80/16/32/64等。

W25Q128將16M的容量分為256個塊(Block),每個塊大小為64K字節,每個塊又分為16個扇區(Sector),每個扇區4K個字節。W25Q128的最小擦除單位為一個扇區,也就是每次必須擦除4K個字節。這樣我們需要給W25Q128開辟一個至少4K的緩存區,這樣對SRAM要求比較高,要求芯片必須有4K以上SRAM才能很好的操作。

W25Q128的擦寫周期多達10W次,具有20年的數據保存期限,支持電壓為2.7~3.6V,

W25Q128支持標準的SPI,還支持雙輸出/四輸出的SPI,最大SPI時鐘可以到80Mhz(雙輸出時相當于160Mhz,四輸出時相當于320M),更多的W25Q128的介紹,請參考W25Q128的DATASHEET。

五.SPI操作W25Q128

1.Read Manufacturer / Device ID(90h)

程序和時序圖一一對應

程序意思為:先片選,選中W25Q128,然后發送命令和address,然后再讀出ID,再取消片選

2.Sector Erase (20h)

對應的時序圖為

程序的意思是片選25Q128,然后發送命令和地址,然后再取消片選,等待擦除完成

3.Read Data (03h)

對應的時序圖為:

只介紹這三個,可以自行參照datasheet讀源碼,后續附上源碼

六.操作W25Q128源碼

W25qxx.h

#ifndef__W25QXX_H
#define__W25QXX_H  
#include"sys.h" 

//W25X系列/Q系列芯片列表  
//W25Q80 ID0XEF13
//W25Q16 ID0XEF14
//W25Q32 ID0XEF15
//W25Q64 ID0XEF16 
//W25Q128ID 0XEF17 
#defineW25Q80  0XEF13  
#defineW25Q16  0XEF14
#defineW25Q32  0XEF15
#defineW25Q64  0XEF16
#defineW25Q128 0XEF17

externu16 W25QXX_TYPE; //定義W25QXX芯片型號  

#define W25QXX_CS  PBout(14)  //W25QXX的片選信號

//
//指令表
#defineW25X_WriteEnable 0x06 
#defineW25X_WriteDisable 0x04 
#defineW25X_ReadStatusReg 0x05 
#defineW25X_WriteStatusReg 0x01 
#defineW25X_ReadData 0x03
#defineW25X_FastReadData 0x0B 
#defineW25X_FastReadDual 0x3B 
#defineW25X_PageProgram 0x02 
#defineW25X_BlockErase 0xD8
#defineW25X_SectorErase 0x20 
#defineW25X_ChipErase 0xC7
#defineW25X_PowerDown 0xB9 
#defineW25X_ReleasePowerDown 0xAB 
#defineW25X_DeviceID 0xAB 
#defineW25X_ManufactDeviceID 0x90 
#defineW25X_JedecDeviceID 0x9F 

voidW25QXX_Init(void);
u16 W25QXX_ReadID(void);   //讀取FLASH ID
u8 W25QXX_ReadSR(void);  //讀取狀態寄存器 
voidW25QXX_Write_SR(u8 sr);  //寫狀態寄存器
voidW25QXX_Write_Enable(void);  //寫使能 
voidW25QXX_Write_Disable(void); //寫保護
voidW25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);
voidW25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead); //讀取flash
voidW25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite);//寫入flash
voidW25QXX_Erase_Chip(void);   //整片擦除
voidW25QXX_Erase_Sector(u32 Dst_Addr); //扇區擦除
voidW25QXX_Wait_Busy(void);  //等待空閑
voidW25QXX_PowerDown(void);  //進入掉電模式
voidW25QXX_WAKEUP(void); //喚醒
#endif

W25qxx.c

#include"w25qxx.h" 
#include"spi.h"
#include"delay.h"  
#include"usart.h" 
u16W25QXX_TYPE=W25Q128; //默認是W25Q128
//4Kbytes為一個Sector
//16個扇區為1個Block
//W25Q128
//容量為16M字節,共有128個Block,4096個Sector 
 
//初始化SPI FLASH的IO口
voidW25QXX_Init(void)
{ 
 GPIO_InitTypeDef GPIO_InitStructure;

 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//使能GPIOB時鐘
 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG,ENABLE);//使能GPIOG時鐘

 //GPIOB14
 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_14;//PB14
 GPIO_InitStructure.GPIO_Mode =GPIO_Mode_OUT;//輸出
 GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;//推挽輸出
 GPIO_InitStructure.GPIO_Speed =GPIO_Speed_100MHz;//100MHz
 GPIO_InitStructure.GPIO_PuPd =GPIO_PuPd_UP;//上拉
 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化

 GPIO_InitStructure.GPIO_Pin =GPIO_Pin_7;//PG7
 GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化

 GPIO_SetBits(GPIOG,GPIO_Pin_7);//PG7輸出1,防止NRF干擾SPI FLASH的通信 
 W25QXX_CS=1; //SPI FLASH不選中
 SPI1_Init();   //初始化SPI
 SPI1_SetSpeed(SPI_BaudRatePrescaler_4); //設置為21M時鐘,高速模式 
 W25QXX_TYPE=W25QXX_ReadID(); //讀取FLASH ID.
} 

//讀取W25QXX的狀態寄存器
//BIT7 65 4 32 1 0
//SPR RV TBBP2 BP1 BP0 WEL BUSY
//SPR:默認0,狀態寄存器保護位,配合WP使用
//TB,BP2,BP1,BP0:FLASH區域寫保護設置
//WEL:寫使能鎖定
//BUSY:忙標記位(1,忙;0,空閑)
//默認:0x00
u8W25QXX_ReadSR(void) 
{ 
 u8 byte=0; 
 W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_ReadStatusReg); //發送讀取狀態寄存器命令 
 byte=SPI1_ReadWriteByte(0Xff); //讀取一個字節 
 W25QXX_CS=1; //取消片選 
 return byte; 
} 
//寫W25QXX狀態寄存器
//只有SPR,TB,BP2,BP1,BP0(bit7,5,4,3,2)可以寫!!!
voidW25QXX_Write_SR(u8 sr) 
{ 
 W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_WriteStatusReg); //發送寫取狀態寄存器命令 
 SPI1_ReadWriteByte(sr); //寫入一個字節 
 W25QXX_CS=1; //取消片選  
} 
//W25QXX寫使能 
//將WEL置位 
voidW25QXX_Write_Enable(void) 
{
 W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_WriteEnable); //發送寫使能 
 W25QXX_CS=1; //取消片選  
} 
//W25QXX寫禁止 
//將WEL清零 
voidW25QXX_Write_Disable(void) 
{ 
 W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_WriteDisable); //發送寫禁止指令 
 W25QXX_CS=1; //取消片選  
}  
//讀取芯片ID
//返回值如下:  
//0XEF13,表示芯片型號為W25Q80 
//0XEF14,表示芯片型號為W25Q16 
//0XEF15,表示芯片型號為W25Q32 
//0XEF16,表示芯片型號為W25Q64
//0XEF17,表示芯片型號為W25Q128 
u16W25QXX_ReadID(void)
{
 u16 Temp = 0;  
 W25QXX_CS=0;  
 SPI1_ReadWriteByte(0x90);//發送讀取ID命令  
 SPI1_ReadWriteByte(0x00); 
 SPI1_ReadWriteByte(0x00); 
 SPI1_ReadWriteByte(0x00);  
 Temp|=SPI1_ReadWriteByte(0xFF)<<8; 
 Temp|=SPI1_ReadWriteByte(0xFF); 
 W25QXX_CS=1;  
 return Temp;
}  
//讀取SPIFLASH 
//在指定地址開始讀取指定長度的數據
//pBuffer:數據存儲區
//ReadAddr:開始讀取的地址(24bit)
//NumByteToRead:要讀取的字節數(最大65535)
voidW25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead) 
{ 
 u16i;  
 W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_ReadData); //發送讀取命令 
SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); //發送24bit地址 
 SPI1_ReadWriteByte((u8)((ReadAddr)>>8)); 
 SPI1_ReadWriteByte((u8)ReadAddr); 
 for(i=0;i<NumByteToRead;i++)
 { 
pBuffer[i]=SPI1_ReadWriteByte(0XFF);//循環讀數 
 }
 W25QXX_CS=1;   
} 
//SPI在一頁(0~65535)內寫入少于256個字節的數據
//在指定地址開始寫入最大256字節的數據
//pBuffer:數據存儲區
//WriteAddr:開始寫入的地址(24bit)
//NumByteToWrite:要寫入的字節數(最大256),該數不應該超過該頁的剩余字節數!!! 
voidW25QXX_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
{
 u16i; 
 W25QXX_Write_Enable(); //SET WEL 
 W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_PageProgram); //發送寫頁命令 
SPI1_ReadWriteByte((u8)((WriteAddr)>>16)); //發送24bit地址 
SPI1_ReadWriteByte((u8)((WriteAddr)>>8)); 
 SPI1_ReadWriteByte((u8)WriteAddr); 
for(i=0;i<NumByteToWrite;i++)SPI1_ReadWriteByte(pBuffer[i]);//循環寫數 
 W25QXX_CS=1; //取消片選 
 W25QXX_Wait_Busy();  //等待寫入結束
} 
//無檢驗寫SPI FLASH
//必須確保所寫的地址范圍內的數據全部為0XFF,否則在非0XFF處寫入的數據將失敗!
//具有自動換頁功能 
//在指定地址開始寫入指定長度的數據,但是要確保地址不越界!
//pBuffer:數據存儲區
//WriteAddr:開始寫入的地址(24bit)
//NumByteToWrite:要寫入的字節數(最大65535)
//CHECKOK
voidW25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) 
{   
 u16 pageremain;  
 pageremain=256-WriteAddr%256; //單頁剩余的字節數  
 if(NumByteToWrite<=pageremain)pageremain=NumByteToWrite;//不大于256個字節
 while(1)
 {  
 W25QXX_Write_Page(pBuffer,WriteAddr,pageremain);
 if(NumByteToWrite==pageremain)break;//寫入結束了
  else //NumByteToWrite>pageremain
 {
 pBuffer+=pageremain;
 WriteAddr+=pageremain; 

 NumByteToWrite-=pageremain;  //減去已經寫入了的字節數
 if(NumByteToWrite>256)pageremain=256;//一次可以寫入256個字節
 elsepageremain=NumByteToWrite;  //不夠256個字節了
 }
 };  
} 
//寫SPIFLASH 
//在指定地址開始寫入指定長度的數據
//該函數帶擦除操作!
//pBuffer:數據存儲區
//WriteAddr:開始寫入的地址(24bit) 
//NumByteToWrite:要寫入的字節數(最大65535) 
u8W25QXX_BUFFER[4096]; 
voidW25QXX_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) 
{ 
 u32 secpos;
 u16 secoff;
 u16 secremain;  
 u16i; 
 u8 * W25QXX_BUF;  
  W25QXX_BUF=W25QXX_BUFFER;  
 secpos=WriteAddr/4096;//扇區地址 
 secoff=WriteAddr%4096;//在扇區內的偏移
 secremain=4096-secoff;//扇區剩余空間大小 
 //printf("ad:%X,nb:%X\r\n",WriteAddr,NumByteToWrite);//測試用
 if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//不大于4096個字節
 while(1) 
 { 
 W25QXX_Read(W25QXX_BUF,secpos*4096,4096);//讀出整個扇區的內容
 for(i=0;i<secremain;i++)//校驗數據
 {
 if(W25QXX_BUF[secoff+i]!=0XFF)break;//需要擦除  
 }
 if(i<secremain)//需要擦除
 {
 W25QXX_Erase_Sector(secpos);//擦除這個扇區
 for(i=0;i<secremain;i++)  //復制
 {
 W25QXX_BUF[i+secoff]=pBuffer[i]; 
 }
 W25QXX_Write_NoCheck(W25QXX_BUF,secpos*4096,4096);//寫入整個扇區 

 }elseW25QXX_Write_NoCheck(pBuffer,WriteAddr,secremain);//寫已經擦除了的,直接寫入扇區剩余區間.  
 if(NumByteToWrite==secremain)break;//寫入結束了
 else//寫入未結束
 {
 secpos++;//扇區地址增1
 secoff=0;//偏移位置為0  

   pBuffer+=secremain; //指針偏移
 WriteAddr+=secremain;//寫地址偏移  
   NumByteToWrite-=secremain; //字節數遞減
 if(NumByteToWrite>4096)secremain=4096; //下一個扇區還是寫不完
 elsesecremain=NumByteToWrite; //下一個扇區可以寫完了
 } 
 }; 
}
//擦除整個芯片 
//等待時間超長...
voidW25QXX_Erase_Chip(void) 
{ 
 W25QXX_Write_Enable(); //SET WEL 
 W25QXX_Wait_Busy(); 
  W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_ChipErase); //發送片擦除命令 
 W25QXX_CS=1; //取消片選  
 W25QXX_Wait_Busy();  //等待芯片擦除結束
} 
//擦除一個扇區
//Dst_Addr:扇區地址 根據實際容量設置
//擦除一個山區的最少時間:150ms
voidW25QXX_Erase_Sector(u32 Dst_Addr) 
{ 
 //監視falsh擦除情況,測試用 
 printf("fe:%x\r\n",Dst_Addr);  
 Dst_Addr*=4096;
 W25QXX_Write_Enable(); //SET WEL  
 W25QXX_Wait_Busy(); 
  W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_SectorErase); //發送扇區擦除指令 
SPI1_ReadWriteByte((u8)((Dst_Addr)>>16)); //發送24bit地址 
SPI1_ReadWriteByte((u8)((Dst_Addr)>>8)); 
 SPI1_ReadWriteByte((u8)Dst_Addr); 
 W25QXX_CS=1; //取消片選  
 W25QXX_Wait_Busy();  //等待擦除完成
} 
//等待空閑
voidW25QXX_Wait_Busy(void) 
{ 
 while((W25QXX_ReadSR()&0x01)==0x01); // 等待BUSY位清空
} 
//進入掉電模式
void W25QXX_PowerDown(void) 
{ 
  W25QXX_CS=0; //使能器件 
 SPI1_ReadWriteByte(W25X_PowerDown); //發送掉電命令 
 W25QXX_CS=1; //取消片選  
 delay_us(3); //等待TPD 
} 
//喚醒
voidW25QXX_WAKEUP(void) 
{ 
  W25QXX_CS=0; //使能器件 
SPI1_ReadWriteByte(W25X_ReleasePowerDown); //send W25X_PowerDown command 0xAB
 W25QXX_CS=1; //取消片選  
 delay_us(3); //等待TRES1
} 

總結

以上是生活随笔為你收集整理的【stm32f407】SPI实验 驱动W25Q128「建议收藏」的全部內容,希望文章能夠幫你解決所遇到的問題。

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

2023国产精品自产拍在线观看 | 亚洲国产大片 | 人人讲下载 | 国产在线a视频 | 99精品99 | 久久精品久久久久 | 亚洲精品99 | 玖玖爱国产在线 | 99久久精品国产一区二区成人 | 国产日韩视频在线播放 | 欧美孕交vivoestv另类 | 中文字幕在线观看第三页 | 久久综合给合久久狠狠色 | 国产123区在线观看 国产精品麻豆91 | 日韩3区 | 国产福利在线免费观看 | 中文字幕影片免费在线观看 | 在线视频福利 | 久久99热精品 | 亚洲精品一区二区三区在线观看 | 国产最新91 | 久久免费成人精品视频 | 亚洲毛片视频 | 日韩黄色免费在线观看 | 美女啪啪图片 | 999久久久国产精品 高清av免费观看 | 激情综合交 | 欧美色图亚洲图片 | 色婷婷激情五月 | 波多野结衣电影一区二区三区 | 日韩精品一区二区三区在线播放 | 欧美精品一区二区蜜臀亚洲 | 亚洲精品在线观看不卡 | 亚洲精品影视 | 九九久久国产精品 | 奇米影视777影音先锋 | 成人在线观看免费视频 | 国产专区日韩专区 | 日日天天干 | 99热精品国产 | 天天操天天干天天插 | 欧美动漫一区二区三区 | 欧美视屏一区二区 | 色.www | 精品国产欧美一区二区 | 日韩专区视频 | 国产精品大片免费观看 | 麻豆一二 | 天天伊人网| 一二区精品 | 国产精品一区二 | 在线 视频 亚洲 | 日韩欧美专区 | 日韩精品欧美视频 | 午夜a区 | 免费高清看电视网站 | 日p视频在线观看 | 久久婷婷国产 | 婷婷射五月 | 亚洲精品国产精品国自 | av片中文字幕 | 国产精品网在线观看 | 天天干,夜夜操 | 国产一级特黄毛片在线毛片 | 制服丝袜天堂 | a在线观看国产 | 亚洲午夜久久久久久久久电影网 | 免费a级观看 | 激情av网| 国产精品久久久久久久久久久久午夜 | 玖玖视频免费在线 | 久久久婷 | 亚洲成人av电影 | 成人黄色免费在线观看 | 久草视频国产 | 日韩国产高清在线 | 国产黄色免费看 | 日韩精品一区二区三区免费视频观看 | www.午夜色.com | 中文字幕中文字幕中文字幕 | 最新日韩视频在线观看 | 九九九九热精品免费视频点播观看 | 青草视频在线 | 久久久国产精品麻豆 | 国产69熟| 亚洲国产精品视频在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 五月天激情综合网 | 99久热在线精品视频观看 | 久久都是精品 | 精品一区二区免费视频 | 免费麻豆视频 | 久久久久久久久网站 | 亚洲国产精品成人女人久久 | 亚洲aⅴ乱码精品成人区 | 五月天久久精品 | 91av在线看 | 最新动作电影 | 狠狠色噜噜狠狠 | 91最新地址永久入口 | 国产精品一区二区三区99 | 午夜精品久久久久久99热明星 | 欧美色婷 | 国产视频999 | 国产在线精品区 | 亚洲国产日韩欧美 | 91色吧 | 在线免费观看视频一区二区三区 | 99久热在线精品视频成人一区 | 亚洲精品日韩在线观看 | 中文字幕在线观看2018 | 久久久国产毛片 | 久久久久久久久免费 | 久久在线免费观看 | 99久久久国产精品免费99 | 久久久黄色av | 麻豆国产精品一区二区三区 | 精品国产亚洲日本 | 亚洲人成影院在线 | 手机av观看 | 亚洲第一av在线播放 | 欧美日韩国产二区 | 欧美一二三区播放 | 国产精品免费久久久久影院仙踪林 | 91免费的视频在线播放 | 亚洲深夜影院 | 免费看的黄色小视频 | 中文字幕永久 | 欧美日韩xx | 婷婷色综合色 | 四虎8848免费高清在线观看 | 国产亚洲精品久久久网站好莱 | 日韩xxxbbb | 91视频久久久久 | 69视频国产 | 在线观看国产永久免费视频 | 午夜av日韩 | 91麻豆精品国产自产在线游戏 | av3级在线| 久久综合给合久久狠狠色 | 久久视频免费在线观看 | 久久爱影视i | 欧美a√大片 | 丝袜一区在线 | 国产只有精品 | 亚洲一级电影在线观看 | 国产精品麻豆视频 | 久热电影 | 99久久综合国产精品二区 | 日韩精品一区二区免费视频 | 激情小说 五月 | 少妇搡bbbb搡bbb搡69 | 欧美精品乱码99久久影院 | 欧美小视频在线观看 | 日日日网 | 久久久久久久久久久福利 | 精品国产免费一区二区三区五区 | 五月天激情视频 | 中文字幕在线看视频 | 97超碰免费在线 | 欧美乱熟臀69xxxxxx | 日韩视频在线观看视频 | 91网在线| 日韩免费视频网站 | 97在线公开视频 | 日韩精品在线视频 | 91久久久久久久一区二区 | 国产黄色精品网站 | av高清一区二区三区 | 在线精品亚洲一区二区 | 久久婷五月| 成人资源站| 久久久久亚洲天堂 | 久久黄色小说视频 | 久久99久久99精品 | 久久精品站 | 青青河边草免费直播 | 久久久久久精 | 色吊丝av中文字幕 | 国产色女| 超碰人人草 | 狠狠色丁香婷婷综合视频 | 香蕉视频在线视频 | 制服丝袜在线91 | 亚洲区另类春色综合小说 | 国产黄色片久久久 | 国产破处视频在线播放 | 黄色软件视频网站 | 国产福利一区在线观看 | 久久国产精品99久久久久久老狼 | 国产精品欧美日韩在线观看 | 日韩欧美国产精品 | 久久综合久久综合这里只有精品 | 欧美一区二区视频97 | 国产99久久久国产精品成人免费 | 国产精成人品免费观看 | 黄色性av| 日韩视频一区二区在线 | 国产免费久久久久 | 国产v在线播放 | 色视频在线免费观看 | 日韩理论电影在线观看 | 色婷婷电影网 | 久色婷婷 | 国产精品com | 中文理论片 | 欧美日韩一区二区三区在线免费观看 | 日本久久久亚洲精品 | 8x成人在线 | 狠狠色噜噜狠狠狠狠 | 中文永久免费观看 | 97超碰国产在线 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 1区2区视频 | 国产人在线成免费视频 | 91完整版在线观看 | 开心综合网 | 久久精品国产精品亚洲 | 日b黄色片 | 99精品在线免费视频 | 五月婷在线 | www狠狠操 | 婷婷香蕉 | 久久久久国产精品厨房 | 中文字幕色播 | 麻豆成人网| 国产精品九九九九九 | 国产小视频在线 | 成人av在线直播 | 亚洲黄色三级 | 国产无遮挡又黄又爽在线观看 | 7777精品伊人久久久大香线蕉 | 日本精品二区 | 中文字幕电影高清在线观看 | 99激情网 | 久久成年人 | 亚洲伦理中文字幕 | 精品资源在线 | 肉色欧美久久久久久久免费看 | 欧美一级片播放 | 久久一视频 | 奇米四色影狠狠爱7777 | 伊人久久av | 狠狠色2019综合网 | 91成人破解版 | 国产成人91| 日日夜夜av | 婷婷激情五月 | 精品国产激情 | 人人插人人玩 | 久久激情精品 | 国产精品18videosex性欧美 | 色先锋资源网 | 成人a毛片 | 99爱爱| 日本久久久久久久久久久 | 999久久a精品合区久久久 | 亚洲aⅴ乱码精品成人区 | free,性欧美| 美女中文字幕 | 日韩一区在线免费观看 | 欧美精品乱码久久久久久 | 一区电影 | 久久伊人综合 | 久久高清精品 | 91黄色视屏| 四虎影视精品 | 成人h视频在线 | 成片视频免费观看 | 日韩av在线免费播放 | 天天综合网天天综合色 | 国内精品视频久久 | 波多野结衣视频一区二区 | 中文字幕在线观看网站 | 91精品福利在线 | 欧美亚洲免费在线一区 | 少妇bbw揉bbb欧美 | 日韩中文字幕免费在线观看 | 久久综合网色—综合色88 | 最新av在线播放 | 日日婷婷夜日日天干 | 国产视频导航 | 日本精品视频网站 | 日韩理论片 | 丁香色天天 | 精品一区二区三区久久久 | 九九热中文字幕 | 国产亚洲精品久久久久久无几年桃 | 在线日韩三级 | 国产黄色片在线免费观看 | 国产综合福利在线 | 夜色成人av | 成人毛片一区 | 国产成人在线观看免费 | 中文字幕高清有码 | 日日夜夜亚洲 | 婷婷av资源| 国产亚洲免费的视频看 | 国产91在线免费视频 | 三级视频日韩 | 热久久免费国产视频 | 在线观看涩涩 | 99精品视频一区二区 | 亚洲免费av电影 | 欧美日韩精品在线播放 | 免费视频久久久久久久 | 日韩av有码在线 | 97国产超碰在线 | 成年人网站免费观看 | 国产一区网址 | 中文字幕999 | 日韩精品免费在线播放 | 免费日韩一区二区三区 | 久久精品一级片 | 亚洲国产精品va在线看黑人动漫 | 午夜精品一区二区三区在线 | 蜜桃麻豆www久久囤产精品 | 狠狠色丁香婷婷综合久小说久 | 成年在线观看 | 国产精品毛片久久 | 91最新在线视频 | 欧美精品一区二区三区四区在线 | 91精品国产综合久久婷婷香蕉 | 四虎国产精品成人免费4hu | 日韩电影中文字幕在线观看 | 91视频91蝌蚪 | 天天干天天操天天拍 | 伊人av综合| 国内精品久久久久影院男同志 | 国产亚洲欧洲 | 91av欧美 | 午夜123| 久产久精国产品 | www.五月天激情| 一区在线播放 | 91网页版在线观看 | 激情综合网五月激情 | 久久婷婷色综合 | 国产视频精品网 | 日夜夜精品视频 | 国产午夜精品视频 | 久久久久一区二区三区四区 | 日韩a级黄色片 | 99国产精品久久久久老师 | 日韩av电影网站在线观看 | 操老逼免费视频 | 在线观看黄色国产 | 九精品 | 国产香蕉97碰碰久久人人 | 91日韩在线视频 | 九九九九热精品免费视频点播观看 | 欧美大片第1页 | 日韩欧美视频一区二区三区 | 2000xxx影视 | 91精品国产综合久久久久久久 | 亚洲一区精品二人人爽久久 | 成 人 黄 色 视频免费播放 | 在线视频 国产 日韩 | 九九视频在线观看视频6 | 日韩高清不卡一区二区三区 | 亚洲一区二区三区91 | 成人免费中文字幕 | 国产成人精品999在线观看 | 91亚洲激情 | 久久99精品国产 | 九九色在线观看 | 婷婷av综合| 免费久久视频 | 久久婷婷亚洲 | 久久99精品久久久久久三级 | 国产亚洲精品久久久久久久久久久久 | 成年人黄色在线观看 | 国产伦理一区二区 | 国产精品一区免费在线观看 | 日批视频在线观看免费 | 成人a在线观看 | 国产91勾搭技师精品 | 亚洲精品视频网站在线观看 | 精品久久五月天 | 成年人免费电影 | 天天天色综合a | 精品久久五月天 | 国产成人精品网站 | 成人av网站在线观看 | 六月丁香激情综合色啪小说 | 久久亚洲欧美日韩精品专区 | 成年人免费看 | 成人国产一区二区 | 一区二区毛片 | 国产精品99久久久久久武松影视 | 黄色免费网站 | 精品久久久久久久久亚洲 | 色婷婷狠狠五月综合天色拍 | 亚洲久久视频 | 黄色毛片视频免费 | 欧美精品国产综合久久 | 麻豆观看| 国内精品二区 | 中文字幕久久精品一区 | 在线观看av麻豆 | 一区二区精品视频 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 国产精品视频全国免费观看 | 视频一区在线免费观看 | 成人午夜电影免费在线观看 | www.日韩免费| 91精品久久香蕉国产线看观看 | 欧美疯狂性受xxxxx另类 | 久久综合九色综合97_ 久久久 | 国产精久久久久久久 | 黄色毛片大全 | 亚洲国产成人久久 | 婷婷丁香七月 | 亚洲免费在线看 | 国产一级二级在线播放 | 国产探花在线看 | 精品视频免费播放 | 国产精品99久久久精品 | 97人人看 | 在线观看色视频 | 69国产盗摄一区二区三区五区 | 精品免费久久久久久 | 中文字幕在线观看视频一区二区三区 | 国产一区二区久久 | 成年人精品 | 免费av试看 | 免费看久久| 日韩精品中文字幕久久臀 | 欧美午夜a| 日韩视频免费在线 | 日韩黄色免费在线观看 | 久久久久国产精品视频 | 一区二区三区高清在线 | 亚洲国产资源 | 超碰在线最新 | 亚洲 综合 精品 | 蜜桃视频成人在线观看 | 五月婷在线 | 国产黄av | 88av网站 | 成人国产精品电影 | 亚洲年轻女教师毛茸茸 | 天天干中文字幕 | 在线观看视频日韩 | 免费在线观看视频一区 | 摸bbb搡bbb搡bbbb | 国产精品福利无圣光在线一区 | 国产区精品视频 | 日韩中文字幕亚洲一区二区va在线 | 精品久久久久久综合 | v片在线看| 五月婷婷久久综合 | www.黄色 | 亚洲精品国产欧美在线观看 | 51久久成人国产精品麻豆 | 久久久免费高清视频 | 日韩,精品电影 | 免费看片色 | 亚洲黄色免费在线看 | 青青草国产精品 | 黄色三级在线看 | 国产精品久久伊人 | 欧美日韩一区二区在线观看 | 伊人久久一区 | 亚洲涩涩网 | 中文av在线免费观看 | 五月婷婷一级片 | 亚洲天堂激情 | 丝袜美女在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 成人国产精品久久久久久亚洲 | 久草免费在线观看 | 国产精品系列在线观看 | 久久久亚洲成人 | 五月婷婷,六月丁香 | 欧美国产精品一区二区 | 国产精品免费一区二区 | 国产涩图| 高潮毛片无遮挡高清免费 | 亚洲欧洲精品一区二区 | 99久热在线精品视频成人一区 | 又黄又爽又刺激 | 97人人视频| 一区二区三区中文字幕在线 | 欧美激情一区不卡 | 精品产品国产在线不卡 | 午夜av免费在线观看 | 国产精品激情在线观看 | 奇米四色影狠狠爱7777 | 高清av免费一区中文字幕 | 99久久久久国产精品免费 | 开心丁香婷婷深爱五月 | 久久99网 | 欧美国产精品久久久久久免费 | 久草网站在线 | 国产精品久久久久免费 | 久久视精品 | 成人一区二区三区在线观看 | 成人va天堂| 天天干天天射天天操 | 天天操天天舔天天爽 | 精品国产一区二区三区久久久蜜月 | 天天色天天骑天天射 | 中文字幕在线高清 | 青春草免费在线视频 | 久久精品视频在线看 | 欧美日韩高清一区 | 日韩色视频在线观看 | 午夜视频在线观看一区二区三区 | 中文字幕在线观看亚洲 | 亚洲一区 影院 | 久草在| 丰满少妇麻豆av | 亚洲视频综合在线 | 亚洲九九影院 | 欧美极度另类性三渗透 | 国内精品久久久久影院一蜜桃 | 夜夜夜草 | 免费热情视频 | 国产精品免费久久 | 欧洲视频一区 | 成年人国产视频 | 国内精品久久久久国产 | 亚洲精品久久久久999中文字幕 | 国产精品久久久av久久久 | 国产69精品久久99的直播节目 | 国产麻豆果冻传媒在线观看 | 国产高清视频免费最新在线 | 91看片在线免费观看 | 国产亚洲精品久久网站 | 欧美激情视频免费看 | 中文av资源站 | 久久久久久久99精品免费观看 | 久久久影院一区二区三区 | 亚洲综合在线观看视频 | 久久99热精品这里久久精品 | 狠狠操狠狠插 | 在线观看完整版免费 | 日韩在线观看一区二区三区 | 成人在线免费小视频 | 久久国产a | 国产高h视频 | 成人影音在线 | 在线国产中文字幕 | 欧美日韩中文国产一区发布 | 成人小视频在线免费观看 | 天天在线视频色 | 欧美激情第一区 | 欧美国产高清 | 91视频免费播放 | 日韩高清 一区 | 亚洲精品人人 | 午夜久久福利视频 | 久草在线视频在线观看 | 欧美日韩视频在线一区 | 狠狠色噜噜狠狠狠狠2021天天 | 人人爱在线视频 | 久久免费视频国产 | 91福利国产在线观看 | 超碰国产在线 | 久久久久久黄色 | 黄色1级大片 | 日韩视频一区二区三区 | 狠狠色丁香九九婷婷综合五月 | 欧美一区二区三区免费观看 | 国产亚洲一级高清 | 中文字幕在线国产 | 亚洲激情国产精品 | 精品福利在线观看 | 国产一区视频在线播放 | 91麻豆精品国产91久久久使用方法 | 久久久免费看视频 | 国产99一区视频免费 | 婷婷精品国产一区二区三区日韩 | 97视频免费在线观看 | 亚洲2019精品 | 青青草华人在线视频 | 国产精品国产毛片 | 成人久久视频 | 国内精品亚洲 | 国产高清视频在线免费观看 | 国产精品自产拍在线观看网站 | 中文 一区二区 | 欧美黄污视频 | 日韩欧美99 | 国产乱码精品一区二区蜜臀 | 毛片a级片| 91久久一区二区 | 久草在线久草在线2 | 狠狠色噜噜狠狠狠合久 | 亚洲va在线va天堂va偷拍 | 91探花视频 | av不卡在线看 | 99视频精品全部免费 在线 | 久久男人中文字幕资源站 | 日本在线观看中文字幕 | 91一区啪爱嗯打偷拍欧美 | 日韩精品欧美精品 | 国产精品高清在线观看 | 精品国模一区二区三区 | 波多野结衣一区二区三区中文字幕 | 中文字幕在线观看第一区 | 亚洲四虎影院 | 国产四虎在线 | 中文字幕之中文字幕 | 久久精品电影院 | av成人动漫| 青青久草在线 | 日韩中文字幕免费视频 | 国产成人三级一区二区在线观看一 | 亚洲精品国产自产拍在线观看 | 欧洲成人免费 | 中文字幕综合在线 | 国产精品自产拍在线观看桃花 | 在线观看黄网站 | 91高清在线| 99热精品国产| 婷婷天天色 | 天天激情在线 | 国产高清视频免费观看 | 美女视频黄色免费 | 国产精品久久中文字幕 | 中国一区二区视频 | 国产午夜亚洲精品 | 久久国产热视频 | 午夜视频在线网站 | 久草亚洲视频 | 欧美天天综合网 | 国产一区麻豆 | 国产亚洲人成网站在线观看 | 黄色免费网站下载 | 视频国产一区二区三区 | 亚洲欧美国产精品va在线观看 | 永久免费精品视频网站 | 成人免费观看完整版电影 | 你操综合 | 91精品久久久久久综合五月天 | 色偷偷88欧美精品久久久 | 在线免费av观看 | 亚洲精品在线观 | 欧美精品乱码久久久久 | 婷婷网在线 | 四虎成人在线 | 又黄又刺激 | 五月婷婷激情网 | 精品免费观看视频 | 精品视频在线视频 | 国内精品视频一区二区三区八戒 | 久草视频网| 在线国产一区 | 国产免费久久 | 成人禁用看黄a在线 | 91视频亚洲 | 日韩精品一区二区在线视频 | 婷婷丁香激情 | 麻豆成人在线观看 | 亚洲视频分类 | 久久国产精品小视频 | av网站在线观看免费 | 日韩三级免费观看 | 999久久国精品免费观看网站 | www.婷婷com| 日韩欧美一区二区三区在线 | 国产在线播放一区二区三区 | 99精品视频中文字幕 | a天堂中文在线 | 久久久国产高清 | 亚洲国产免费网站 | 国产精品一区二区免费 | 六月丁香综合网 | 国产精品18久久久久vr手机版特色 | 最近乱久中文字幕 | 一本一本久久a久久精品综合妖精 | 欧美日韩高清一区 | 国产69精品久久久久久 | 久免费视频 | 日韩动漫免费观看高清完整版在线观看 | 天天综合网在线观看 | 午夜视频亚洲 | 国产精品久久久久久模特 | 手机看片国产 | 久久999久久| 看片一区二区三区 | 中文国产在线观看 | 久久久色 | 深爱五月激情五月 | 探花视频在线版播放免费观看 | 成人一区二区三区在线 | 国产精品久久久久高潮 | www.av中文字幕.com | 国产在线a视频 | 五月天激情综合网 | 欧美巨大荫蒂茸毛毛人妖 | 日本公乱妇视频 | 日韩视| 人人爽久久久噜噜噜电影 | 国产激情免费 | 国内精品二区 | 日韩精品一区二区三区不卡 | 一区二区视频免费在线观看 | 亚洲色图美腿丝袜 | 免费色黄 | 91正在播放 | 免费高清av在线看 | 中文字幕视频 | 超碰在线观看97 | 中文字幕中文字幕中文字幕 | av电影亚洲 | 国产欧美综合视频 | 欧美伦理一区二区三区 | 日韩精品不卡在线观看 | 手机在线日韩视频 | 国产精品一区二区三区在线播放 | 久久99精品一区二区三区三区 | 97超碰.com | 黄色福利网 | 二区视频在线 | 黄色免费观看视频 | 免费国产黄线在线观看视频 | 九九免费精品 | 中文字幕一区二区三区四区久久 | 日韩欧美视频二区 | 色综合天天综合 | 国产成人精品一区二区三区 | 天堂在线v| 少妇视频一区 | www亚洲精品 | 97超碰精品 | 国产一区二区不卡视频 | 国产精品一区二区在线 | 黄色在线视频网址 | 欧美性生活大片 | 一区三区在线欧 | 久草视频视频在线播放 | 国产一区二区高清 | 中文字幕一区二 | 九九久久婷婷 | 中文字幕在线观看亚洲 | 国产精品久久久久久久久久久久午夜 | 国产免费不卡 | av中文字幕不卡 | 婷婷综合伊人 | 午夜久久 | 精品久久久久一区二区国产 | 高清免费av在线 | 日韩欧美极品 | 婷婷色综合色 | 国产中文在线视频 | 伊色综合久久之综合久久 | 国产成人61精品免费看片 | 黄色毛片一级片 | www.com黄| 亚洲天天做 | 亚洲免费在线看 | 日日精品 | 久久久久女教师免费一区 | 精品一区二区在线观看 | www黄com| 国产一区二区在线观看视频 | 四虎国产精品成人免费影视 | 国产精品久久久久久久久久久久午 | 不卡精品 | 中文字幕乱码视频 | 国产91精品高清一区二区三区 | 黄网站a | 9久久精品| 欧美91片 | 亚洲国产美女久久久久 | 人人玩人人添人人澡97 | 爱爱av网站| 99在线观看精品 | 日韩大陆欧美高清视频区 | 色婷婷激情四射 | 69国产精品视频 | 精品国产久 | 久久99亚洲热视 | 中文区中文字幕免费看 | 欧美一级片免费观看 | 免费日韩 精品中文字幕视频在线 | 精品免费久久久久 | 免费在线观看中文字幕 | 国产精品video爽爽爽爽 | 成人a视频在线观看 | 91视频免费看网站 | 久久亚洲福利视频 | 久草国产在线观看 | 六月丁香婷婷久久 | 操天天操 | 成年人网站免费观看 | 美女网站在线免费观看 | 亚洲日韩欧美一区二区在线 | 亚洲国产免费 | 欧美一区二区三区在线看 | 91 在线视频 | 久久久精品国产一区二区 | 午夜国产福利在线 | 四虎亚洲精品 | 国产福利精品一区二区 | 91精品电影| 久久激情影院 | 久青草视频 | 人人爽人人澡 | 六月色婷婷| 欧美色就是色 | 色噜噜在线观看 | 91黄在线看 | 黄色一级大片免费看 | 久久国产精彩视频 | 久久综合九色 | 91桃色免费观看 | bbbbb女女女女女bbbbb国产 | av色影院 | 国产精品18久久久久久不卡孕妇 | 91视频亚洲| 欧美激情精品久久久久久 | 国产精品久久久久久久久费观看 | 27xxoo无遮挡动态视频 | 久久精品在线视频 | 美女久久网站 | 97视频一区 | 久久99精品久久只有精品 | 99久久激情视频 | 国产精品久久99综合免费观看尤物 | 69中文字幕 | 成年人国产在线观看 | 在线观看精品视频 | 亚洲成人一二三 | 碰超人人 | 久久综合丁香 | 国产中文字幕免费 | aaa免费毛片 | 中文字幕日韩高清 | 一级一级一片免费 | 久久艹艹 | 99色视频在线 | 一级片免费视频 | 日韩视频中文字幕在线观看 | 日韩精品一区二区三区水蜜桃 | 亚洲精品视频在线 | 成人在线免费观看视视频 | 丁香在线视频 | av在线播放一区二区三区 | 久草在线最新免费 | 日韩www在线| 黄色一集片 | 99久久er热在这里只有精品15 | 欧美精品久久久久久久久久丰满 | 在线av资源 | 开心激情婷婷 | 国产精品久久久久久五月尺 | 日韩高清成人在线 | 国产97视频在线 | 九九热视频在线 | 91高清视频在线 | 中日韩欧美精彩视频 | 99久久精品视频免费 | 久久艹在线观看 | 美女黄久久 | 亚洲九九影院 | 最近能播放的中文字幕 | 国产成人精品在线观看 | 国产亚洲字幕 | 91少妇精拍在线播放 | 中文字幕av一区二区三区四区 | 99精品区| 欧美日韩精品区 | 久久激情视频 | 蜜臀av免费一区二区三区 | 狠狠色丁香婷婷综合久小说久 | 在线观看91网站 | 久久精品中文字幕少妇 | 韩日成人av | 精品视频久久 | 国产免费久久久久 | 国产免费久久av | 日韩精选在线观看 | 人人爽久久久噜噜噜电影 | 精品国产诱惑 | 欧美性天天| 久久久国产一区二区三区四区小说 | 日日干夜夜爱 | 特级西西444www大精品视频免费看 | 91精品毛片| 天天爽夜夜爽人人爽一区二区 | 国内小视频 | 天堂网一区二区 | 9在线观看免费高清完整版 玖玖爱免费视频 | 亚洲电影图片小说 | 欧美精品国产综合久久 | 国产精品视频久久 | 人人爱人人添 | 国产黄a三级三级 | 中文字幕第一页在线 | 99九九99九九九视频精品 | 五月天久久激情 | 国产成人精品在线观看 | 亚洲精品在线观看视频 | 午夜视频色 | 国产黄在线| 99精品热视频只有精品10 | 天堂网一区 | 99久久精品久久久久久清纯 | 日韩在线观看免费 | 人人草人| 国产一区网 | 亚洲国产av精品毛片鲁大师 | 日日夜夜精品网站 | 精品国产黄色片 | 久久人人97超碰精品888 | 日韩av片免费在线观看 | 欧美精品亚洲精品 | 中文日韩在线视频 | 国产精品久久一区二区三区, | 久久影院亚洲 | 人人舔人人爽 | 婷婷丁香在线视频 | 香蕉视频在线看 | 在线成人免费 | 国产在线精品视频 | 国产成人一区二区三区影院在线 | 91尤物国产尤物福利在线播放 | 国产黄在线观看 | 久久久久久激情 | 亚洲黄色一级电影 | 精品国产片 | 国产视频高清 | 麻豆91精品91久久久 | 国产精品高清在线 | 超碰在线网 | 成人丁香花 | 青青河边草免费观看完整版高清 | 精品国产成人 | 日韩欧美不卡 | 久草在线资源观看 | 亚洲精品国偷自产在线91正片 | 国产中文字幕在线视频 | 亚洲国产精品人久久电影 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 亚洲视频www | 狠狠色丁香久久婷婷综合五月 | 91亚洲欧美激情 | 美女网站免费福利视频 | 国产尤物视频在线 | 亚洲乱码在线观看 | 久久精品3| 久久国产欧美日韩 | 五月天综合色 | av天天干 | 午夜久久网站 | 黄污网站在线观看 | 视频在线国产 | 欧美色图另类 | 久热色超碰 | 91高清免费在线观看 | 国产99久久久国产精品免费看 | 一本一道波多野毛片中文在线 | 久久精品www人人爽人人 | 欧美精品你懂的 | 久久一本综合 | 99久久久国产精品美女 | 久久综合射 | 亚洲一区日韩 | 欧美一区二区三区特黄 | 亚洲激情中文 | 亚洲 欧美 另类人妖 | 伊人婷婷在线 | 婷婷久久亚洲 | 亚洲视频456 | 亚洲精品一区二区18漫画 | 久久夜色网| 超碰在线亚洲 | 夜色资源站国产www在线视频 | 精品久久91| 久久视频网址 | 最近免费中文字幕大全高清10 | 久久九精品 | 日本在线免费看 | 人人添人人澡人人澡人人人爽 | 日韩性色 | 午夜精品久久久久久久爽 | 亚洲色五月 | 人人看人人| 黄色片软件网站 | 香蕉免费在线 | 国产视频在线观看一区 | 9在线观看免费高清完整版 玖玖爱免费视频 | 亚洲综合成人在线 | 99久久精品午夜一区二区小说 | 在线视频日韩精品 | 国产精品国产精品 | 中文字幕免费观看视频 | 国产日韩精品在线观看 | 中文成人字幕 | 久久婷婷国产色一区二区三区 | 欧美日韩视频在线一区 | 天天操天天玩 | 亚洲伊人网在线观看 | 日韩av福利在线 |