[STM32F0]

求助:F051R8,双SPI收发问题(一周了都没有找到问题所在)

[复制链接]
2726|10
手机看帖
扫描二维码
随时随地手机跟帖
lai832|  楼主 | 2015-11-20 09:35 | 显示全部楼层 |阅读模式
拓扑:F407------>F051.A------->F051.B----->F051.C------->F407(与开头是同一片)

SPI2收,  SPI1发
只使用CLK与MOSI两条线

在F051的A/B/C三片芯片里,是相同程序,
都是SPI1_TX_Buff = SPI2_TX_Buff           (   uint16_t [2]  )

问题:在B里发出的数据, C收到的都会有一个BIT的移位
1.如果L先发,   << 1     C收到的数据左移1BIT
2.如果M先发,  >> 1     C收到的数据右移1BIT.

但B收到A的不会.

另外,如果将程序改为:SPI1_TX_Buff = Tmp_Avr     (Tmp_Avr    另外一个与SPI2_RX_Buff无关的自+1变量)
      不管是B/C收到的数据都是正常的

试过:DMA,非DMA, 清所有标志再发, TI/麽托罗拉模式,不周的时序模式,中断发送,或是main里发送,
从24M降至1/128速率,
lai832|  楼主 | 2015-11-20 10:25 | 显示全部楼层
依STM群的朋友提醒,在B里增加if判断B收到A的数据,并将结果发到C,在C里中断查看,
发现B收到A的数据也是错了一位
-------注A发出常量,并不是从407收到的数据

使用特权

评论回复
lai832|  楼主 | 2015-11-20 11:38 | 显示全部楼层
找到问题了
1.主机,从机时钟要错位,
2.中断调试时结果错位,运行时就正确了

这次主要出错在,
在B中断调试发现收到A的结果正确,
在C中收:  A发给B,B转发给C的结果,在中断中发现出错,

问题其实出在:B收到的结果就是错的.

使用特权

评论回复
amanda_s| | 2015-11-20 11:45 | 显示全部楼层
拿示波器,看看出错时的时钟对不对。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
lai832 + 6 赞一个!
lai832|  楼主 | 2015-11-20 11:55 | 显示全部楼层
按发送设置时序去看,是正确的,用示波器量了很多次了,量的次数多到不小点弄坏了几个IC-----没地方量,直接压脚上,一不小心,就和旁边的短路了.

使用特权

评论回复
lai832|  楼主 | 2015-11-20 11:57 | 显示全部楼层
发送时序:
            //| SPI_CR1_CPOL             //时钟空闲时极性, 0低  1高
            //| SPI_CR1_CPHA            //时钟相位 0第一个时钟对齐第一位数据  1,第二个时钟对齐第一个数据
接收时序:
            | SPI_CR1_CPOL             //时钟空闲时极性, 0低  1高
            | SPI_CR1_CPHA            //时钟相位 0第一个时钟对齐第一位数据  1,第二个时钟对齐第一个数据
请后面出状况的朋友参考时序设置

使用特权

评论回复
songchenping| | 2015-11-20 16:01 | 显示全部楼层
最好能画个框图,文字描述容易引起误解啊

使用特权

评论回复
seupenn| | 2019-7-31 10:00 | 显示全部楼层
lai832 发表于 2015-11-20 11:38
找到问题了
1.主机,从机时钟要错位,
2.中断调试时结果错位,运行时就正确了

主从时钟怎么错位设置??CPHA和CPOL都设反的吗??能不能具体说一下?谢谢!

使用特权

评论回复
lai832|  楼主 | 2019-8-17 22:54 | 显示全部楼层
seupenn 发表于 2019-7-31 10:00
主从时钟怎么错位设置??CPHA和CPOL都设反的吗??能不能具体说一下?谢谢! ...

参考6楼设置方法

使用特权

评论回复
seupenn| | 2019-12-4 11:18 | 显示全部楼层
lai832 发表于 2019-8-17 22:54
参考6楼设置方法

主、从都设为时钟空闲时为低,时钟相位一个设为0,一个设为1,是这么理解吗??

使用特权

评论回复
lai832|  楼主 | 2020-1-13 16:11 | 显示全部楼层
seupenn 发表于 2019-12-4 11:18
主、从都设为时钟空闲时为低,时钟相位一个设为0,一个设为1,是这么理解吗?? ...

一个全设置为:0
一个全设置为:1

使用特权

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

本版积分规则

19

主题

879

帖子

3

粉丝