久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6207|回復: 0
收起左側(cè)

16MB的FLASHW25Q128驅(qū)動

[復制鏈接]
ID:75926 發(fā)表于 2015-4-10 17:00 | 顯示全部樓層 |閱讀模式
  1. #define SPI_SCK_LOW() GPIOB->ODR&=~(1<<3)
  2. #define SPI_SCK_HIGH()         GPIOB->ODR|=1<<3

  3. #define SPI_MOSI_LOW()GPIOB->ODR&=~(1<<5)
  4. #define SPI_MOSI_HIGH()GPIOB->ODR|=1<<5

  5. #define SPI_CS_LOW()GPIOB->ODR&=~(1<<14)
  6. #define SPI_CS_HIGH()        GPIOB->ODR|=1<<14

  7. #define SPI_MISO_Read()(GPIOB->IDR&(1<<4))


  8. #define W25X_WriteEnable          0x06     //寫允許命令
  9. #define W25X_WriteDisable          0x04    //禁止命令
  10. #define W25X_ReadStatusReg      0x05   //讀狀態(tài)寄存器
  11. #define W25X_WriteStatusReg      0x01  //寫狀態(tài)寄存器
  12. #define W25X_ReadData                0x03  //讀數(shù)據(jù)
  13. #define W25X_FastReadData         0x0B //快讀
  14. #define W25X_FastReadDual         0x3B  
  15. #define W25X_PageProgram          0x02  //頁寫
  16. #define W25X_BlockErase               0xD8  //快擦除
  17. #define W25X_SectorErase         0x20  //扇區(qū)擦除
  18. #define W25X_ChipErase                            0xC7  //整盤擦除
  19. #define W25X_PowerDown                         0xB9  //低功耗
  20. #define W25X_ReleasePowerDown           0xAB
  21. #define W25X_DeviceID                             0xAB
  22. #define W25X_ManufactDeviceID             0x90
  23. #define W25X_JedecDeviceID                 0x9F


  24. static void SPI_SendByte(uint8_t Byte)         //使用SPI總線發(fā)送1個字節(jié)的數(shù)據(jù)
  25. {
  26. //uint8_t Cnt;
  27. //SPI_SCK_LOW();
  28. //for(Cnt=0;Cnt<8;Cnt++)
  29. //{
  30. //if(Byte&0x80)
  31. //SPI_MOSI_HIGH();
  32. //else
  33. //SPI_MOSI_LOW();
  34. //SPI_SCK_HIGH();
  35. //Byte<<=1;
  36. //SPI_SCK_LOW();
  37. //}
  38. while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
  39. SPI_I2S_SendData(SPI1,Byte);
  40. while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);
  41. SPI_I2S_ReceiveData(SPI1);
  42. }

  43. static uint8_t SPI_ReceiveByte(void)   //使用SPI總線接收1個字節(jié)的數(shù)據(jù)
  44. {
  45. //uint8_t Byte=0,Cnt;
  46. ////GPIOB->ODR|=1<<4;
  47. //for(Cnt=0;Cnt<8;Cnt++)
  48. //{
  49. //SPI_SCK_HIGH();
  50. //Byte<<=1;
  51. //if(SPI_MISO_Read())
  52. //Byte++;
  53. //SPI_SCK_LOW();
  54. //}
  55. //return Byte;
  56. while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
  57. SPI_I2S_SendData(SPI1,0xff);
  58. while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);
  59. return SPI_I2S_ReceiveData(SPI1);
  60. }
  61. /************************FLASH****************************/

  62. uint8_t FLASH_ReadStatusReg(void)   //讀狀態(tài)寄存器
  63. {
  64. uint8_t Status;
  65. SPI_CS_LOW();        
  66. SPI_SendByte(W25X_ReadStatusReg);      
  67. Status=SPI_ReceiveByte();        
  68. SPI_CS_HIGH();     
  69. return Status;
  70. }

  71. void FLASH_WriteEnable(void)
  72. {
  73. SPI_CS_LOW();
  74. SPI_SendByte(W25X_WriteEnable);
  75. SPI_CS_HIGH();
  76. }
  77. void FLASH_WriteByte(uint32_t Address,uint8_t Byte)
  78. {
  79. FLASH_WriteEnable();//改變磁盤的操作都需要寫允許命令
  80. SPI_CS_LOW();
  81. SPI_SendByte(W25X_PageProgram);
  82. SPI_SendByte(Address>>16);
  83. SPI_SendByte(Address>>8);
  84. SPI_SendByte(Address);
  85. SPI_SendByte(Byte);
  86. SPI_CS_HIGH();
  87. while(FLASH_ReadStatusReg()&0x01);
  88. }

  89. void FLASH_ReadByte(uint32_t Address ,uint8_t *pByte)
  90. {
  91. SPI_CS_LOW();
  92. SPI_SendByte(W25X_ReadData);
  93. SPI_SendByte(Address>>16);
  94. SPI_SendByte(Address>>8);
  95. SPI_SendByte(Address);
  96. *pByte=SPI_ReceiveByte();
  97. SPI_CS_HIGH();
  98. }

  99. uint16_t FLASH_ReadID(void)
  100. {
  101. uint16_t Temp=0;
  102. SPI_CS_LOW();
  103. SPI_SendByte(W25X_ManufactDeviceID);
  104. SPI_SendByte(0x00);
  105. SPI_SendByte(0x00);
  106. SPI_SendByte(0x00);
  107. Temp|=SPI_ReceiveByte()<<8;
  108. Temp|=SPI_ReceiveByte();
  109. SPI_CS_HIGH();
  110. return Temp;
  111. }

  112. void FLASH_Erase_Sector(uint32_t Address)
  113. {
  114. FLASH_WriteEnable();
  115. while(FLASH_ReadStatusReg()&0x01);
  116. SPI_CS_LOW();
  117. SPI_SendByte(W25X_SectorErase);
  118. SPI_SendByte(Address>>16);
  119. SPI_SendByte(Address>>8);
  120. SPI_SendByte(Address);
  121. SPI_CS_HIGH();
  122. while(FLASH_ReadStatusReg()&0x01);
  123. }

  124. void FLASH_Wrase_Chip(void)
  125. {
  126. FLASH_WriteEnable();
  127. SPI_SendByte(0x00);
  128. while(FLASH_ReadStatusReg()&0x01);
  129. SPI_CS_LOW();
  130. SPI_SendByte(W25X_ChipErase);
  131. SPI_CS_HIGH();
  132. while(FLASH_ReadStatusReg()&0x01);
  133. }
復制代碼


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产免费一区二区 | 91久久伊人| 性高湖久久久久久久久3小时 | 在线国产精品一区 | 亚洲一区二区三区在线播放 | 欧美一区不卡 | av免费网站在线观看 | 超黄毛片| 美女福利视频网站 | 蜜臀久久99精品久久久久野外 | 第一区在线观看免费国语入口 | 91精品国产一区二区三区动漫 | 亚洲欧美日韩一区二区 | 美国av毛片| ww 255hh 在线观看 | 噜噜噜噜狠狠狠7777视频 | 成人av在线大片 | 美女福利视频一区 | 欧美日韩国产中文 | 日韩欧美精品一区 | 懂色中文一区二区三区在线视频 | 欧美网站一区二区 | 日日碰碰 | 青青草精品视频 | 国产精品亚洲综合 | 欧美一级欧美三级在线观看 | 中文字幕一区二区在线观看 | 色婷婷综合网站 | 国产伦一区二区三区视频 | 日韩一区在线播放 | 日本xx视频免费观看 | av一区二区在线观看 | 国产亚洲欧美在线 | 日韩视频免费看 | 九九热精品视频 | 美女午夜影院 | 在线三级电影 | 中文字幕一级毛片 | 久久亚洲精品国产精品紫薇 | 999热精品 | 日本不卡高清视频 |