[STM32] SPI用DMA模式接收数据错位。

[复制链接]
9163|30
 楼主| any012 发表于 2017-5-26 09:09 | 显示全部楼层
zodiacGu 发表于 2017-5-25 11:10
是不是你那边没有清从设备的Rx FIFO?

STM32的SPI没有硬件FIFO。
或者,你说的是SPI的移位寄存器?
我倒是想清移位寄存器,但不知道该如何清?
 楼主| any012 发表于 2017-5-26 09:11 | 显示全部楼层
ningling_21 发表于 2017-5-18 17:38
数据在内部存储时是对齐的,前面错了,后面也跟着错

看了SPI的原理框图,应该是SCLK每收到8个或16个有效信号,就将移位寄存器里的数放到接收缓存里。
我的理解是有个类似计数器的部分,来计算SCLK的有效信号。有没有办法将这个计数清零?
 楼主| any012 发表于 2017-5-26 09:12 | 显示全部楼层
icecut 发表于 2017-5-10 14:06
那你不用 dma, 用示波器表笔乱碰也移位

看了SPI的原理框图,应该是SCLK每收到8个或16个有效信号,就将移位寄存器里的数放到接收缓存里。
我的理解是有个类似计数器的部分,来计算SCLK的有效信号。有没有办法将这个计数清零?
icecut 发表于 2017-5-26 10:05 | 显示全部楼层
any012 发表于 2017-5-26 09:12
看了SPI的原理框图,应该是SCLK每收到8个或16个有效信号,就将移位寄存器里的数放到接收缓存里。
我的理 ...

这么久还没搞定?你spi是master还是device?
 楼主| any012 发表于 2017-5-26 10:53 | 显示全部楼层
icecut 发表于 2017-5-26 10:05
这么久还没搞定?你spi是master还是device?

当作SPI从设备。
现在是在片选信号失效后,重新初始化了SPI。目前没问题了,但感觉没必要完全初始化。
icecut 发表于 2017-5-26 11:00 | 显示全部楼层
any012 发表于 2017-5-26 10:53
当作SPI从设备。
现在是在片选信号失效后,重新初始化了SPI。目前没问题了,但感觉没必要完全初始化。 ...

你是不是片选一直拉低了.接死了?
 楼主| any012 发表于 2017-5-26 13:43 | 显示全部楼层
icecut 发表于 2017-5-26 11:00
你是不是片选一直拉低了.接死了?

不是,PC6当作片选信号的输入,PC6上升沿中断,开启SPI的DMA接收,接收定长数据。PC6下降沿时,我现在的处理是重新初始化下SPI,这样做现在没事。
icecut 发表于 2017-5-26 17:56 | 显示全部楼层
片选不是低电平有效么?如果是软片选,完全可以下降沿初始化所有,让发送端多延时一下
 楼主| any012 发表于 2017-5-27 09:58 | 显示全部楼层
icecut 发表于 2017-5-26 17:56
片选不是低电平有效么?如果是软片选,完全可以下降沿初始化所有,让发送端多延时一下 ...

是软片选。
现在的解决办法也就是在下降沿初始化SPI,但总觉得初始化SPI操作太多了,应该有更有效的办法吧。
icecut 发表于 2017-5-27 10:01 | 显示全部楼层
any012 发表于 2017-5-27 09:58
是软片选。
现在的解决办法也就是在下降沿初始化SPI,但总觉得初始化SPI操作太多了,应该有更有效的办法 ...

你还是查查你硬件吧.逻辑分析仪抓一下信号.不是cpu问题.
zodiacGu 发表于 2017-5-30 13:00 | 显示全部楼层
any012 发表于 2017-5-26 09:09
STM32的SPI没有硬件FIFO。
或者,你说的是SPI的移位寄存器?
我倒是想清移位寄存器,但不知道该如何清? ...

DR Register
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部