标题:
w25q64第一次读状态寄存器有时候失灵,stm32平台
[打印本页]
作者:
小蜜蜂o
时间:
2018-4-29 20:54
标题:
w25q64第一次读状态寄存器有时候失灵,stm32平台
上电后
,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;
}
整个程序贴出来面积太大,就不贴了。
作者:
yxfaigz
时间:
2021-3-5 11:08
我也遇到这个问题
。有大佬知道怎么回事吗
作者:
yxfaigz
时间:
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;
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1