[AT32F405] 【AT-START-F405测评】USB-ACM功能开发

[复制链接]
 楼主| chen000000009 发表于 2024-5-16 00:17 | 显示全部楼层 |阅读模式
USB的CDC类是USB通信设备类 (Communication Device Class)的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。
其中最常见的是ECM、NCM、ACM,前两个模拟的是网卡设备,ACM模拟的是串口设备。
下面介绍如何在AT32F405上实现USB ACM设备。工程还是使用上一篇文章生成的工程。
1、驱动源码添加
将USB控制器驱动加入工程,USB控制器驱动分usb device驱动和usb host驱动,由于本工程里面只用实现device端的功能,因此只需要添加usb device驱动,如下图
e2c9a8ef4555a9056b5e9d6ee78c7231
usbd_class里面包含了典型的usb device子类,这里只需要增加usbcdc class
3bd159618e4606771f70d68a011cf0b0
加入头文件相关路径
6346a81fbca9d9bcd5b97f7c158aa2e1
此外还需要设定使用哪个USB控制器,在宏定义中添加
9f8ab555806b492c754a107bb95dc5ae
这样就完成了驱动的添加
2、增加初始化函数
usb初始化需要先配置时钟,即开启otg clock和48m clock
1c7c1ada3efceba3681a6f24f5db64ac
这两个API的实现可以参考
AT32F402_405_Firmware_Library_V2.0.8\project\at_start_f405\examples\usb_device
下面的demo,这里不赘述
接着使能OTG的中断,优先级可以自行设定,这里默认设置为0
接着调用usbd_init函数,这个函数主要设定了usb device子类的回调函数,以及相关的描述符
3、实现中断函数
这里只需要直接调用usbd_irq_handler
0e7f6e1504c1db266d4cc7a0a0e5415d
这个中断在usb插拔和数据传输时都会进入
4、主循环中添加收发函数
主循环中定期调用usb_vcp_get_rxdata可以接收usbacm的数据
3544f38f327f543e01f0f6e4a75ad80e
其中第二个参数为指定的缓冲区,返回值为收到数据的长度
到这里就完成了程序编写,下面来调试
将程序编译,下载到板上后,用一条USB线,将板上的HS_DEVICE接口和PC连接,此时PC端会出现一USB串口设备,如下图
79a4d659e72bb9fb2f74f838a5bdd77b
其PID VID即为cdc_desc_handler中设定的
此时在调试模式下,可以看到,PC端串口工具发送数据与开发板接收到的一致
b198c257849e09efcdd47ed08334811b
这样就完成了USB CDC ACM的开发

呐咯密密 发表于 2024-5-21 13:22 | 显示全部楼层
官方的驱动很不错,实现很简单啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

780

帖子

2

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