C7h7cl结构简式:STM32H7|PortentaH7DMA传输期间数据丢失(ADC到内存)

我目前正在研究 STM32H747XI(Portenta H7)。我正在使用 DMA1 对 ADC1 进行编程,以 1Msps 获取 16 位数据。

很抱歉,我不能分享我的整个代码,但我将尝试尽可能精确地描述我的配置。

我正在使用由 1MHz 定时器触发的 ADC1。ADC 在具有 DMA 循环和双缓冲模式的 continus 模式下工作。我用完整的 FIFO 尝试了直接模式和突发。我没有 DMA 错误中断,也没有 ADC 超限。

我的外围设备正在运行,但我被困在两个问题的前面。第一个问题,我正在做 8192 uint16_t 的缓冲区,我将它发送到 USB CDC 与 arduino 函数 USBserial.Write (buf,len)。在这种情况下,USB 传输正确,但我的缓冲区中有一些丢失的数据。

您可以看到下面的数据图:transfer with buffer of 8192 samples

如果我加倍缓冲区大小,这个问题是固定的,但另一个来了。如果数据缓冲区长于 16384 字节,则 USB VPC 传输失败。一些数据被剪切。我试图用不同的发送和延迟来解决这个问题,但它不起作用。我仍然有相同的剪切。

这里是具有较长缓冲区的同一脚本的数据图:transfer withe buffer of 16384 sample (32768 byte)

谢谢你的帮助。我仍然有空。

0

对于快速检查,请尝试禁用数据缓存。您可能没有正确管理缓存,或者您没有在使用 DMA 的内存空间中禁用缓存。外围设备不知道缓存,因此您必须手动管理它。在这种情况下,您还必须将缓冲区与缓存行对齐。

Refer toAN4839

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(155)
Cell处理器失败之处:细胞处理器的死亡(processor die)
上一篇
数据库删除怎么恢复:错误地恢复已删除的数据库(accidentally deleted postgres database)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(40条)