STM32F411我需要通过USB高速发送大量数据

Posted

技术标签:

【中文标题】STM32F411我需要通过USB高速发送大量数据【英文标题】:STM32F411 I need to send a lot of data by USB with high speed 【发布时间】:2019-03-13 01:43:10 【问题描述】:

我正在使用带有 USB CDC 库的 STM32F411,该库的最大速度约为 1Mb/s。 我正在创建一个项目,其中有 8 个麦克风连接到 ADC 线路(这部分工作正常),我需要一个 16 位信号,所以我通过从一条线路添加前 16 个信号来提高准确性(ADC 只提供 12-位信号)。在我的项目中,一条线需要 96k 16 位样本,因此所有 8 条线都有 0,768M 信号。这个信号需要12000Kb的空间,而STM32只有128Kb的SRAM,所以我决定一秒发送120个左右,100Kb的数据。

结论是我需要 ~11,72Mb/s 来发送这个。

问题是我无法做到这一点,因为 CDC USB 将我限制在 ~1Mb/s。

问题是如何将 STM32F4 的 USB 速度提高到 12Mb/s。我需要一些提示符或库。

或者我应该在 CubeMX 中设置“音频设备”吗?

【问题讨论】:

对于音频设备,使用同步传输和 USB 音频规范会更有意义。 什么是 Mb?位还是字节? @P__J__ 我的意思是位,位总是用小写字母。 Mb = 兆位; MB = 巨型 bajt。所以在这个问题中,我需要每秒 12 兆比特或每秒 1.5 兆比特 bit is always with lower letter. Mb = mega bit; MB = mega bajt. 但您不使用此约定:This signal needs 12000Kb space, but STM32 have only 128Kb SRAM。你不一致,请不要指导我 @P__J__ 对不起,你说得对。我不是来冒犯任何人的,所以冷静点:)。 STM32 有 128KB SRAM。所以从一开始:一行 - 96k 16 位样本,8 行 - 1500KB; 15 个包,每个包每秒发送 100KB(这是不正确的,因为从 ADC 线我只接收 12 位样本,我必须提高精度,但这不是主要问题)。那么STM32中的USB可以以1,46484375MB/s的速度发送吗?如果不是,我还有另一个问题,如果我将样本数从 96k 更改为 48k,是否可以以 0,732421875MB/s 的速度发送?如果你觉得被冒犯了,再次抱歉:)。 【参考方案1】:

如果小b 在您的问题中意味着字节,答案是:这是不可能的,因为您的微型计算机具有最大速度为每秒 12M 位的 FS USB。

如果这意味着您的 1Mb(位)速度假设是错误的。但是您不会达到 12M 位的有效载荷传输。

您可以尝试编写(仅当b 表示位时)您自己的类,但恐怕您找不到现成的库。您还需要在主机上编写设备驱动程序

【讨论】:

我的意思是位。所以我需要 12Mb/s 或 1.5MB/s @B.Pieta 您的 1Mb CDC 假设是 100% 错误的。但无论如何你都不会获得 100% 的有效负载带宽

以上是关于STM32F411我需要通过USB高速发送大量数据的主要内容,如果未能解决你的问题,请参考以下文章

STM32F411:清除外部中断标志真的有必要吗?

STM32F411RE:程序冻结,超声波传感器不工作

STM32 USB CDC 长包接收

在 STM32F411 Discovery 上实现 HD44780 LCD 时调试 HardFault

STM32F411CE驱动Xbox摇杆

STM32F411CE驱动Xbox摇杆