8回答

0收藏

stm32的spi读写只能在一个函数里完成吗?

STMCU STMCU 5818 人阅读 | 8 人回复 | 2013-11-22

网上的例程全是读和写一个函数完成的,我把他们改了一下,改成2个函数,一个读一个写,但是就不对了。改的时候基本原封不动的分成2个,是不是不能分开呢?
u8 SPI2_Write(u8 data)
{
u8 retry=0;
while((SPI2->SR&0X02)==0) //等待数据发送完
{
  retry++;
  if(retry>=0XFE)return 0;
}
SPI2->DR=data;   //data是要发送的数据
return 0;
}
u8 SPI2_Read(void)
{
u8 retry=0;
while((SPI2->SR&0X01)==0) //等待数据接收完
{
  retry++;
  if(retry>=0XFE)return 0;
}
return SPI2->DR;    //data是接收到的数据
}
分享到:
回复

使用道具 举报

回答|共 8 个

倒序浏览

沙发

feiante

发表于 2013-11-22 14:35:53 | 只看该作者

是的,它必须是先发送一个数据把接受到的数据从移位寄存器中移出来
板凳

jikaishihuaidan

发表于 2013-11-22 15:26:01 | 只看该作者

意思就是说主机spi只进行读操作的话是不会产生sclk的吗?sclk必须由主机spi的写操作才能产生吗?
地板

xiaopaohu123

发表于 2013-11-22 18:21:50 | 只看该作者

读写是一起完成的,写的同时还在读,所以你生硬的分开是不对的
5#

陈克雄

发表于 2013-11-22 20:16:50 | 只看该作者

SPI是同步通信,收发必须同步进行的
6#

陈克雄

发表于 2013-11-22 20:18:01 | 只看该作者

桃太郎 发表于 2013-11-22 15:26
意思就是说主机spi只进行读操作的话是不会产生sclk的吗?sclk必须由主机spi的写操作才能产生吗? ...

读写共用一个时钟,由主机产生
7#

jikaishihuaidan

发表于 2013-11-24 08:56:17 | 只看该作者

xiaopaohu123 发表于 2013-11-22 18:21
读写是一起完成的,写的同时还在读,所以你生硬的分开是不对的

谢谢,受教了
8#

jikaishihuaidan

发表于 2013-11-24 08:57:49 | 只看该作者

Kite 发表于 2013-11-22 20:18
读写共用一个时钟,由主机产生

谢谢了,现在终于明白了。
9#

蝶舞娇阳

发表于 2013-11-24 21:57:03 | 只看该作者

同步收发数据,根据配置,如:在上升沿读数据,下降沿送数据。。。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条