使用joomla的网站,汉中软件开发项目管理,网站建设 工单,制作网站能赚钱吗STM32 USB组合设备 MSC CDC实现
教程
教程请看大佬niu_88 手把手教你使用USB的CDCMSC复合设备#xff08;基于stm32f407#xff09; 大佬的教程很好#xff0c;很详细#xff0c;我调出来了#xff0c;代码请见我绑定的资源
注意事项
值得注意的是#xff1a; 1、 cu…STM32 USB组合设备 MSC CDC实现
教程
教程请看大佬niu_88 手把手教你使用USB的CDCMSC复合设备基于stm32f407 大佬的教程很好很详细我调出来了代码请见我绑定的资源
注意事项
值得注意的是 1、 cubemx固件库存储位置是 C:\Users\你的用户名\STM32Cube\Repository\STM32Cube_FW_F4_V…你的固件版本号 找 STM32Cube_FW_F4_V1.28.1\Middlewares\ST\STM32_USB_Device_Library\Class 即可找到CompositeBuilder的例子文件 2、 注意一下usbd_composite_builder.h中 一些宏定义 USBD_CMPSIT_ACTIVATE_MSC USBD_CMPSIT_ACTIVATE_CDC 在#include的下面 应该移到上面去否则编译时找不到 3、 usbd_composite_builder.h修改配置描述符数组长度宏定义USBD_CMPST_MAX_CONFDESC_SZ改成106这里 文件里本来是300它之后会存入uint8的数组里300会变成44所以要修改 4、 复合设备编译宏USE_USBD_COMPOSITE 可在编译器预处理宏定义里添加 5、 我这版本比较新使用USE_USBD_COMPOSITE后 usbd_cdc.h中
#ifdef USE_USBD_COMPOSITE
uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff,uint32_t length, uint8_t ClassId);
uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev, uint8_t ClassId);
#else
uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff,uint32_t length);
uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev);
#endif /* USE_USBD_COMPOSITE */这两个函数会使用组合设备版本多了个classId的参数。参考大佬的代码使用时可以如下修改。 比如
/*** brief CDC_Transmit_FS* Data to send over USB IN endpoint are sent over CDC interface* through this function.* note*** param Buf: Buffer of data to be sent* param Len: Number of data to be sent (in bytes)* retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY*/
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{uint8_t result USBD_OK;/* USER CODE BEGIN 7 */USBD_HandleTypeDef *pdev hUsbDeviceFS;/* Get the class index relative to this endpoint */uint8_t idx USBD_CoreFindEP(pdev, CDC_IN_EP);//获取classIDMy_usb_fs_cdc_transmited false;USBD_CDC_HandleTypeDef *hcdc (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;if (hcdc-TxState ! 0){return USBD_BUSY;}USBD_CDC_SetTxBuffer(hUsbDeviceFS, Buf, Len, idx);result USBD_CDC_TransmitPacket(hUsbDeviceFS, idx);/* USER CODE END 7 */return result;
}关于我的资源
最后成功截图 我的开发环境vscode eide插件 工具链arm-gcc 使用的芯片是stm32f405rgt6大容量设备是SD卡调试用的串口是串口6