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

標題: 16MB的FLASHW25Q128驅動 [打印本頁]

作者: xiaos    時間: 2015-4-10 17:00
標題: 16MB的FLASHW25Q128驅動
  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. }
復制代碼







歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 午夜精品一区二区三区免费视频 | 欧美片网站免费 | 午夜理伦三级理论三级在线观看 | 中文在线视频 | 国产真实精品久久二三区 | 国产在视频一区二区三区吞精 | 九九久久精品 | 亚洲一区二区三区在线播放 | av大片在线 | 国产日韩欧美综合 | 丁香婷婷综合激情五月色 | 国产精品色 | 日韩精品久久一区 | 成人一区二区三区在线观看 | 亚洲一区二区在线视频 | 免费国产视频 | 日本三级全黄三级a | 久久久久国色av免费观看性色 | 午夜精品一区二区三区在线视频 | 一区二区三区四区国产精品 | 99久久精品免费看国产免费软件 | 久久精品男人的天堂 | 亚洲入口 | 欧美日韩a | 国产一区久久久 | 国产成人精品一区二区三区四区 | 99久久99 | www.9191| 小h片免费观看久久久久 | 在线国产欧美 | 一区二区三区精品视频 | 日韩一区不卡 | 天天曰天天曰 | 一级片子 | 日韩视频a | 日韩中文在线 | 毛片99 | 午夜精品久久久久久久星辰影院 | 给我免费的视频在线观看 | www.夜夜草| 免费激情 |