关于STM32的SPI问题,哪位大神能给予指导,小妹非常感谢! 5

我想要实现的:STM32的SPI1作为主机,向我的另一个SPI从机设备写数据(发送数据)和读数据(接收数据)。问题是针对读写函数的,函数如下:u8SPI1_ReadWri... 我想要实现的:STM32的SPI1作为主机,向我的另一个SPI从机设备写数据(发送数据)和读数据(接收数据)。
问题是针对读写函数的,函数如下:
u8 SPI1_ReadWriteByte(u8 TxData)
{
u8 retry=0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET) //检查发送缓存空标志位 {
retry++;
if(retry>200)return 0;
}
SPI_I2S_SendData(SPI2, TxData); //通过主机的MOSI口发送一个数据
retry=0;
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //如果TxData为0xFF,那么这句的判断是针对TxData的0xFF数据收到没收到,还是针对从机那边发来的数据?
{
retry++;
if(retry>200)return 0;
}
return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据
}
问题:
1、while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET) //如果TxData为0xFF,那么这句的判断是针对TxData的0xFF数据收到没收到,还是针对从机那边发来的数据?
2、调用这句SPI_I2S_SendData(SPI2, TxData); 后程序会执行SPI_DR=TxData;发现SPI_DR 的数据为0,这个又是为什么?

等待高人的解答中。。。。。
展开
 我来答
大草原黄花菜
2015-08-07 · TA获得超过1587个赞
知道小有建树答主
回答量:1479
采纳率:40%
帮助的人:881万
展开全部
  1. SPI边发边收,就算没有从机也会收到数据,这个数据与发送期间接收脚的电平有关。所以收到0xFF不能判定是从机发的。

  2. 第二个问题不懂。。。是不是TxData本来就是0?

追问
如果发送的数据为0xff,执行SPI_I2S_SendData(SPI2, TxData); 后,数据寄存器里的值为何一直为0,还有对于SPI_I2S_ReceiveData(SPI1);接收的又是哪里数据?
追答
不知道你的问题解决没,上班刚看到。。。

我这边试了一下,单步调试时数据寄存器一 直不变,全速时有变化,也不知道为什么~~
通讯结果是对的。
SPI_I2S_ReceiveData(SPI1)也是接收SPI_DR的数据。SPI_DR对应两个缓冲区,一收一发,名字相同但相互独立。
优盘啥读卡器
2018-04-23
知道答主
回答量:26
采纳率:0%
帮助的人:2.6万
展开全部
SPI调试的时候,最好不要单步调试;单步调试的时候最好把寄存器窗口关闭,不然软件会一直读取寄存器,然后条件句一直判断数据被读出,标志位会被置1,出现死循环,导致调试失败
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式