打印
[STM32F1]

关于两片stm32 SPI 通信 Master接收到Slave数据 移位的解决

[复制链接]
3737|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qbasicljx|  楼主 | 2016-7-18 16:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我采用两片stm32 使用 dma+spi 进行通信
有时候 发现主机接收到的 数据 产生了 左移一位的错误,而且 必须复位 slave 才能恢复 经过测试
将 slave 的 NSS 改为硬件接收 然后 slave的最高传输速率比 master 高 就没有再产生那个问题了
        if(mode==1)   
        {
            SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
            SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//SPI_NSS_Hard;//        
        }
        else   
        {
            SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;        //接收的波特率 要比 发送的波特率 高 才能稳定的接收
            SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;//SPI_NSS_Soft;//
        }   

大家是怎么判定slave的spi的接收完毕的,我现在是在 slave 的NSS io 做了一个上升沿中断,当主机数据发送完毕, 修改设定 NSS=1
slave 就产生一个上升沿的中断 发送接收完毕信号量


沙发
wahahaheihei| | 2016-7-21 10:47 | 只看该作者
每次发送最后可以挂个EOF不。来作为结束符号。

使用特权

评论回复
板凳
qbasicljx|  楼主 | 2016-7-22 10:36 | 只看该作者
wahahaheihei 发表于 2016-7-21 10:47
每次发送最后可以挂个EOF不。来作为结束符号。

我利用io中断 能准确的快速 知道接收完成 对于长度不固定的包

使用特权

评论回复
地板
xmshao| | 2016-7-22 11:29 | 只看该作者
可以借助接收中断进行超时管理。 没有收据来后,超时值不能及时更新,生成超时标志来判断。

使用特权

评论回复
5
wahahaheihei| | 2016-7-23 23:13 | 只看该作者
超时中断是定时器的应用吗

使用特权

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

本版积分规则

16

主题

113

帖子

0

粉丝