打印

关于SPI的疑问

[复制链接]
1703|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
午夜霓虹|  楼主 | 2011-6-23 08:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前没用过其他单片机的SPI接口,现在用STM32的SPI接口的时候发现有很大的不同,其他的单片机SPI接口写数据完成的时候,读数据同步完成了,而stm32没有,需要多一个等待。

  请问我在用中断的时候,如果读状态完成,是不是意味着写状态一定也完成了。谢谢。
沙发
香水城| | 2011-6-23 10:11 | 只看该作者
请说仔细点:
哪里说需要多一个等待?一个等待是多长时间?等待什么?

你用的什么中断?

为什么要写状态?是要清除状态位吗?

使用特权

评论回复
板凳
午夜霓虹|  楼主 | 2011-6-23 10:51 | 只看该作者
/*!< Loop while DR register in not emplty */
  while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET);

  /*!< Send byte through the SPI1 peripheral */
  SPI_I2S_SendData(sFLASH_SPI, byte);

  /*!< Wait to receive a byte */
  while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET);

  /*!< Return the byte read from the SPI bus */
  return SPI_I2S_ReceiveData(sFLASH_SPI);

一般别的单片机只要完成 while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET); 读取这个就可以读取和再次发送数据了,
即  发送数据->发送完毕->读取接收数据。
STM32则要这样做    发送数据->发送完毕->接收完毕->读取接收数据。

多了一个接收状态。

我要是用中断的话  这样做呢 开接收数据中断 ->发送数据-> 触发接收完成中断->读取接收数据->再次发送和接收。

使用特权

评论回复
地板
香水城| | 2011-6-23 10:58 | 只看该作者
SPI_I2S_FLAG_TXE这个状态只表示发送缓冲区空,不表示发送完成,你的理解有误。

引入这个状态,可以让软件更有效率地传输数据。

使用特权

评论回复
5
香水城| | 2011-6-23 10:58 | 只看该作者
SPI_I2S_FLAG_TXE这个状态只表示发送缓冲区空,不表示发送完成,你的理解有误。

引入这个状态,可以让软件更有效率地传输数据。

使用特权

评论回复
6
午夜霓虹|  楼主 | 2011-6-23 14:46 | 只看该作者
哦,不是理解错误,是我的表述错误,呵呵,不好意思,因为我没找到发送完成标志,我可以不可以这样认为,接收完成标识就可以当作发送完成标识,这个理解没问题吧。

使用特权

评论回复
7
yzzly| | 2011-6-23 16:54 | 只看该作者
用while(SPI2->SR & 0x80);来确认SPI是否发送完成

使用特权

评论回复
8
tikelu| | 2011-6-24 13:58 | 只看该作者
先确认下 看有没有异常

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

462

帖子

1

粉丝