[应用相关] HAL库实现USB组合设备CDC+MSC

[复制链接]
1491|25
 楼主| 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);
}



 楼主| 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;
}



 楼主| 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;
}

 楼主| labasi 发表于 2021-7-4 16:05 | 显示全部楼层
第五步:MX_DEVICE_USB_Init修改

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


 楼主| labasi 发表于 2021-7-4 16:06 | 显示全部楼层

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

这样就是成功了!

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


 楼主| labasi 发表于 2021-7-4 16:06 | 显示全部楼层
遇到的问题

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

解决办法:

  • 卸载识别出来的串口,重新拔插
  • 在程序里修改一下PID watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxMTUzNDcxNTAz,size_16,color_FFFFFF,t_70.jpg

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部