SPI[FLASH]扇区擦除后,读出来全都是0的问题解决

 

原因是没有在扇区擦除的最后加上等待函数和最前面要加上使能函数【注意等待函数的位置,一定要在最后,不然也是报错】

使能函数

/**
 * @brief  向FLASH发送 写使能 命令
 * @param  none
 * @retval none
 */
void SPI_FLASH_WriteEnable(void)
{
	/* 通讯开始:CS低 */
	FLASH_SPI_CS_LOW;

	/* 发送写使能命令*/
	SPI_FLASH_Send_Byte(W25X_WriteEnable);

	/*通讯结束:CS高 */
	FLASH_SPI_CS_HIGH;
}

等待函数

void SPI_WaitForWriteEnd(void)

{

    uint8_t status = 0;

    //片选使能

    FLASH_SPI_CS_LOW;

    SPI_FLASH_Send_Byte(READ_STATUS);

    do

    {

        status = SPI_FLASH_Send_Byte(DUMMY);



    } while ((status & 0x01) == 1); //当S0为1时,就说明总线在忙,所以说明还有程序还在运行,

 

    FLASH_SPI_CS_HIGH;

}

最后的擦除结果

void SPI_Sector_Erase(uint32_t addr)

{



    FLASH_SPI_CS_LOW;

    SPI_FLASH_Send_Byte(Sector_Erase);

    SPI_FLASH_Send_Byte((uint8_t)((addr >> 16) & 0xff));

    SPI_FLASH_Send_Byte((uint8_t)((addr >> 8) & 0xff));

    SPI_FLASH_Send_Byte((uint8_t)((addr >> 0) & 0xff));

    FLASH_SPI_CS_HIGH;

    SPI_WaitForWriteEnd();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值