亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? w25x16.h

?? 51單片機SD卡TFT彩屏顯示圖片
?? H
字號:
#define SPI_FLASH_CS_H GPIOA->BSRR=1<<2  
#define	SPI_FLASH_CS_L GPIOA->BRR=1<<2
#define FLASH_ID 0XEF14
//指令表
#define W25X_WriteEnable		0x06 
#define W25X_WriteDisable		0x04 
#define W25X_ReadStatusReg		0x05 
#define W25X_WriteStatusReg		0x01 
#define W25X_ReadData			0x03 
#define W25X_FastReadData		0x0B 
#define W25X_FastReadDual		0x3B 
#define W25X_PageProgram		0x02 
#define W25X_BlockErase			0xD8 
#define W25X_SectorErase		0x20 
#define W25X_ChipErase			0xC7 
#define W25X_PowerDown			0xB9 
#define W25X_ReleasePowerDown	0xAB 
#define W25X_DeviceID			0xAB 
#define W25X_ManufactDeviceID	0x90 
#define W25X_JedecDeviceID		0x9F
//讀取SPI_FLASH的狀態寄存器 
//BIT7  6   5   4   3   2   1   0 
//SPR   RV  TB BP2 BP1 BP0 WEL BUSY 
//SPR:默認0,狀態寄存器保護位,配合WP使用 
//TB,BP2,BP1,BP0:FLASH區域寫保護設置 
//WEL:寫使能鎖定 
//BUSY:忙標記位(1,忙;0,空閑) 
//默認:0x00 
u8 SPI_Flash_ReadSR(void)    
{   
u8 byte=0;    
SPI_FLASH_CS_L;                            //使能器件    
SPIx_ReadWriteByte(W25X_ReadStatusReg);    //發送讀取狀態寄存器命令     
byte=SPIx_ReadWriteByte(0Xff);             //讀取一個字節   
SPI_FLASH_CS_H;                            //取消片選      
return byte;    
}  
//寫SPI_FLASH狀態寄存器 
//只有SPR,TB,BP2,BP1,BP0(bit 7,5,4,3,2)可以寫!!! 
void SPI_FLASH_Write_SR(u8 sr)    
{    
SPI_FLASH_CS_L;                            //使能器件    
SPIx_ReadWriteByte(W25X_WriteStatusReg);   //發送寫取狀態寄存器命令     
SPIx_ReadWriteByte(sr);               //寫入一個字節   
SPI_FLASH_CS_H;                            //取消片選             
}    
//SPI_FLASH寫使能 
//將WEL置位    
void SPI_FLASH_Write_Enable(void)    
{ 
SPI_FLASH_CS_L;                            //使能器件    
    SPIx_ReadWriteByte(W25X_WriteEnable);      //發送寫使能   
SPI_FLASH_CS_H;                            //取消片選             
}  
//SPI_FLASH寫禁止 
//將WEL清零   
void SPI_FLASH_Write_Disable(void)    
{   
SPI_FLASH_CS_L;                            //使能器件    
    SPIx_ReadWriteByte(W25X_WriteDisable);     //發送寫禁止指令     
SPI_FLASH_CS_H;                            //取消片選             
}
//等待空閑 
void SPI_Flash_Wait_Busy(void)    
{    
while ((SPI_Flash_ReadSR()&0x01)==0x01);   // 等待BUSY位清空 
}   
//進入掉電模式 
void SPI_Flash_PowerDown(void)    
{  
   SPI_FLASH_CS_L;                            //使能器件    
    SPIx_ReadWriteByte(W25X_PowerDown);        //發送掉電命令   
SPI_FLASH_CS_H;                            //取消片選             
    delay_us(3);                               //等待TPD   
}    
//喚醒 
void SPI_Flash_WAKEUP(void)    
{   
   SPI_FLASH_CS_L;                            //使能器件    
    SPIx_ReadWriteByte(W25X_ReleasePowerDown);   //  send W25X_PowerDown command 0xAB     
SPI_FLASH_CS_H;                            //取消片選             
    delay_us(3);                               //等待TRES1 
}  
//擦除一個扇區 
//Dst_Addr:扇區地址 0~511 for w25x16 
//擦除一個山區的最少時間:150ms 
void SPI_Flash_Erase_Sector(u32 Dst_Addr)    
{    
Dst_Addr*=4096; 
    SPI_FLASH_Write_Enable();                  //SET WEL    
    SPI_Flash_Wait_Busy();    
   SPI_FLASH_CS_L;                            //使能器件    
    SPIx_ReadWriteByte(W25X_SectorErase);      //發送扇區擦除指令  
    SPIx_ReadWriteByte((u8)((Dst_Addr)>>16));  //發送24bit地址     
    SPIx_ReadWriteByte((u8)((Dst_Addr)>>8));    
    SPIx_ReadWriteByte((u8)Dst_Addr);   
SPI_FLASH_CS_H;                            //取消片選             
    SPI_Flash_Wait_Busy();       //等待擦除完成 
}
  
//讀取芯片ID 
//返回值如下:     
//0XEF13,表示芯片型號為W25Q80   
//0XEF14,表示芯片型號為W25Q16     
//0XEF15,表示芯片型號為W25Q32   
//0XEF16,表示芯片型號為W25Q64       
u16 SPI_Flash_ReadID(void) 
{ 
u16 Temp = 0;    
SPI_FLASH_CS_L;      
SPIx_ReadWriteByte(0x90);//發送讀取ID命令      
SPIx_ReadWriteByte(0x00);       
SPIx_ReadWriteByte(0x00);       
SPIx_ReadWriteByte(0x00);        
Temp|=SPIx_ReadWriteByte(0xFF)<<8;   
Temp|=SPIx_ReadWriteByte(0xFF);   
SPI_FLASH_CS_H;      
return Temp; 
}        
//讀取SPI FLASH   
//在指定地址開始讀取指定長度的數據 
//pBuffer:數據存儲區 
//ReadAddr:開始讀取的地址(24bit) 
//NumByteToRead:要讀取的字節數(最大65535) 
void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)    
{  
  u16 i;   
#ifdef OS_CRITICAL_METHOD   //如果OS_CRITICAL_METHOD定義了,說明使用ucosII了. 
OS_ENTER_CRITICAL();//停止調度 
#endif         
SPI_FLASH_CS_L;                            //使能器件    
    SPIx_ReadWriteByte(W25X_ReadData);         //發送讀取命令    
    SPIx_ReadWriteByte((u8)((ReadAddr)>>16));  //發送24bit地址     
    SPIx_ReadWriteByte((u8)((ReadAddr)>>8));    
    SPIx_ReadWriteByte((u8)ReadAddr);    
    for(i=0;i<NumByteToRead;i++) 
{  
        pBuffer[i]=SPIx_ReadWriteByte(0XFF);   //循環讀數   
    } 
SPI_FLASH_CS_H;                            //取消片選  
#ifdef OS_CRITICAL_METHOD   //如果OS_CRITICAL_METHOD定義了,說明使用ucosII了. 
OS_EXIT_CRITICAL();//準許調度 
#endif                
}   
//SPI在一頁(0~65535)內寫入少于256個字節的數據 
//在指定地址開始寫入最大256字節的數據 
//pBuffer:數據存儲區 
//WriteAddr:開始寫入的地址(24bit) 
//NumByteToWrite:要寫入的字節數(最大256),該數不應該超過該頁的剩余字節數!!!   
void SPI_Flash_Write_Page(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite) 
{ 
  u16 i;   
    SPI_FLASH_Write_Enable();                  //SET WEL  
SPI_FLASH_CS_L;                            //使能器件    
    SPIx_ReadWriteByte(W25X_PageProgram);      //發送寫頁命令    
    SPIx_ReadWriteByte((u8)((WriteAddr)>>16)); //發送24bit地址     
    SPIx_ReadWriteByte((u8)((WriteAddr)>>8));    
    SPIx_ReadWriteByte((u8)WriteAddr);    
    for(i=0;i<NumByteToWrite;i++)SPIx_ReadWriteByte(pBuffer[i]);//循環寫數   
SPI_FLASH_CS_H;                            //取消片選  
SPI_Flash_Wait_Busy();    //等待寫入結束 
}  
//無檢驗寫SPI FLASH  
//必須確保所寫的地址范圍內的數據全部為0XFF,否則在非0XFF處寫入的數據將失敗! 
//具有自動換頁功能  
//在指定地址開始寫入指定長度的數據,但是要確保地址不越界! 
//pBuffer:數據存儲區 
//WriteAddr:開始寫入的地址(24bit) 
//NumByteToWrite:要寫入的字節數(最大65535) 
//CHECK OK 
void SPI_Flash_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)    
{      
u16 pageremain;     
pageremain=256-WriteAddr%256; //單頁剩余的字節數        
if(NumByteToWrite<=pageremain)pageremain=NumByteToWrite;//不大于256個字節 
while(1) 
{     
SPI_Flash_Write_Page(pBuffer,WriteAddr,pageremain); 
if(NumByteToWrite==pageremain)break;//寫入結束了 
  else //NumByteToWrite>pageremain 
{ 
pBuffer+=pageremain; 
WriteAddr+=pageremain; 

NumByteToWrite-=pageremain;   //減去已經寫入了的字節數 
if(NumByteToWrite>256)pageremain=256; //一次可以寫入256個字節 
else pageremain=NumByteToWrite;    //不夠256個字節了 
} 
};      
}  
//寫SPI FLASH   
//在指定地址開始寫入指定長度的數據 
//該函數帶擦除操作! 
//pBuffer:數據存儲區 
//WriteAddr:開始寫入的地址(24bit) 
//NumByteToWrite:要寫入的字節數(最大65535)   
#ifndef SRAMIN    
u8 SPI_FLASH_BUFFER[4096]; 
#endif 

void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)    
{  
u32 secpos; 
u16 secoff; 
u16 secremain;     
  u16 i;     
u8 * SPI_FLASH_BUF; 
#ifdef OS_CRITICAL_METHOD   //如果OS_CRITICAL_METHOD定義了,說明使用ucosII了. 
OS_ENTER_CRITICAL();//停止調度 
#endif 

#ifdef SRAMIN 
SPI_FLASH_BUF=mymalloc(SRAMIN,4096);//申請內存 
if(SPI_FLASH_BUF==NULL)return ;//申請失敗 
#else 
    SPI_FLASH_BUF=SPI_FLASH_BUFFER; 
#endif 

  secpos=WriteAddr/4096;//扇區地址 0~511 for w25x16 
secoff=WriteAddr%4096;//在扇區內的偏移 
secremain=4096-secoff;//扇區剩余空間大小    

if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//不大于4096個字節 
while(1)  
{ 
SPI_Flash_Read(SPI_FLASH_BUF,secpos*4096,4096);//讀出整個扇區的內容 
for(i=0;i<secremain;i++)//校驗數據 
{ 
if(SPI_FLASH_BUF[secoff+i]!=0XFF)break;//需要擦除      
} 
if(i<secremain)//需要擦除 
{ 
SPI_Flash_Erase_Sector(secpos);//擦除這個扇區 
for(i=0;i<secremain;i++)    //復制 
{ 
SPI_FLASH_BUF[i+secoff]=pBuffer[i];    
} 
SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//寫入整個扇區   

}else SPI_Flash_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; //下一個扇區還是寫不完 
else secremain=NumByteToWrite; //下一個扇區可以寫完了 
}   
}; 

#ifdef SRAMIN 
myfree(SRAMIN,SPI_FLASH_BUF);//釋放內存     
#endif 

#ifdef OS_CRITICAL_METHOD   //如果OS_CRITICAL_METHOD定義了,說明使用ucosII了. 
OS_EXIT_CRITICAL();//準許調度 
#endif                

} 
//擦除整個芯片 
//整片擦除時間: 
//W25X16:25s  
//W25X32:40s  
//W25X64:40s  
//等待時間超長... 
void SPI_Flash_Erase_Chip(void)    
{                                              
    SPI_FLASH_Write_Enable();                  //SET WEL  
    SPI_Flash_Wait_Busy();    
   SPI_FLASH_CS_L;                            //使能器件    
    SPIx_ReadWriteByte(W25X_ChipErase);        //發送片擦除命令   
SPI_FLASH_CS_H;                            //取消片選             
SPI_Flash_Wait_Busy();       //等待芯片擦除結束 
}    
   


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本韩国精品一区二区在线观看| 久久奇米777| 日韩欧美国产麻豆| 国产精品女主播在线观看| 亚洲国产另类精品专区| 国产一区二区三区黄视频| 欧美性一二三区| 国产日本一区二区| 香蕉成人伊视频在线观看| 成人福利视频网站| 精品奇米国产一区二区三区| 一区二区激情视频| 成人黄色在线视频| www久久精品| 蜜桃视频一区二区三区| 欧美唯美清纯偷拍| 日韩理论片中文av| 丰满亚洲少妇av| 久久日韩精品一区二区五区| 偷窥少妇高潮呻吟av久久免费| 99久久精品久久久久久清纯| 久久精品一区二区三区av| 日韩 欧美一区二区三区| 欧美丝袜丝交足nylons图片| 中文字幕制服丝袜一区二区三区| 国产一区91精品张津瑜| 日韩一二三区视频| 日精品一区二区| 欧美日韩黄色影视| 亚洲国产精品久久艾草纯爱| 色婷婷综合五月| 日韩毛片在线免费观看| 北条麻妃一区二区三区| 欧美国产禁国产网站cc| 国产v日产∨综合v精品视频| 国产午夜精品久久久久久免费视| 狠狠色综合色综合网络| 久久综合久久综合九色| 国内精品免费**视频| 精品福利一区二区三区| 国产自产高清不卡| 国产亚洲精品超碰| proumb性欧美在线观看| 18欧美乱大交hd1984| 色婷婷国产精品| 亚洲一二三区不卡| 91精品国产色综合久久不卡电影 | 在线观看视频91| 夜夜精品浪潮av一区二区三区| 一本一本大道香蕉久在线精品| 亚洲少妇最新在线视频| 91国产视频在线观看| 亚洲va国产天堂va久久en| 7777精品久久久大香线蕉| 另类成人小视频在线| 久久免费看少妇高潮| 99久久亚洲一区二区三区青草| 亚洲日本va午夜在线电影| 欧美午夜电影在线播放| 日本美女一区二区三区| 国产日韩亚洲欧美综合| 波多野结衣91| 视频一区视频二区中文字幕| 精品免费99久久| jlzzjlzz欧美大全| 五月天亚洲精品| 久久午夜电影网| 在线亚洲欧美专区二区| 美女脱光内衣内裤视频久久网站 | 亚洲欧美经典视频| 欧美高清性hdvideosex| 国产精品一级二级三级| 亚洲一区二区三区爽爽爽爽爽 | 国产精品资源网| 亚洲欧美日韩成人高清在线一区| 678五月天丁香亚洲综合网| 久久精品噜噜噜成人av农村| 中文字幕第一区| 欧美日韩国产精品自在自线| 国产麻豆视频一区| 亚洲三级视频在线观看| 日韩午夜激情视频| 91美女精品福利| 麻豆91精品91久久久的内涵| 国产精品午夜春色av| 8v天堂国产在线一区二区| 99视频一区二区三区| 美美哒免费高清在线观看视频一区二区| 国产欧美日韩精品一区| 91麻豆精品国产91久久久久久久久| 国产精品一区二区三区乱码| 天天爽夜夜爽夜夜爽精品视频| 中文一区二区完整视频在线观看| 91麻豆精品国产自产在线| 成人av网站在线| 国产主播一区二区| 丝袜美腿亚洲一区二区图片| ...xxx性欧美| 亚洲国产精品99久久久久久久久| 日韩一区国产二区欧美三区| 91福利视频网站| 成人午夜伦理影院| 国产美女精品一区二区三区| 奇米四色…亚洲| 日欧美一区二区| 亚洲大片在线观看| 亚洲精品中文在线影院| 国产精品免费网站在线观看| 久久久天堂av| 久久一二三国产| 精品国产sm最大网站| 欧美一区二区在线视频| 欧美精品高清视频| 欧美日韩一区高清| 欧美日韩1区2区| 欧美日韩色综合| 欧美绝品在线观看成人午夜影视| 91猫先生在线| 欧美三区在线观看| 欧美久久一区二区| 337p亚洲精品色噜噜噜| 91精品国产一区二区| 在线不卡中文字幕| 欧美一卡2卡3卡4卡| 日韩精品一区二区三区老鸭窝| 日韩亚洲欧美综合| 久久综合给合久久狠狠狠97色69| 久久在线观看免费| 国产亚洲欧洲一区高清在线观看| 久久久久久99久久久精品网站| 久久久另类综合| 欧美国产日本韩| 亚洲免费av高清| 亚洲成av人片在www色猫咪| 青青国产91久久久久久| 久久国产人妖系列| 国产成人精品一区二区三区四区 | 欧美激情中文字幕| 国产精品无码永久免费888| 中文字幕日韩一区| 亚洲午夜影视影院在线观看| 日韩经典中文字幕一区| 极品尤物av久久免费看| 国产91富婆露脸刺激对白| 99re成人精品视频| 欧美日韩久久久久久| 精品盗摄一区二区三区| 成人免费一区二区三区在线观看| 亚洲激情图片一区| 老司机午夜精品| 92国产精品观看| 这里只有精品99re| 国产午夜精品久久久久久久 | 国产乱妇无码大片在线观看| 99精品视频在线免费观看| 7777精品伊人久久久大香线蕉最新版| 日韩精品影音先锋| 亚洲精品欧美专区| 久久91精品国产91久久小草| 97精品视频在线观看自产线路二| 欧美精品一二三区| 国产精品美女久久福利网站 | 日本精品视频一区二区三区| 91精品国产综合久久香蕉麻豆| 中文字幕的久久| 美日韩一区二区| 一本色道久久综合精品竹菊| 日韩精品影音先锋| 亚洲精品v日韩精品| 久久精品国产**网站演员| 91老师片黄在线观看| 久久一夜天堂av一区二区三区| 亚洲成人激情社区| av亚洲精华国产精华| 欧美成人vps| 午夜视频在线观看一区| 91在线免费播放| 国产午夜亚洲精品不卡| 免费看黄色91| 欧美日韩在线免费视频| 亚洲欧洲国产日本综合| 国产麻豆9l精品三级站| 欧美丰满少妇xxxxx高潮对白| 国产精品免费丝袜| 国产福利精品一区| www亚洲一区| 经典三级一区二区| 欧美一级电影网站| 首页国产丝袜综合| 欧美性一二三区| 亚洲欧美日本在线| 91一区一区三区| 国产精品久线观看视频| 国产成人综合网站| 国产日韩欧美综合在线| 国产精品一二三区在线| 精品av久久707| 国产精品18久久久久久久久| 精品福利av导航| 国产一区999|