久芯网

H743zit6,使用SPIDMA模式接收数据异常?

avatar 懒得起名1 提问时间: 2023-06-29 19:28:51 / 已解决

在正常模式下接收数据全为0,但在调试模式下可以接收部分正确数据?

cubemx配置如下:

H743zit6,使用SPIDMA模式接收数据异常? [相关图片]

H743zit6,使用SPIDMA模式接收数据异常? [相关图片]

H743zit6,使用SPIDMA模式接收数据异常? [相关图片]

部分代码如下:

uint8_t pData[128] = {0x00};

HAL_SPI_Receive_DMA(&hspi1,pData,128);

while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY);

while(CDC_Transmit_FS(pData,128) != USBD_OK); while(CDC_Transmit_FS(TestData,1) != USBD_OK); //0xff

  • 在正常模式下,用SPIDMA接收128字节数据,用usb虚拟串口返回上位机(上位机显示一列20个字节)。此时无论接收多少次全为零,但波形是正确的。
  • 调试模式下能接收到部分正确的数据(数据格式是两个相同的64字节组成的128字节数据。接收的前64个字节是正确的,后64个字节不确定在第几个位置出错),最后一个0xff是用来测试USB是否正常的。如下图(其中DOUT为从机输出波形):

H743zit6,使用SPIDMA模式接收数据异常? [相关图片]

H743zit6,使用SPIDMA模式接收数据异常? [相关图片]

正常模式下,全为零。

H743zit6,使用SPIDMA模式接收数据异常? [相关图片]

调试模式下,可以接收部分正确数据。

H743zit6,使用SPIDMA模式接收数据异常? [相关图片]

H743zit6,使用SPIDMA模式接收数据异常? [相关图片]

监视变量确实与上位机接收后显示的一样,再次证明上位机与USB传输无问题。

总结问题:

1.为什么调试模式与正常模式运行会有区别?

2.SPI+DMA如何才能完整接收128字节?

期待你的建议与答复。


如需获得 H743zit6 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

1个回答
  • avatar 懒得起名1
    最佳答案
    回答时间: 2023-06-29 20:00:32

    把Dcache指令删了就行了,虽然不知道为啥。 // /* Enable D-Cache---------------------------------------------------------*/ SCB_EnableDCache();复制代码

会员中心 微信客服
客服
回到顶部