在 ALIENTEK MINISTM32 实验17 SPI实验 中只把test 中的循环代码改变了,希望能写一次状态寄存器,再读出状态寄存器,但是一直都是读出0x00
用的都是原子哥写好的函数
代码更改如下
while(1)
{
u8 spi_1=0;
SPI_FLASH_Write_SR(0x0C); //写状态寄存器
spi_1=SPI_Flash_ReadSR(); //读取状态寄存器
USART1->DR=spi_1; //串口发送状态寄存器
while((USART1->SR&0X40)==0);//等待发送结束
delay_ms(1000);//延时1s
if(1)//i==20
{
LED0=!LED0;//提示系统正在运行
i=0;
}
}
对于
读取状态寄存器 函数我看了一下,里面是先
发送读取状态寄存器命令,然后再读取。不明白为什么不直接读取(
byte=SPIx_ReadWriteByte(W25X_ReadStatusReg); )
SPIx_ReadWriteByte(W25X_ReadStatusReg); //发送读取状态寄存器命令 byte=SPIx_ReadWriteByte(0Xff); //读取一个字节
//读取SPI_FLASH的状态寄存器
//BIT7 6 5 4 3 2 1 0
//SPR RV TB BP2 BP1 BP0 WEL BUSY
//SPR:默认0,状态寄存器保护位,配合WP使用
//TB,BP2,BP1,BP0:FLASH区域写保护设置
//WEL:写使能锁定
//BUSY:忙标记位(1,忙;0,空闲)
//默认:0x00
u8 SPI_Flash_ReadSR(void)
{
u8 byte=0;
SPI_FLASH_CS=0; //使能器件
SPIx_ReadWriteByte(W25X_ReadStatusReg); //发送读取状态寄存器命令
byte=SPIx_ReadWriteByte(0Xff); //读取一个字节
SPI_FLASH_CS=1; //取消片选
return byte;
}
我将
读取SPI_FLASH的状态寄存器 函数做了更改就会一直读出0xFF
u8 SPI_Flash_ReadSR(void)
{
u8 byte=0;
SPI_FLASH_CS=0; //使能器件
byte=SPIx_ReadWriteByte(W25X_ReadStatusReg); //发送读取状态寄存器命令
// byte=SPIx_ReadWriteByte(0Xff); //读取一个字节
SPI_FLASH_CS=1; //取消片选
return byte;
}
不知道这是何解? 在附上原子哥的源代码,希望有高手指点1 2
|