野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18207|回复: 1

问题求助:关于SPI的一个函数

[复制链接]
发表于 2014-10-9 11:52:38 | 显示全部楼层 |阅读模式
本帖最后由 措海 于 2014-10-9 16:54 编辑

代码如下:(问题在最后)
u32 SPI_FLASH_ReadDeviceID(void)//函数A
{
  u32 Temp = 0;
  SPI_FLASH_CS_LOW();

  SPI_FLASH_SendByte(W25X_DeviceID);//(第一次调用,Flash命令时序第一字节)
  SPI_FLASH_SendByte(Dummy_Byte);//(第二次调用,Flash命令时序第二字节)
  SPI_FLASH_SendByte(Dummy_Byte);//(第三次调用,Flash命令时序第三字节)
  SPI_FLASH_SendByte(Dummy_Byte);//(第四次调用,Flash命令时序第四字节)
  Temp = SPI_FLASH_SendByte(Dummy_Byte);//(第五次调用,Flash命令时序第五字节)

  SPI_FLASH_CS_HIGH();
  return Temp;
}

u8 SPI_FLASH_SendByte(u8 byte)//函数B
{
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//等待发送缓存空
  SPI_I2S_SendData(SPI1, byte);//发送数据
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);//等待接收缓存非空
  return SPI_I2S_ReceiveData(SPI1);
}

问题:SPI在全双工通信中,上面的读取ID函数(函数A)多次调用了下面的函数(函数B);在第五次调用中(即:按Flash命令时序发送第五个字节),从Flash命令表可知有返回值(ID7-ID0),那么‘等待接收缓存非空’的while语句会顺利通过;可是在第一次到第四次的调用中(即:按Flash命令时序发送第一个字节到第四个字节),从Flash命令表中可知没有返回值(至少没有明确表明有无返回值),那么‘等待接收缓存非空’的while语句是怎么通过的????

(第一次提问,不知道问题有没有表述清楚,从编译结果来看的确有返回值,不然程序会一直停在while语句那里,可是。。。。到底是怎么个逻辑呀??!!)
————————————————————————————————————————————————————————
换个问法:我把上面的第一个函数(函数A)改成如下函数。那么如下函数错在哪里?
u32 SPI_FLASH_ReadDeviceID(void)
{
  u32 Temp = 0;
  SPI_FLASH_CS_LOW();

  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//等待发送缓存空
  SPI_I2S_SendData(W25X_DeviceID);
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//等待发送缓存空
  SPI_I2S_SendData(Dummy_Byte);
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//等待发送缓存空
  SPI_I2S_SendData(Dummy_Byte);
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);//等待发送缓存空
  SPI_I2S_SendData(Dummy_Byte);
  Temp = SPI_FLASH_SendByte(Dummy_Byte);//(只调用一次)

  SPI_FLASH_CS_HIGH();
  return Temp;
}






回复

使用道具 举报

发表于 2014-10-9 14:50:30 | 显示全部楼层
怎么会没有返回值,只是你调用的时候没有把返回值赋值到变量中而已,实际上函数也是有返回值的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 00:23 , Processed in 0.030135 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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