之前的文章中介绍过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 0x03Ud)然后把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盘读写,都正常。
审核编辑:刘清
-
msc
+关注
关注
0文章
29浏览量
20107 -
CDC
+关注
关注
0文章
57浏览量
17768 -
TF卡
+关注
关注
2文章
77浏览量
12135 -
stm32cubemx
+关注
关注
5文章
280浏览量
14746
原文标题:基于STM32CubeMx的USB CDC+MSC复合设备
文章出处:【微信号:嵌入式技术开发,微信公众号:嵌入式技术开发】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论