本人新学STM32,想通过SPI对AT45DB161D进行读写,求大神指导...

2019-07-14 23:06发布

想要完成最简单的功能,Flash写满第一页,再把第一页的数据读出来,可是读的时候数据全是00,请大神指点,程序如下:
#include"main.h"
intmain(void)
{
       u8 Read[256];
       u8 Write[256];
       int i;
      
       SPI_Flash_Init();
       USART_Configuration();
      
       for(i=0;i<256;i++)
       {
             Write=i;
       }
       FlashPageWrite(0,&Write[0]);
       FlashPageRead(0,&Read[0]);
}
voidFlashPageWrite(u16 page,u8 *Data)               //写一整页

{
       u16 i;
       FlashWaitBusy();
       AT_CS_LOW();
       SPI2_RWByte(BUFFER_2_WRITE);        // 写入第二缓冲区

       SPI2_RWByte(0x00);
       SPI2_RWByte(0x00);
       SPI2_RWByte(0x00);
       for(i=0;i<SPI_Flash_PageSize;i++)
       {
               SPI2_RWByte(Data);
       }
       AT_CS_HIGH();               
       if ( page < 2048)
       {
               AT_CS_LOW();
              SPI2_RWByte(B2MM_PAGEERASE);   //将第二缓冲区数据写入主储存器,带擦除

              SPI2_RWByte((u8)(page>>6));
              SPI2_RWByte((u8)(page<<2));

               SPI2_RWByte(0x00);
               AT_CS_HIGH();
               FlashWaitBusy();
       }        
}

voidFlashPageRead(u16 page,u8 *Data)
{
       u16 i;        
       FlashWaitBusy();
       AT_CS_LOW();
       SPI2_RWByte(PAGE_READ);                      //页读

       SPI2_RWByte((u8)(page>>6));
         SPI2_RWByte((u8)(page<<2));
         SPI2_RWByte(0x00);
         SPI2_RWByte(0x00);
         SPI2_RWByte(0x00);
         SPI2_RWByte(0x00);
         SPI2_RWByte(0x00);
         for(i=0;i<SPI_Flash_PageSize;i++)
       {
               Data=SPI2_RWByte(Dummy);       //读取一个字节

       }
       AT_CS_HIGH();        
}

u8SPI2_RWByte(u8 byte)
{
       while((SPI2->SR&SPI_I2S_FLAG_TXE)==RESET);
       SPI2->DR = byte;
       while((SPI2->SR&SPI_I2S_FLAG_RXNE)==RESET);
       return(SPI2->DR);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。