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

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

[复制链接]
懒得起名1 提问时间:2023-6-9 12:55 / 已解决

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

cubemx配置如下:

spi1.png

spi2.png

dma1.png

部分代码如下:

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为从机输出波形):

second.png

all0.png

正常模式下,全为零。

nall0.png

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

w1.png

w2.png

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

总结问题:

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

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

期待你的建议与答复。

收藏 评论1 发布时间:2023-6-9 12:55

举报

1个回答
懒得起名1 最优答案 回答时间:2023-6-9 15:55:38
把Dcache指令删了就行了,虽然不知道为啥。
  1. //  /* Enable D-Cache---------------------------------------------------------*/
  2.   SCB_EnableDCache();
复制代码


关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版