发新帖我要提问
12
返回列表
打印
[应用相关]

HAL库实现USB组合设备CDC+MSC

[复制链接]
楼主: labasi
手机看帖
扫描二维码
随时随地手机跟帖
21
labasi|  楼主 | 2021-7-4 16:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
static uint8_t  USBD_Composite_RxReady (USBD_HandleTypeDef *pdev)
{
        USBD_Composite_Switch_CDC(pdev);
        return USBD_CDC_EP0_RxReady(pdev);
}



使用特权

评论回复
22
labasi|  楼主 | 2021-7-4 16:05 | 只看该作者
static void USBD_Composite_Switch_MSC(USBD_HandleTypeDef *pdev)
{
        static USBD_MSC_BOT_HandleTypeDef USBD_MSC_Handle;
        USBD_MSC_RegisterStorage(pdev, &USBD_Storage_Interface_fops_FS);
        pdev->pClassData = (void *)&USBD_MSC_Handle;
}



使用特权

评论回复
23
labasi|  楼主 | 2021-7-4 16:05 | 只看该作者
static void USBD_Composite_Switch_CDC(USBD_HandleTypeDef *pdev)
{
        static USBD_CDC_HandleTypeDef USBD_CDC_Handle;
        USBD_CDC_RegisterInterface(pdev, &USBD_Interface_fops_FS);
        pdev->pClassData = (void *)&USBD_CDC_Handle;
}

使用特权

评论回复
24
labasi|  楼主 | 2021-7-4 16:05 | 只看该作者
第五步:MX_DEVICE_USB_Init修改

上面我们已经完成了统一接口的编写,现在就可以修改MX_DEVICE_USB_Init函数了,屏蔽掉接口注册函数USBD_CDC_RegisterInterface,然后将类注册换成我们自己的组合设备,如下图:


使用特权

评论回复
25
labasi|  楼主 | 2021-7-4 16:06 | 只看该作者

到这里就已经改完了,运行程序之后设备管理器会出现:一个组合设备、一个虚拟的串口、一个USB大容量存储设备,如下图:

这样就是成功了!

!!如果修改过后发现设备管理器的MSC或者CDC显示感叹号,那么在回头检查PMA的配置以及组合设备描述符!!


使用特权

评论回复
26
labasi|  楼主 | 2021-7-4 16:06 | 只看该作者
遇到的问题

我修改完毕之后,将板子接入电脑,虚拟出来的串口没问题,但是就是死活认不出U盘,后来找到问题的原因是因为我先使用的CDC串口这个单独的工程,我的win10已经默认枚举成了CDC,所以认不出U盘。

解决办法:

  • 卸载识别出来的串口,重新拔插
  • 在程序里修改一下PID

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则