打印
[STM32H7]

STM32H7 USB 如何 CDC 一次发送36KByte数据

[复制链接]
6114|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaofei558008|  楼主 | 2021-7-9 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32H7 全速USB 如何用 CDC usb 虚拟串口 一次发送36KByte数据呢?

看了网上说明,貌似一次只能发送64字节?也有看到可以跑到800KB/s;

uint8_t CDC_Transmit_HS(uint8_t* Buf, uint16_t Len)
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)


这两个函数可以吗?
小白第一次调USB,求大侠不吝赐教呀~~








使用特权

评论回复
沙发
小叶三千| | 2021-7-9 17:05 | 只看该作者
USB的HID协议是一次64Byte,处理速度快啊,传一些文件没问题的。不过CDC没用过,帮顶!

使用特权

评论回复
板凳
xiaofei558008|  楼主 | 2021-7-9 17:57 | 只看该作者
本帖最后由 xiaofei558008 于 2021-7-10 15:16 编辑
小叶三千 发表于 2021-7-9 17:05
USB的HID协议是一次64Byte,处理速度快啊,传一些文件没问题的。不过CDC没用过,帮顶! ...

CDC 好像是64/512一次。我i这边传一段(1-2K左右就卡死,返回 USBD_BUSY)

使用特权

评论回复
地板
香水城| | 2021-7-9 19:14 | 只看该作者
对于FS模式下的CDC传输,当数据大于64Bytes,会进行多包传输来完成。

你检查下你堆、FIFO这些配置。

使用特权

评论回复
5
xiaofei558008|  楼主 | 2021-7-10 15:06 | 只看该作者
香水城 发表于 2021-7-9 19:14
对于FS模式下的CDC传输,当数据大于64Bytes,会进行多包传输来完成。

你检查下你堆、FIFO这些配置。 ...

谢谢香主回复;
目前cube都用静态库了,因此不需要堆的配置,64字节试过,一直传64字节传2k左右也会变忙的状态,fifo还没检查,H7 FS 和 HS还没搞明白是否有区别,用的是内置的phy。

使用特权

评论回复
6
xiaofei558008|  楼主 | 2021-7-12 16:58 | 只看该作者
自问自答一下:
cubeMx生成的代码HS和FS比较混乱(内置PHY全是FS,但代码里都是HS),因此从网上下了个F746 FS的例子;自己移植了一下搞定了; STM32F746 Discovery VCP-FS.rar (951.89 KB)




使用特权

评论回复
7
renzheshengui| | 2021-8-6 15:33 | 只看该作者
还没有用过cdc呢

使用特权

评论回复
8
paotangsan| | 2021-8-6 15:38 | 只看该作者
配置的话也会很混乱吗

使用特权

评论回复
评论
xiaofei558008 2021-8-13 13:43 回复TA
不混乱,很容易移植上去;注意DMA /Cache RAM分配位置即可 
9
木木guainv| | 2021-8-6 16:05 | 只看该作者
请问USB和CDC是什么关系啊

使用特权

评论回复
评论
xiaofei558008 2021-8-13 13:42 回复TA
CDC是USB的一个类,USB有很多类,比如鼠标键盘的HID,串口CDC,音频Audio等等,每个类就是一套USB子协议 
10
xiaoqizi| | 2021-8-6 16:07 | 只看该作者
哈哈 正好可以借鉴一下

使用特权

评论回复
评论
xiaofei558008 2021-8-13 13:41 回复TA
亲测可用,稳定 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

137

主题

971

帖子

13

粉丝