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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6164|回復: 0
打印 上一主題 下一主題
收起左側

16MB的FLASHW25Q128驅動

[復制鏈接]
跳轉到指定樓層
樓主
ID:75926 發表于 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   //讀狀態寄存器
  11. #define W25X_WriteStatusReg      0x01  //寫狀態寄存器
  12. #define W25X_ReadData                0x03  //讀數據
  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  //扇區擦除
  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總線發送1個字節的數據
  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個字節的數據
  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)   //讀狀態寄存器
  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. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色免费观看 | 九九久久精品 | 欧美高清视频 | 日日操av| 福利片一区二区 | 精品1区2区3区 | 蜜臀久久| 91亚洲视频在线 | 国产精品久久久久久久久免费软件 | 中文字幕国产视频 | 国产精品一区二区视频 | h视频免费在线观看 | 黄色一级大片在线免费看产 | 91在线视频在线观看 | 在线观看成人 | 奇米四色在线观看 | 成人精品国产一区二区4080 | 四虎永久在线精品免费一区二 | 欧美在线一区二区三区 | 色综合视频在线 | 久久综合伊人 | 成人精品一区二区 | 亚洲精品一区二区网址 | pacopacomama在线| 国产伦精品一区二区三区精品视频 | 久久精品亚洲成在人线av网址 | 夜夜爽夜夜操 | 91精品国产自产在线老师啪 | 久久网站黄 | 久久久久久999 | 福利视频一二区 | 国产日韩一区二区三区 | 久视频在线观看 | 日本一道本视频 | 久久精品成人 | 中文字幕一区二区三区四区 | 成人不卡| 免费成人国产 | 亚洲一区二区三区四区五区中文 | 日韩在线精品 | chengrenzaixian|