我目前正在研究 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)
谢谢你的帮助。我仍然有空。
对于快速检查,请尝试禁用数据缓存。您可能没有正确管理缓存,或者您没有在使用 DMA 的内存空间中禁用缓存。外围设备不知道缓存,因此您必须手动管理它。在这种情况下,您还必须将缓冲区与缓存行对齐。
Refer toAN4839本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(40条)