在两个STM32芯片之间进行DMA传输的SPI导致结构中的数据重新排序

问题描述 投票:0回答:1

将HAL与两个芯片一起使用:STM32F373RBT6和STM32F042K6T6。两者均设置了带DMA的SPI。我在每个处理器的代码中使用以下结构:

typedef __packed struct {
    u16 command;
    u16 status;
    s32 motorPos;

} motorParams;

在调试(ST-LINK)中,我可以看到第一个数据包正确进入,然后字节在结构中更改顺序。所有数据都在那里,只是顺序错误。例:first packet received,该命令用于电机使能,然后在下一个数据包enter image description here上,启用显示在位置字段中。最后,enter image description here现在在命令和状态字段之间划分位置。我检查了镜上SPI总线上的输出,查看了片选和数据信号。所有数据都在那里,并且以正确的顺序进入M0芯片。SPI在M0中接收到一个直接指向变量的指针,以接收该结构。我是否可以进行任何中间检查,以查看数据为何更改结构中的位置?如果您曾经看过类似的内容,请告诉我。谢谢。

c struct stm32 spi dma
1个回答
0
投票

我的建议是,您应该真正改变序列化的方式,我猜您是在假设,因为您要打包该结构并用u8指针指向它,所以结果将很好地打包为8个字节。此代码不是可移植的,将取决于字节序。仅原始类型应直接序列化为字节(即u8,s8,u16等)]

您应先定义通信协议的字节序,然后为该结构创建一个8字节的缓冲区(如果要一次发送多个包,则应创建一个更大的缓冲区),然后将每个struct字段作为字节复制到该缓冲区中。所需的耐力。该缓冲区是通过DMA发送的缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.