找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

w25q64第一次讀狀態(tài)寄存器有時候失靈,stm32平臺

[復制鏈接]
跳轉到指定樓層
樓主
ID:98591 發(fā)表于 2018-4-29 20:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
上電后,stm32f103——spi接口第一次讀取25q64的的狀態(tài)寄存器,全速運行,會一直讀不到狀態(tài)寄存器,讀到0xff。使用swd調試單步運行時,讀2-5次就能讀出來了。
能讀出來后再次讀就能正常讀了。下載到板子上運行,有時候能正常,有時候又讀不到導致卡死在程序的循環(huán)里。
感覺我的程序好像沒問題啊,嘗試了好多方法,還是這樣。不知道是不是ic的問題。
//SPI2_FLAG_BSY這些都是我對寄存器位操作代碼封裝的宏定義,字面理解,spi2的標志位_忙位&bit1(x)


#include <gpioG.h>
#include <map.h>
#include <spi2.h>
u8 w2564_sr()//返回狀態(tài)寄存器的值
{
        while(SPI2_FLAG_BSY);//SPI2_FLAG_BSY這些都是我對寄存器位操作代碼封裝的宏定義
        PG13OUT=0;     //gpio手動控制w2564片選電平=0
        
SPI2_DR(0X05);//命令:讀狀態(tài)寄存器
        while(!SPI2_FLAG_TXE);
        while(SPI2_FLAG_BSY);
        SPI2_DR(0X55);//發(fā)送一個無效數(shù)據(jù),為從設備輸出數(shù)據(jù)提供時鐘
        while(!SPI2_FLAG_TXE);
        while(SPI2_FLAG_BSY);       
        PG13OUT=1;
        return (SPI2->DR);
}
void delay_busy()
{
        u8 k;
loop:        k=w2564_sr();//經(jīng)常全速運行會死在這個循環(huán)里,要單步執(zhí)行才出的來,脫機板子上運行時來時不來
        if(k&0x01)      //檢查是否處于忙狀態(tài)
                goto loop;
}
整個程序貼出來面積太大,就不貼了。


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

使用道具 舉報

沙發(fā)
ID:391781 發(fā)表于 2021-3-5 11:08 | 只看該作者
我也遇到這個問題。有大佬知道怎么回事嗎
回復

使用道具 舉報

板凳
ID:391781 發(fā)表于 2021-3-5 11:18 | 只看該作者
void SPI_FLASH_WaitForWriteEnd(void)
{
  uint8_t FLASH_Status = 0;

  SPI_FLASH_CS_LOW();

  SPI_FLASH_SendByte(0x05);

  do
  {
    FLASH_Status = SPI_FLASH_SendByte(Dummy_Byte);             //此處斷點,循環(huán)讀出FLASH_Status =0xFF,導致卡死在這里。
  }
  while ((FLASH_Status & WIP_Flag) == SET); /* Write in progress */

  SPI_FLASH_CS_HIGH();
}

其中WIP_Flag=0x01;  
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表