欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5908|回復: 2
收起左側

w25q64第一次讀狀態寄存器有時候失靈,stm32平臺

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


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


回復

使用道具 舉報

ID:391781 發表于 2021-3-5 11:08 | 顯示全部樓層
我也遇到這個問題。有大佬知道怎么回事嗎
回復

使用道具 舉報

ID:391781 發表于 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);             //此處斷點,循環讀出FLASH_Status =0xFF,導致卡死在這里。
  }
  while ((FLASH_Status & WIP_Flag) == SET); /* Write in progress */

  SPI_FLASH_CS_HIGH();
}

其中WIP_Flag=0x01;  
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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