OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8007|回复: 3

spi实验 (W25X16)读取状态寄存器 一直是 00

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-12-15
在线时间
0 小时
发表于 2013-12-15 13:39:17 | 显示全部楼层 |阅读模式
在 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

ALIENTEK MINISTM32 实验17 SPI实验.rar

116.64 KB, 下载次数: 415

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-15 23:47:33 | 显示全部楼层
写这个,楼主想达到什么目的啊?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-12-15
在线时间
0 小时
 楼主| 发表于 2013-12-18 00:34:36 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我知道原因了,是没有进行写使能,写状态寄存器函数里没有写使能,而是分开单独有一个写使能函数。诶 总是粗心大意,其实写这个只是想把寄存器的值从串口输出来而已
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2013-12-15
在线时间
0 小时
 楼主| 发表于 2013-12-18 00:35:15 | 显示全部楼层
谢谢原子哥的关心了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 08:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表