野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21402|回复: 5

关于野火ISO SPI 例程的一个疑问

[复制链接]
发表于 2014-8-7 19:24:20 | 显示全部楼层 |阅读模式
首先 发送和接收函数 都有返回值  (为什么不能写成 发送函数没有返回值,接受函数返回接收到的值)

其次读取函数: 读取函数中调用了发送函数,并返回了发送函数的数据
u8 SPI_FLASH_ReadByte(void)
{
  return (SPI_FLASH_SendByte(Dummy_Byte));
}

再次 发送函数中也有接收函数的语句
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);
}

为什么不能不能把发送和接收的部分分开写,
写成如下形式:
u8 SPI_FLASH_ReadByte(void)
{
   /* 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);
}

void 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);
}


回复

使用道具 举报

发表于 2014-8-8 09:17:08 | 显示全部楼层
本来发送数据的时候,SPI就会有返回值
回复 支持 反对

使用道具 举报

发表于 2014-8-8 09:55:26 | 显示全部楼层
SPI_I2S_SendData(SPI1, byte)表示主机向从机发送数据,SPI_I2S_ReceiveData(SPI1)表示从机向主机返回数据 。这两个函数是对应的,主机发送一个命令,从机必然会返回一Byte数据,所以没必要拆分开的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-10 12:06:00 | 显示全部楼层
哦,是这样啊,也就是说SPI是 双向全双工通信,发送和接收可以同时进行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-10 12:08:45 | 显示全部楼层
汪曼丽 发表于 2014-8-8 09:17
本来发送数据的时候,SPI就会有返回值

那也就是说,想从 从机读数据的时候,直接调用这个函数 把命令作为参数传进去,同时再把 数据都出来
例如
TEMP = SPI_I2S_SendData(SPI1,COM);
TEMP 是存储读出数据的 缓冲区
COM 是读取命令。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-10 12:10:39 | 显示全部楼层
汪曼丽 发表于 2014-8-8 09:17
本来发送数据的时候,SPI就会有返回值

发送和接收是并行运作的,如果分开 发送一个函数,接收一个函数,先使用发送函数 发送命令 再调用接收函数接收数据 ,这样的话 时序就会紊乱,造成数据读取失败。是这样吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 12:36 , Processed in 0.036885 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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