野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16519|回复: 5

SPI_flash 程序的写FLASH有疑问。谁能帮我解释一下。

[复制链接]
发表于 2014-5-30 14:59:41 | 显示全部楼层 |阅读模式
u8 SPI_FLASH_SendByte(u8 byte)
{
  /* Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
  /* Send byte through the SPI1 peripheral */
  SPI_I2S_SendData(SPI1, byte);
  /* Wait to receive a byte */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//等待接受寄存器非空
  /* Return the byte read from the SPI bus */
  return SPI_I2S_ReceiveData(SPI1);
}

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//等待接受寄存器非空

写个字节后,如果FLASH没给数据那岂不是一直在等了????

主题推荐

回复

使用道具 举报

发表于 2014-5-30 15:38:27 | 显示全部楼层
是的,所以想要把程序写得更完善可以添加一个时间判断,如果等了很长一段时间都还没有数据那就跳过本行代码,就不会影响到其它了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-30 15:43:58 | 显示全部楼层
解凝然 发表于 2014-5-30 15:38
是的,所以想要把程序写得更完善可以添加一个时间判断,如果等了很长一段时间都还没有数据那就跳过本行代码 ...

这是例程啊,可以跑的啊,我是不明白这样也可以跑呢
回复 支持 反对

使用道具 举报

发表于 2014-5-30 15:49:21 | 显示全部楼层
有心人 发表于 2014-5-30 15:43
这是例程啊,可以跑的啊,我是不明白这样也可以跑呢

是可以跑的啊,但就是不完善,假如板子上的FLASH坏了,程序就会一直卡在这里,但如果FLASH没有坏的话,程序就能正常跑
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-30 18:38:26 | 显示全部楼层
祁羽彤 发表于 2014-5-30 15:49
是可以跑的啊,但就是不完善,假如板子上的FLASH坏了,程序就会一直卡在这里,但如果FLASH没有坏的话,程 ...

哦哦。明白你的意思,我是想问,如果我第一个字节写的是20(扇区擦除),执行
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

  SPI_I2S_SendData(SPI1, 0x20);

  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//等待接受寄存器非空


写完这个指令编码,从机不会回复任何数据的吧????不会回复数据,那接收缓存区一直为空,那就一直在等待,
这样我怎么发第二个字节出去啊?

扇区擦除是要发送完指令编码+地址+地址+地址,从机没有数据回复的,那我发完第一个字节后就一直在等待了,但实际上是可以的,理论上不懂。


回复 支持 反对

使用道具 举报

发表于 2015-5-2 16:45:12 | 显示全部楼层
我有个疑问啊    如楼主所述,发送给FLASH内容以后,就等待接收一个byte,请问接收的是什么东西??????????在线等   急
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-10-5 15:25 , Processed in 0.047845 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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