打印
[应用相关]

STM32 SPI 主从通信,主机接收到从机数据第一位数据不对

[复制链接]
1030|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2022-3-1 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主机发送0xa2,从机接收主机发送的数据,判断接收到的数据是不是0xa2,如果从机接收到的数据是0xa2,从机发送:0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c给主机.但是主机接到的是:0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b.

```
uint16_t SPI2_ReadWriteByte(uint16_t TxData)
{                                          
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);        // 等待发送区空  
        SPI_I2S_SendData(SPI2, TxData);                                                                 // 通过外设SPIx发送一个byte数据
        while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);// 等待接收完一个byte  
        return SPI_I2S_ReceiveData(SPI2);                                                                 // 返回通过SPIx最近接收的数据                  
}
uint8_t SPI_TxBuffer[12] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c};
void SPI2_IRQHandler(void)
{
        if(LL_SPI_IsActiveFlag_RXNE(SPI2)==SET){
                SPI_IT_Rec=SPI2->DR;
                if(SPI_IT_Rec == 0xa2){
                        for(uint8_t i=0;i<12;++i){

                                SPI_RxBuffer= ReadWriteData(SPI_TxBuffer);
                        }
                        SPI_Flag = 1;
                }
        }
}
```

使用特权

评论回复
沙发
laocuo1142| | 2022-3-3 09:43 | 只看该作者
SIP读取时,需要主机产生信号再进行读取,写入也是类似。每次发送完一个数据都要先读取。在开启中断前,先把数据读取完毕后,再开启。

使用特权

评论回复
板凳
flycamelaaa| | 2022-3-3 09:44 | 只看该作者

首先你的主机,读取的时候,也是由你来产生的CLK。对方在收到A2命令后,需要通过写入空数据让从机将数据传输出来。

发送A2时使用SPI2_ReadWriteByte这个函数即可。楼主,你用的是双线还是三线模式?建议看看SPI通讯协议。

使用特权

评论回复
地板
stormwind123| | 2022-3-3 09:45 | 只看该作者
如同楼上TX所说,SPI全双工通讯时,主发送的同时也收到从发的信息,因为时钟是由主提供的。所以楼主注意这个细节,调整一下判断逻辑就可以了。


使用特权

评论回复
5
kingkits| | 2022-3-3 15:28 | 只看该作者
发送 0xa2 时,实际上你已经收到了一个字节0, 所以要忽略掉第一个字节

使用特权

评论回复
6
tpgf| | 2022-4-1 15:09 | 只看该作者
每次第一位都不对吗

使用特权

评论回复
7
晓伍| | 2022-4-1 15:21 | 只看该作者
全双工得用四根线了吧

使用特权

评论回复
8
八层楼| | 2022-4-1 15:28 | 只看该作者
是用的是一主一从吗

使用特权

评论回复
9
观海| | 2022-4-1 15:33 | 只看该作者
这个需要终端电阻吗

使用特权

评论回复
10
guanjiaer| | 2022-4-1 15:40 | 只看该作者
应该是不会有冲突的

使用特权

评论回复
11
heimaojingzhang| | 2022-4-1 15:46 | 只看该作者
建议还是用全双工

使用特权

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

本版积分规则

983

主题

3060

帖子

7

粉丝