ch32v307 硬件SPI 读写W25Q64 FLASH的问题
//此处注释的方法与正在使用的方法除了一个是自减,一个是自增外完全一致,但是注释的方法却是错误的
static?uint8_t?FLASH_SPI_SendAReceiveByte(uint8_t?data)
{
//????SPITimeout?=?200;
????SPITimeout?=?0;

????while(SPI_I2S_GetFlagStatus(FLASH_SPIx,?SPI_I2S_FLAG_TXE)?==?RESET)//检测上一个字节是否发送完成
????{
//????????SPITimeout--;
//????????if(SPITimeout)
//????????????return?SPI_TIMEOUT_UserCallback(0);
????????SPITimeout++;
????????if(SPITimeout?>?200)
????????????return?SPI_TIMEOUT_UserCallback(0);
????}

????SPI_I2S_SendData(FLASH_SPIx,?data);

//????SPITimeout?=?200;
????SPITimeout?=?0;

????while(SPI_I2S_GetFlagStatus(FLASH_SPIx,?SPI_I2S_FLAG_RXNE)?==?RESET)//检测是否接受到一个字节
????{
//????????SPITimeout--;
//????????if(SPITimeout)
//????????????return?SPI_TIMEOUT_UserCallback(1);
????????SPITimeout++;
????????if(SPITimeout?>?200)
????????????return?SPI_TIMEOUT_UserCallback(1);
????}

????return?SPI_I2S_ReceiveData(FLASH_SPIx);
}

上面的代码,只要把while里面注释的代码换成非注释的,检测接受的while就会出问题,请大神解答

icon_rar.gifSPI-读写FLASH实验.zip

附上实验文件,上面的代码片段在code文件的flash_spi.c文件中,大佬可以看看解答我的疑问

您好,关于if判断语句的执行,当你使用if(SPITimeout)时,只要SPITimeout不为0,就会执行return,因此你这个一开始就会执行return。若你要使用--,建议if判断语句改为if(SPITimeout==0),应该就没问题了。后续若有问题,可通过邮箱(lzs@wch.cn)和我沟通。


感谢大佬,我大概知道问题所在了


只有登录才能回复,可以选择微信账号登录