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驱动,如下图
usbd_class里面包含了典型的usb device子类,这里只需要增加usbcdc class
加入头文件相关路径
此外还需要设定使用哪个USB控制器,在宏定义中添加
这样就完成了驱动的添加
2、增加初始化函数
usb初始化需要先配置时钟,即开启otg clock和48m clock
这两个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
这个中断在usb插拔和数据传输时都会进入
4、主循环中添加收发函数
主循环中定期调用usb_vcp_get_rxdata可以接收usbacm的数据
其中第二个参数为指定的缓冲区,返回值为收到数据的长度
到这里就完成了程序编写,下面来调试
将程序编译,下载到板上后,用一条USB线,将板上的HS_DEVICE接口和PC连接,此时PC端会出现一USB串口设备,如下图
其PID VID即为cdc_desc_handler中设定的
此时在调试模式下,可以看到,PC端串口工具发送数据与开发板接收到的一致
这样就完成了USB CDC ACM的开发
|