求助:原子哥例程写W25Q16死在while

2019-07-20 16:25发布

求助,搞了3天了,多谢!
编译环境:ECLIPSE+GCC
移植的HAL库例程,操作W25Q16, 总是死在读寄存器的While循环里。 完全移植的原子哥的例程。
是编译器问题?编译器优化选项选择的None。
1,死在下面的While里,  我加了一个指示灯,一直在闪。 函数ReadSR返回的byte我用串口发出来是08。按道理不应该停在while里?
2,第二个问题是读W25Q16寄存器1值是08,  写入00,读出来还是08。。。。。?  写函数也是例程中的函数。
3,W25Q16读倒是能读,全是FF。


//等待空闲
void W25QXX_Wait_Busy(void)
{
        while((W25QXX_ReadSR(1)&0x01)==0x01);   // 等待BUSY位清空
        //Delay(200);
}

uint8_t W25QXX_ReadSR(uint8_t regno)
{
        uint8_t byte=0,command=0;
    switch(regno)
    {
        case 1:
            command=W25X_ReadStatusReg1;    //读状态寄存器1指令
            break;
        case 2:
            command=W25X_ReadStatusReg2;    //读状态寄存器2指令
            break;
        case 3:
            command=W25X_ReadStatusReg3;    //读状态寄存器3指令
            break;
        default:
            command=W25X_ReadStatusReg1;
            break;
    }
        W25QXX_CS_L;//使能器件
        Led2_on();
        Delay(100);
        SPI1_ReadWriteByte(command);            //发送读取状态寄存器命令
        byte=SPI1_ReadWriteByte(0Xff);          //读取一个字节
        W25QXX_CS_H;//取消片选
        Led2_off();
        Delay(100);
        return byte;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
xuejianhua1986
2019-07-21 19:48
冰封嗜魔 发表于 2017-3-3 09:51
void w25qxx_wake_up(void)   
{  
        W25QXX_CS_PIN_WRITE(0);       

不行啊。  我现在是2个问题,  第一个是写寄存器写不进去,读出来总是08,我上面的帖子有写。

第二个问题是貌似编译器对下面的函数过敏,W25QXX_ReadSR(1)=0x08, 但是while还会一直运行。
void W25QXX_Wait_Busy(void)
{
        while((W25QXX_ReadSR(1)&0x01)==0x01);   // 等待BUSY位清空
        //Delay(200);
}

一周热门 更多>