你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32C8T6 硬件SPI ReceiveOnly Master 读取数据 数据 错位的问题

[复制链接]
DarkG 发布时间:2017-1-23 16:46
应用需要读取AS5145 的数据,每次读取18位有效数据,也就是读3个字节。( |1 R* X4 p2 \* l
想使用DMA,但是只能配置一个DMA SPI_RX,接收的串口用掉了。+ B3 c* F2 i3 s% l+ B4 L' h
现在遇到的情况是:4 X+ D' z- y; s( F1 M7 g9 M# h( g
1.当不使用DMA情况下,在Full-Deplex模式下,使用HAL_SPI_TransmitReceive 接收数据没有问题。7 N5 g* U3 J  x, q* o
2.不使用DMA,在Receive Only Master模式下,使用HAL_SPI_Receive接收数据,就会出现数据错位的情况第一次读取和第二次读取直接错位8个字节,然后就保持不变,见下图。3.使用DMA,在Receive Only Master模式下,使用HAL_SPI_Receive_DMA接收数据,就会出现数据错位的情况第一次读取和第二次读取直接错位8个字节。; b# ~) j8 J0 D: h3 e$ ~# Z' P

; K; t1 V& {% [9 ~2 G, H+ L
; w4 T1 M' [: P$ P5 d% Z) D我判断的问题是,上一次读取的缓存还在,然后在下一次读取的时候 填充到第一个字节,这样照成的问题是下一次 读取到的第一个字节 是上一次的最后一个字节,不知道我这样的理解对不对,实际上问题可能更加复杂。
% v- I5 o& i& Q, L9 g

无DMA Receive Only接收数据

无DMA Receive Only接收数据
赞 收藏 1 评论2 发布时间:2017-1-23 16:46

举报

2个回答
七哥 回答时间:2017-1-23 17:39:32
还需要好好找找问题,你的猜想可能,但是还要找原因。3 W# l8 J2 `' c* G$ `6 A2 s& T% M
DMA用的时候,需要重新初始化,或清一下标志。5 \6 T4 r* z; O. M
数据是DMA直接传到RAM的吧,如果是的话,不管你读不读RAM,DMA是不知道的。
DarkG 回答时间:2017-3-18 12:34:51
toofree 发表于 2017-1-23 17:39& j! W' W/ l+ }+ A# Z( A. O
还需要好好找找问题,你的猜想可能,但是还要找原因。7 ^' M: a' ?+ J+ X) j& O0 v) I1 y
DMA用的时候,需要重新初始化,或清一下标志。- O* m4 @& Q' r
数据 ...
! t' y- R( Y$ s
谢谢,我暂时用比较傻的办法解决了,不过我用的是 HAL的DMA Receive 方法,都是自动设置的,只用一个DMA接收的时候有问题,所以才怀疑是有问题
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版