使用STM32CubeMX编写USB复合设备

其实很简单搞了好久,怪ST呗,既没做到可读性增强,又搞到复杂了.目的先做一个CDC+MSC复合,就像STLink V2-1一样.
首先生成一个CDC工程并测试.


再用同样方法生成MSC,但是不要覆盖当前工程.因为木有分区和很多逻辑没实现,所以借助工具看看.

开始合并了,把CDC内容挪过来.

新建两个文件.

添加文件到Keil.

Keil的Include还要设置.然后编译测试,当然这个时候是不能用的.

修改CDC所用EP.

修改MSC所用EP.

编辑我们的复合头文件.复合用IAD.大概都是写在一起.

然后写对应C文件,分别初始化各种.

然后CDC的描述太任性了,改.


不然看文件吗根本不知道是什么玩意.接着修改usb_device.c

修改最大接口数.

因为是CDC 2个 + MSC 1个.然后如果还没有识别,修改Stack Size.

修改为IAD兼容.

复合成功:

程序:
USB 复合
后话:
如果电脑没驱动,请求助官网:http://www.st.com/en/development-tools/stsw-stm32102.html
思考:
如何复合多重HID呢?复合只是为了增加功能,并不能增加带宽.
 

发布者

TaterLi

懒人站长,什么都搞搞,反正就是败家.

《使用STM32CubeMX编写USB复合设备》上有17条评论

      1. 没说能提升总带宽,hid composite的优势就是任何环境都能都能免驱动,加上中断类usb端点的可保证总是最优先,做一些设备肥肠方便。
        如果是stm32的话最多可以做到in endpoint 64+8+8+8=96kB/s,out endpoint 64+64+64+64=256kB/s,当然可以做in和out之间的分配的,352kBs的总带宽,差不多2.8Mb/s的速度,和usb1.1设备的带宽上限12Mb当然有差距,但是多平台包括windows,linux,macos,android,都能免驱只需要业务代码不需要kernel mode的优点还是不容抹杀的。
        如果能换个arm m3芯片,pma能大点的话,最高理论上能做到512kB进,512kB出,加起来差不多8Mbps了,和理论带宽上限的差距就非常小了,可以说这个方法的前途很光明。

  1. 你好,请教一下
    1.然后CDC的描述太任性了,改.这个地方到底改了哪里?是指名字改了?
    2.不然看文件吗根本不知道是什么玩意.接着修改usb_device.c,这里也没看懂,仅仅是注释掉一行代码吗?
    其他地方我都已经结合你的提示和根据我自己的设备进行修改了,现在的情况是完全枚举不了,还望大神帮忙提示提示

      1. 我cpu是stm32f303cct6,修改后可以正确识别USB composite deivce,USB大容量存储设备,USB串口设备,但没有磁盘驱动器设备,能将你成功的程序发我吗?程序下载不了。我的邮箱:zhxzsh@msn.com

  2. 您好,按照您的思路,我复合STM32F407VET6单片机的CDC+MSC设备,能成功枚举 出来串口和U盘,且功能测试都是ok的,但是我在main函数里通过cdc发送函数,发送字符串“12345”测试串口功能时,当电脑上串口助手收到200个字节左右的数据后,再收到的数据就是乱码,再然后设备就死掉了,电脑上设备管理器就找不到设备了。
    移植找不到原因在哪里,能麻烦你给指点一下吗???

  3. 我用spi 接口的flash作为存储介质,参考您的教程,成功复合出复合设备,但是U盘的读写速度挺慢,不知道是什么原因,而且从电脑上向U盘拖东西,刚开始卡顿,延迟很长时间才开始传输数据,求大神给指点一下。

发表评论

电子邮件地址不会被公开。 必填项已用*标注