【GD32F427开发板试用】二、USB库移植与双USB CDC-ACM功能开发

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:chenjie

【GD32F427开发板试用】一、环境搭建与freertos移植
【GD32F427开发板试用】二、USB库移植与双USB CDC-ACM功能开发
【GD32F427开发板试用】三、USB转CAN功能开发与试用总结

3.USB库移植

GD的USB库在

GD32F4xx\\_Firmware\\_Library\\_V3.0.2\GD32F4xx\\_Firmware\\_Library\Firmware\GD32F4xx\\_usb\_library

中,然后他们提供了demo,demo在

GD32F4xx\\_Firmware\\_Library\\_V3.0.2\GD32F4xx\\_Firmware\_Library\Examples\USB

里面,这里可以选,作为host还是device,然后device模式的时候有多种模式。

这里笔者使用的是device模式,和上位机的USB通信模式可以用cdc-acm也可以用hid。作为 cdc-acm的时候,对于上位机,它类似于一个高速的串口,如果是上位机运行linux,会容易开发一点。

这里可以识别到GD32的CDC\_ACM设备为high-speed,说明USB3300已经正常工作了。

然后测试收发

可以看到发送的内容都接收到了,说明USB 收发正常。

4.双USB CDC-ACM功能开发

所谓的双USB CDC-ACM,就是使用USB复合设备,一个USB设备上面有几种功能。最典型的应用的就是4G模块。

GD原生并不支持双USB CDC-ACM,不过他们给了一个复合设备的demo,是hid+打印机的,可以在GD32F4xx\\_Firmware\\_Library\Examples\USB\USB\\_Device\composite\\_dev\\_hid\\_printer找到它。然后网上有人基于STM32F7设计过多个USB
CDC-ACM复合设备(https://shequ.stmicroelectronics.cn/forum.php?mod=viewthread&tid=613510)。那么可以基于这些工程来进行GD32F427上面双USB CDC-ACM的开发。

GD的USB库跟ST的USB库整体框架差不多,看下面这个图就能明白。

endpoint是usb的最小通信单元,GD32F427的USBFS有8个endpoint,四收四发,USBHS有12个endpoint,6收6发。一个CDC-ACM需要三个endpoint,命令端口收一个,数据端口收发各一个。端点0的收发都不能占用,是用于USB匹配的。因此要实现两个USB-ACM复合,只能使用USBHS。USB各个class从endpoint里面拿到数据之后可以根据各自协议的不同来实现协议解析,定长度传输等。CDC-ACM是最简单的,endpoint里面拿到的就是原始数据,不用转换。而像CDC-ECM这种,里面的数据则是要经过IP TCP(UDP)等协议转换之后才能给到应用层处理。

下面针对开发步骤进行说明。

1、模板使用的是GD的工程里面单USB
CDC-ACM的。新建一个源文件,比如叫做dual\\_cdc\\_acm.c,将cdc\\_acm\\_core.c里面的内容复制进去。

2、注意到USB的初始化函数

关注它最后两个参数,前面那个是USB描述信息,也就是给端点0用于与HOST端进行匹配的。后面那个是一系列回调函数,用于中断里面事务处理。这里新建两个结构体

3、修改USB描述信息,结构体usb\\_desc\\_dev

这里bDeviceClass要改为0xEF,意思是USB复合设备,然后bDeviceSubClass是USB\\_CLASS\\_CDC,也就是0x02,最后一个实测没什么影响。

修改config信息。这个config信息其实用一个大的数组来存放会更加灵活

这个dual\\_cdc\\_acm\\_config\\_desc的信息按照那篇基于STM32F7的多个USB
CDC-ACM复合设备的文档改就行。这些都是标准的。

4、改回调函数,其实重点改后两个,也就是数据收发的就行。GD的是只有一个cdc设备,要改成支持两个,就要判断一下数据是哪个端点来的,要发往哪个端点。

5、分配endpoint,对应两组CDC设备。

6、包装收发函数各一个给应用层调用。如果是在rtos下面使用,发送函数建议加个锁,以免并行的时候多个线程同时写endpoint里面的数据

完成这些步骤之后,可以写一回环的demo验证一下

编译,下载到开发板之后,插电脑,可以看到两个USB设备

然后可以用串口工具测试下收发。

可以看到回环测试成功,PC端发出去的数据跟收到的一样。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CDC-ACM驱动是一种USB设备驱动程序,用于安装和连接支持CDC ACM规范的通信设备。在Windows 7操作系统中,CDC-ACM驱动程序已经预装,但如果您的USB设备无法正常工作,您可以尝试手动更新或重新安装驱动程序。 首先,在Windows 7操作系统中,您可以通过设备管理器找到CDC-ACM驱动程序。打开设备管理器,找到您的USB设备,右键单击并选择“属性”,然后切换到“驱动程序”选项卡。如果您看到“当前驱动程序”一栏中没有CDC-ACM驱动程序,您可以在此处选择“更新驱动程序”选择CDC-ACM驱动程序并安装。 如果您的USB设备无法连接到计算机,您可以尝试重新安装CDC-ACM驱动程序。首先,您可以从设备制造商的网站下载最新版本的CDC-ACM驱动程序,或者从Windows更新程序中查找更新。然后,您可以将USB设备插入电脑,然后CDC-ACM驱动程序进行安装。按照安装向导的指示进行操作,完成驱动程序的安装后,您可以重新连接您的USB设备并测试其是否能够正常工作。 总之,CDC-ACM驱动程序是Windows 7预装的USB设备驱动程序之一。如果您的USB设备无法正常工作,您可以通过更新或重新安装驱动程序来解决问题。如果您有任何疑问或困难,建议您查看设备制造商的帮助文档或寻求专业的技术支持。 ### 回答2: CDC-ACM驱动是一种用于连接设备的万能串行总线设备驱动程序,可用于Windows 7操作系统。常见的CDC-ACM设备包括USB调制解调器、串行数字摄像头、商用POS终端等。 安装CDC-ACM驱动前,需要确认系统已经启用了自动驱动程序安装功能。打开设备管理器,在“通用串行总线控制器”下看到“CDC-ACM设备”或其他相关设备,说明驱动已经被正确识别。如果未自动识别,可以手动安装驱动。 手动安装驱动的步骤是,首先下载安装程序,解压缩后通过设备管理器找到对应设备,右键选择“更新驱动程序软件”,选择“浏览计算机以查找驱动程序软件”,选择解压文件夹中的.inf文件并进行安装。安装完成后,重新插拔设备即可。 总之,CDC-ACM驱动是连接设备的重要工具,对于无法识别的设备或需要手动更新驱动程序的情况,可以采取手动安装驱动的方式进行操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值