最终,我选择了自己编写的程序,对于数据总是错位的问题,我选择增加一个padding字节来弥补这个问题。
// 132 byte
typedef struct
{
leg_cmd_t leg[2];
uint32_t crc;
uint8_t __padding;
} spine_cmd_t;
STM32在处理的过程中手动位移一下,来解决这个问题。经过初步的连续测试,该通信比较可靠,准备进行下一步的电机控制实验了。
HAL_SPI_TransmitReceive(&hspi1, spi_tx, spi_rx, sizeof(spine_cmd_t) + 1, 100);
memcpy(&g_cmd, spi_rx + 1, sizeof(spine_cmd_t));
uint32_t crc = calculate((uint8_t*)&g_cmd, sizeof(spine_cmd_t) - 4);
上位机的发送代码也进行相应修改,来符合数据长度。