求助,搞了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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
W25QXX_CS_PIN_WRITE(0);
spi_read_write_byte(W25X_WAKE_UP);
W25QXX_CS_PIN_WRITE(1);
delay_us(1);
}
试下这句话
谢谢。 我不做读写的操作, 在main 里面指放 wait_busy 这个函数,也会死在里面。
我在wait_busy函数里用串口把 寄存器 的值发出来,发现=08,有点奇怪,最后一位busy确实是0, 但是就是跳不出while循环。。
我怀疑是不是Eclipse的GCC编译器对这个函数编译哪里出错了。 我改成全局变量,加上volatile都没用。
一周热门 更多>