之前的文章中介绍过STM32的USB应用,包括虚拟串口(CDC)和大容量存储设备(MSC)。今天来介绍USB实现CDC和MSC复合设备的方法。
1.准备两个工程
首先用STM32CubeMX分别生成CDC和MSC两个工程,测试正常。
2.拷贝到一个工程中
以其中一个工程为模板,将另一个工程中需要的文件拷贝过来。这里以MSC的工程为模板,将CDC工程中的下列文件/文件夹拷贝过来,并添加到工程中。
添加完成后的工程目录如下:
复制过来的只有usbd_cdc_if.c和usbd_cdc.c及对应的.h文件,usbd_msccdc.c文件是需要自己实现的USB复合设备的代码。
3.修改程序
a)首先,原有的工程已经有USB复合设备的框架了,要使用的话需要添加一个宏定义:USE_USBD_COMPOSITE,直接在编译器里添加就行:
b)然后编写usbd_msccdc.c和对应的.h文件。该文件主要是USB复合设备的描述符等,这里不详细介绍。
c)其次修改USB CDC和MSC的端点,在usbd_cdc.h和usbd_msc.h文件中:
CDC使用的是0x81 0x01 和0x82三个端点
#ifndefCDC_IN_EP
#defineCDC_IN_EP0x81U/*EP1fordataIN*/
#endif /* CDC_IN_EP */
#ifndefCDC_OUT_EP
#defineCDC_OUT_EP0x01U/*EP1fordataOUT*/
#endif /* CDC_OUT_EP */
#ifndefCDC_CMD_EP
#define CDC_CMD_EP 0x82U /* EP2 for CDC commands */
MSC使用的是0x83和0x03端点
#ifndefMSC_EPIN_ADDR
#define MSC_EPIN_ADDR 0x83U
#ifndefMSC_EPOUT_ADDR
#define MSC_EPOUT_ADDR 0x03U
d)然后把usbd_conf.h文件中USBD_MAX_NUM_INTERFACES的值1修改为3
e)修改usbd_conf.c文件,如下:
f)修改usbd_msc.c和usbd_cdc.c文件如下:
g)最后修改usb_device.c文件:
void MX_USB_DEVICE_Init(void)
{
/*USERCODEBEGINUSB_DEVICE_Init_PreTreatment*/
/* USER CODE END USB_DEVICE_Init_PreTreatment */
/* Init Device Library, add supported class and start the library. */
if (USBD_Init(&hUsbDeviceFS, &usbCmpsitFS_Desc, DEVICE_FS) != USBD_OK)
{
Error_Handler();
}
/* if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_MSC) != USBD_OK)
{
Error_Handler();
} */
if(USBD_RegisterClassComposite(&hUsbDeviceFS, &USBD_CDC,CLASS_TYPE_CDC,0) != USBD_OK)
{
Error_Handler();
}
if(USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK)
{
Error_Handler();
}
if(USBD_RegisterClassComposite(&hUsbDeviceFS, &USBD_MSC,CLASS_TYPE_MSC,0) != USBD_OK)
{
Error_Handler();
}
if (USBD_MSC_RegisterStorage(&hUsbDeviceFS, &USBD_Storage_Interface_fops_FS) != USBD_OK)
{
Error_Handler();
}
if (USBD_Start(&hUsbDeviceFS) != USBD_OK)
{
Error_Handler();
}
/* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */
/* USER CODE END USB_DEVICE_Init_PostTreatment */
}
最后,编译成功后下载程序测试。可以看到USB虚拟出了一个串口和1个U盘,这里的U盘是一张32G的TF卡。测试一下串口收发和U盘读写,都正常。
审核编辑:刘清
相关推荐
的更多配置选项中选择USB的相关选项,如使用USB设备,使能复合设备,将设备用作CDC设备,更多配置请参照下图。5、修改相关代码1)在driver_clk.c文件中将函数void system
发表于 03-24 15:11
大家好,我们的需求是使用CH559作为host端,然后插入一个由STM32模拟的CDC usb设备。 但是在进行检测时一直出错,主要是在 CtrlGetConfigDescr这里出错,获得
发表于 07-04 06:57
使用官方例程 CH573_CDC_OK,usb模拟串口功能时,发现win10系统无需安装系统就可直接读写设备,但是系统关于设备描述和程序有差别,这是使用自写软件读取的串口信息(也可从系统的设备
发表于 08-10 07:31
例程如下:CH573_CDC_Lite.zip程序功能:模拟CDC设备,将usb接口模拟成串口设备,实现USB和串口0之间的数据互传。也可以将串口0代码删除,并修改usb处理函数如下,实现usb模拟串口
发表于 08-15 06:16
SC0095_AT32F435_437_USB_MSC_SDIO示例目的演示AT32F437使用USB挂载SD卡作为U盘使用。支持型号列表:AT32F435xxAT32F437xx主要使用外设列表
发表于 08-22 19:38
你好!我正在尝试使用 stm32u585 mcu 上的 USBX 中间件创建具有 2 个注册类 DFU 和 CDC ACM 的 USB 复合设备。我在 git 上浏览了这两个
发表于 12-07 10:14
是否有任何计划实现更多的 usbx 主机类,microsoft 提供的类比 ST (F4) 的 Azure rtos 包中当前可用的类更多。我需要一个支持带 cdc 设备的集线器的 USB 主机。
发表于 12-09 09:04
作为 CDC。我尝试结合创建两个不同描述符的代码,在函数 MX_USB_Device_Init() 中注册请求的设备并根据设备在 USBD_LL_Init() 中分配 PMA。由于我在MSC代码中集
发表于 12-15 08:59
你好,我在 STM32F4 DISC 板和 CubeMX 上使用 STM32F407VG。我想在 CDC 和 MSC 模式下使用 USB,但我找不到如何在此模式下配置它。可以使用 CubeMX 吗?如果没有,我可以使用 HAL 来完成吗?谢谢!
发表于 12-23 07:49
我已将 USB 设备设置为 MSC 类,连接到 SD 卡,因此一旦我连接到 PC,我就可以通过 Windows 资源管理器访问 SD。它显示为通用 USB 设备。如何使用自定义名称描述符进行配置?谢谢
发表于 12-26 08:31
); // CDC 批量输入: 切换到 HS 我发现非复合 VCP 或 MSC 也能正常工作。但是,切换到我的复合实现,我在 wireshark USB 分析器中看到,MSC 以无效数据响应命令 read10
发表于 12-26 10:08
你好!我想使用stm32F427在freeRTOS上实现USB host MSC功能。它被实现为在不应用 freeRTOS 的情况下工作良好,但如果应用 freeRTOS 则它不起作用。请介绍在cubeIDE上设置所需信息的资料或网址。谢谢你。
发表于 12-27 08:55
我在H7芯片上成功运行了ThreadX+USBX程序。使用的是USB复合设备(CDC ACM+HID),所以我尝试在F105RBT6上实现同样的功能,但是遇到了麻烦,在F105上运行USB复合设备
发表于 12-27 06:58
我正在尝试配置 STM32CubeIDE 和 L476RG(带有 FreeRtos)以使用 USB 主机 MSC fatfs 和设备 CDC (Vcom)。我发现这是不可能的。OTG 设置似乎只是在
发表于 12-27 07:24
我有两个独立的项目 HID 和 CDC 可以正常工作。但是当我想将两个项目合并到复合 USB 设备上时,HID 无法正常工作,卡住。只有 CDC 工作正常。
发表于 12-28 10:19
我使用 USB CDC 有一段时间了,现在使用以下 STM32 部件;- F417、F401、F070、F301 和 F373。我使用 STM32CubeIDE,我所有的项目都是使用设备配置工具构建
发表于 01-09 06:14
Win 7 和 Win 10 上的可识别设备。线路编码在 usbd_cdc_if.c 中设置,就像在 USB mooc 中一样,如下在 CDC_Control_FS 中,线路编码定义和初始化如下
发表于 01-10 08:13
我正在为需要实现 USB 双虚拟 com 端口(具有两个 vcom 端口的复合设备)的应用程序选择微控制器。我想使用 STM32F411,但我看到其他人在尝试这样做时遇到了问题,可能是因为该微控制器的端点很少。谁能给我解释一下这是什么情况?
发表于 01-17 06:39
想使用USB MSC的同时使用USB CDC来实现USB console功能,请问ESP32S3是否支持这样的方案?
发表于 02-13 07:46
通过 ESP32-Arduino,我了解到我们可以像使用物理 UART 端口一样与 USB-CDC 交换数据,使用与物理 UART 端口相同的功能,例如 Serial.print() 和
发表于 03-02 07:56
想使用USB MSC的同时使用USB CDC来实现USB console功能,请问ESP32S3是否支持这样的方案?
发表于 03-07 06:49
请问有ESP32-S2作为USB host来驱动CDC类型设备或者RNDIS设备的例程吗?急需,万分感谢!
发表于 03-09 07:14
个逻辑端点和 10 个物理端点端点。在这种情况下,这几乎无法满足我的需求,MSC 占用 2 个端点,CDC 占用 2 个端点,控制端点占用其他端点。我不确定物理/逻辑端点术语——Kinetis 文档
发表于 03-17 08:38
具有“音频输入设备”和“MSD 设备”的复合设备。恐怕拥有这两个功能会影响 USB 的吞吐量,因为一个是同步传输,另一个是批量传输。 就个人而言,我认为第一种方法非常有效,用户会对设备的性能感到满意
发表于 03-23 08:48
我无法将工作中的 USB 复合设备应用程序从 LPC54114 移植到 LPC11U68。问题背景:在此应用程序中,设备被枚举为仅 CDC,或复合 CDC + MSC 设备。问题发生在枚举为复合设备
发表于 04-14 06:34
USB主机和设备USB总裁中最重要的就是USB主机和USB设备。USB主机负责USB协议的处理,USB设备则可以完成用户的特点功能,下面将分别进行介绍。1. USB
发表于 05-23 09:23
实现多个功能的组 合。很多人认为一个USB接口上实现多个设备,就是指复合设备,其实,这是不确切的,虽然USB Compound Device和USB Composite Device 都会被百度翻译
发表于 07-02 03:14
大家好,我有一个具有复合USB功能的测试项目。它使用2个HID接口,1个键盘和1个音量控制。它还有一个关联描述符,它解释了默认的USB UART CDC描述符。更多信息请参看屏幕截图。如果我想
发表于 11-19 16:25
你好,我正在开发一个USB复合设备,提供两个功能:-从USB设备到USB主机的数据流。一个USB接口,一个大容量端点-一个用于控制设备的虚拟COM端口:CDC类设备,当我只在超高速配置设备中安装流
发表于 12-21 15:22
通信设备类功能的分步过程本节介绍CDC抽象控制模型(ACM)Linux小工具驱动程序的详细信息,如何配置Linux源以支持Zynq®的串行小工具驱动程序UltraScale +™MPSoC USB
发表于 01-03 09:59
本人利用cube生成的USB_MSC(设备模式)的工程,如何在STM32F407的USB_MSC例程上修改以实现USB_OTG_FS与PC之间的bulk模式传输数据,请做过的大侠指导一下~
发表于 02-14 07:00
我正在研究一种能够使用CDC和HID类与主机交谈的设备。单片机是PIC18F70J50。我还没有实现它作为一个复合设备(为此,我需要使用IAD描述符,据我的理解去)。我基本上已经采取了一个工作
发表于 04-08 08:19
您好,我尝试通过使用USB CDC从COM端口接收数据。发送数据工作良好,但我不能接收任何数据,因为FuffulbBeDeice Oracle CDCyRead总是返回SUBBI
发表于 04-19 15:06
我知道USB包括以下传输:控制中断ButkCurrOutOutOutlook USB USB CDC使用什么?CDC可以配置为执行批量或中断传输吗? 以上来自于百度翻译 以下为原文 I'm
发表于 07-24 14:38
问候,有人使用PIC32 MZ2048 EFG144作为CDC USB设备(或任何类型的设备,而不是主机)?如果是,请描述如果你使用了一个示例演示,以及可能的经验教训/障碍克服。谢谢,干杯
发表于 07-25 15:37
:AN5826PSoC3/PSoC 5LP UBHIDIDENT(带有键盘和复合设备),但在任何项目中都没有实现。我希望你们发现它有用。享受!CDC HID复合类文件463.3 K
发表于 08-09 10:44
程序员的串口接口。我在USB启动器套件II上原型,我修改了v2013库中的Device-CDC-Basic Demo,我的IDE是使用XC32 v 1.30的MatlabX。我的USB主机是现代的Win
发表于 10-14 15:52
我曾尝试使用和声2.0x在自定义板(PIC32MZ1024EFM100)上运行“USB设备MSD+CDC”,但Windows中枚举失败。来自和声的示例在演示板上工作得很好。在我的板上
发表于 11-01 07:45
的设备管理器的端口栏就可以找到对应的USB CDC枚举模拟串口设备。 图1PC设备管理器列表 用串口助手打开虚拟串口,TX接RX测试发送数据,结果如下:图2串口收发数据通信 以上就是MM32 MCU USB的CDC功能,下一节我们介绍MM32 M
发表于 03-04 16:54
,在前面我们介绍了MM32 实现HID、WINUSB、CDC和MSC功能,MM32系列MCU的USB功能有4个端点,所以我们可以自由组合上述的功能在一起,本节我们实现HID、WINUSB和CDC复合设备
发表于 03-04 17:23
我无法使用MLA USB设备Lite作为简单的CDC设备来生成代码。但是,在u***_device_cdc.c中包含“._address_..h”之后,问题就解决了。显然,这是必需的,否则tx和rx缓冲区将不被分配到正确的USB RAM位置。谢谢。
发表于 03-18 09:54
嗨,我在GSM调制解调器的USB主机CDC驱动程序上使用mplab.ony 2.03版,但是它没有工作。当我把设备连接到USB端口时,Harmony没有检测到它。有什么问题吗?我使用USB主机CDC演示代码从和声文件夹。问候,Akshay
发表于 04-10 09:48
,J-Link RTT需要使用J-Link下载器,所以希望有新的方法实现shell,本次我们介绍USB CDC的方式来实现shell功能。本次我们采用MM32L373 MiniBoard作为测试开发板,验证
发表于 05-07 17:59
最新要做一个项目,要求基于STM32F407实现USB CDC设备,首先想到的就是直接用STM32CUBEMX工具来生成,OK,话不多说,直接上过程:RCC配置:Sys配置USB_OTG_FS配置
发表于 08-05 06:38
STM32 HAL库实现USB组合设备CDC+MSC目录STM32 HAL库实现USB组合设备CDC+MSC
发表于 08-05 07:54
本实验是基于野火霸道开发板STM32F103ZET6目的完成一个CDC + MSC的复合USB设备可以方便在CDC,MSC,复合设备三者间切换可移植性强预备知识cube中USB只有两个入口。main
发表于 08-20 07:28
STM32 USB复合设备编写目的完成一个CDC + MSC的复合USB设备可以方便在CDC,MSC,复合设备三者间切换可移植性强预备知识cube中USB只有两个入口。main函
发表于 08-20 07:10
STM32 USB_CDC配置前言:配置思路前言:做之前先要有一些准备:1、PC上装好VCP1.31以上的虚拟串口驱动2、准备一块带USB的STM32(是要连接好USB接口的,不是串口的USB)3
发表于 08-23 07:24
如何去实现基于STM32F407的USB CDC设备配置?其过程是怎样的?
发表于 10-25 08:38
STM32 HAL库是如何去实现USB组合设备CDC+MSC的?其基本步骤有哪些?
发表于 10-27 06:05
ruhe使用stm32 cubemx配置生成CDC和HID工程呢?基于stm32f107+CubeMx+Keil如何去实现HID+CDC组合设备呢?
发表于 10-28 08:51
使用AT415 OTG实现MassStorage和CDC复合设备
发表于 01-21 14:25
项需求,在STM32F072中需实现5个CDC设备,折腾了很久分享出来,希望能帮助别人少踩一些坑.USB2.0全速,该款单片机支持8个输出和8个输入端点,过程中参考了些大佬的贴子STM32两个CDC的配置STM32 USB知识感谢大佬门的分享!2.USB
发表于 02-22 07:28
如何将STM32F103C8T6的CustomHID和MSC USB设备进行复合?
发表于 02-22 07:02
请问ch32v307有高速hid+msc组合usb设备的例子吗?
发表于 06-15 07:26
CH9350工作在下位机模式时,是否支持复合设备接到单个USB(只用1个USB)?
发表于 07-13 06:30
rtthread使用usb复合设备生成HID+BULK+MSC后,win10电脑端MSC无法启动,且根据MCU端点池分析端点也是够用的,想知道这个是RTT代码框架问题还是什么问题。
发表于 10-27 10:59
介绍了摩托罗拉公司新一代定点数字信号处理芯片MSC8101的特点,以及Turbo码译码在MSC8101上的实现技术。
发表于 09-13 18:04
•20次下载
08 CDC设备
发表于 10-11 09:17
•9次下载
特性
通用串行总线 (Universal Serial Bus, USB)
• 支持全速 USB (12 Mb/s)
• 实现 USB 协议复合设备 CDC 设备,用于实现通
信、配置和 I/O
发表于 06-28 14:22
•1次下载
特性:
通用串行总线(Universal Serial Bus,USB)
• 支持全速USB(12 Mbps)
• 实现USB协议复合设备:
- 用于USB至UART转换
发表于 07-03 08:24
•10次下载
1. 复制winxp_win7_32bit_64bit_usb_cdc.inf文件到你电脑上。插上usb串口设备。打开设备管理器,会发现多了一个“CH554_CDC”的未知设备。
发表于 09-24 08:00
•50次下载
HID_CDC复合设备在WIN10的识别问题(电源技术发展综述)-本文以STM32F405为例,详细说明上HID_CDC复合设备在WIN10的识别问题。
发表于 08-04 18:23
•20次下载
CubeMx 生成的USB CDC程序 WIN10系统 USB设备描述符请求失败一、说明二、cubeMX配置过程1、时钟树设置2、参数配置3、管脚配置4、中段配置5、生成代码,编译下载6、结果三
发表于 12-28 19:42
•11次下载
项需求,在STM32F072中需实现5个CDC设备,折腾了很久分享出来,希望能帮助别人少踩一些坑.USB2.0全速,该款单片机支持8个输出和8个输入端点,过程中参考了些大佬的贴子STM32两个CDC的配置STM32 USB知识感谢大佬门的分享!2.USB
发表于 12-28 19:43
•18次下载
在上一节我们介绍了MM32 MCU的USB模拟U盘功能,通过四个章节把常用的USB设备功能编程一一做了介绍,通常来说,往往希望我们USB设备多个...
发表于 01-26 19:46
•1次下载
在接下来的章节里,小编将和大家一起学习使用MM32 MCU的USB功能。对于USB来说,主要应用是HID、CDC、MSC以及WINUSB等功能,此节将先介绍...
发表于 01-26 19:49
•3次下载
,J-Link RTT需要使用J-Link下载器,所以希望有新的方法实现shell,本次我们介绍USB CDC的方式来实现shell功能。
发表于 02-09 09:33
•2次下载
在上一节我们介绍了MM32 MCU的WINUSB功能,对于WINUSB来说,还是需要开发对应的上位机来测试收发数据,相对来说较麻烦,如果仅做MCU与PC的数据通信功能,开发USB CDC功能可以直接用串口助手等工具即可测试数据收发。
发表于 02-09 11:30
•3次下载
有客户使用STM32F405并参照ST官方USB标准库下的HID+CDC的示例代码做产品,发现在WIN7上使用得好好的,可放到WIN10上,CDC第一次能够识别,再次拔插后就不能再识别。
发表于 05-30 17:49
•9450次阅读
cube的stm32 usb代码分析以及复合设备开发
发表于 07-05 00:11
•8134次阅读
爱特梅尔AVR XMEGA USB CDC 和 DFU简介
发表于 07-10 03:21
•2266次阅读
了解如何使用命令report_cdc分析,调试和修复设计中的CDC问题。
命令report_cdc是一个仅限TCL的命令,用于分析您的设计并识别设计中潜在的CDC结构问题并将其标记为安全或
发表于 11-21 06:05
•3668次阅读
LDR2001 芯片是乐得瑞科技设计的一个免驱的 USB 转串口的 CDC 类芯片,可以实现USB 转串口和 Billboard 的功能。当使用了 LDR2001 芯片的设备接入 USB HOST
发表于 08-18 17:16
•1830次阅读
昨天FAE同事报了一个客户需求过来,需要双大容量存储设备(MSC device),一个安装在SD卡上,另一个安装到SDRAM上面。
发表于 08-18 14:42
•397次阅读
这部分主要介绍AT32 USB设备库的结构和库的使用方法,AT32 USB是基于USB2.0全速设备,不支持USB2.0高速设备。这里库的作用是用来管理USB外设和实现US
发表于 02-22 10:09
•186次阅读
AT32USB设备协议库这部分主要介绍AT32USB设备库的结构和库的使用方法,AT32USB是基于USB2.0全速设备,不支持USB2.0高速设备。这里库的作用是用来管理USB
发表于 02-21 22:34
•0次阅读
评论