[STM32F1] 实现 ADC数据 最大速度向 USB 传输

[复制链接]
212|38
又见江南雨 发表于 2026-8-10 22:32 | 显示全部楼层
不要在主循环里轮询调用传输,放到ADC转换完成中断里触发数据打包。
kmzuaz 发表于 2026-8-11 14:58 | 显示全部楼层
USB 全速要求 ±0.25% 的频率精度。STM32F4 必须使用外部高速晶振配合 PLL 生成精确的 48MHz USB 时钟,内部 RC 振荡器会导致枚举失败或频繁掉线。
1988020566 发表于 2026-8-12 18:18 | 显示全部楼层
如果 USB 发送不及,必须有机制防止环形缓冲区被覆盖。
modesty3jonah 发表于 2026-8-12 19:49 | 显示全部楼层
环形缓冲区设计防止数据溢出的方法?
plsbackup 发表于 2026-8-12 21:14 | 显示全部楼层
ADC -> DMA -> 环形缓冲区
burgessmaggie 发表于 2026-8-12 22:21 | 显示全部楼层
打包发送,避开格式化              
MessageRing 发表于 2026-8-13 13:14 | 显示全部楼层
攒数据用DMA到缓冲区,缓冲区满了再批量发送,减少中断开销。
jimmhu 发表于 2026-8-14 10:51 | 显示全部楼层
如何配置ADC DMA循环模式获取最佳效果?
houjiakai 发表于 2026-8-14 12:42 | 显示全部楼层

怎样提升数据传输效率?              
updownq 发表于 2026-8-15 11:10 | 显示全部楼层
USB CDC 小包频繁发送,USB 包开销高
elsaflower 发表于 2026-8-15 12:20 | 显示全部楼层
CDC_Transmit_FS 大多是阻塞 / 简单轮询发送,USB 带宽没有充分利用
claretttt 发表于 2026-8-15 19:11 | 显示全部楼层
抛弃 sprintf,直接发送二进制数据。
lzbf 发表于 2026-8-15 20:30 | 显示全部楼层
ADC 大概率是单次转换、软件触发,转换完成等待时间浪费
maqianqu 发表于 2026-8-15 21:49 | 显示全部楼层
能否优化USB传输模式?              
xiaoyaodz 发表于 2026-8-16 11:28 | 显示全部楼层
直接将 DMA 缓冲区中的原始 uint16_t 数据通过 USB 发送。这样数据量小,处理快。
tabmone 发表于 2026-8-16 13:12 | 显示全部楼层
启用 ADC 连续模式 + DMA 循环模式
Bowclad 发表于 2026-8-16 14:20 | 显示全部楼层
直接用DMA传输ADC数据到USB缓冲区,避免CPU介入,提高效率。
pixhw 发表于 2026-8-16 14:26 | 显示全部楼层
提高 USB 中断优先级,避免传输被长时间中断阻塞
i1mcu 发表于 2026-8-16 15:30 | 显示全部楼层
USB Full Speed vs High Speed速度差异对比?
sanfuzi 发表于 2026-8-16 20:39 | 显示全部楼层
ADC 采集到的是 12位/16位 的原始整型数据,绝对不要转成字符串。直接将 uint16_t 或 uint32_t 数组通过 USB 发送,这能将单帧数据的体积缩小到原来的 1/4 甚至更小,极大提升吞吐量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0