CH32F1系列是基于32位Cortex-M3内核设计的通用微控制器。片上集成了时钟安全机制、多级电源管理、通用DMA控制器等。此系列具有2路USB2.0接口(USB Device & USB Host/Device)、多通道TouchKey、12位DAC转换模块,多通道12位ADC、多组定时器、CAN 通讯控制器、I2C/USART/SPI 等丰富的外设资源。 本次应用主要用到USB Device接口,通过软件编程实现一个CDC设备,将电脑端下传的数据完全回传至电脑,可通过电脑端串口助手验证。USB 的 CDC 类是 USB 通信设备类(Communication Device Class Specification )的简称。可以通过 USB CDC 协议来将 USB 接口虚拟为其他通讯接口如串口,以太网接口,ISDN 接口等等。本应用主要实现在电脑端模拟一个CDC虚拟串口。Win10系统自带了CDC设备的驱动,所以电脑端无需装驱动便可实现通讯。 流程图如下图所示:
软件编程过程如下: CH32F103EVT中的USB Device工程中,跟USB相关是USB Core和USB Config文件夹下包含的.C文件。其中USB Core是USB驱动的底层文件,一般不做修改。重点修改的是USB Config文件夹下的.C文件。下面重点介绍USBCONFIG文件夹下的几个文件: hw_config.c 文件,该文件用于硬件的配置,比如初始化 USB 时钟、USB 中断、低功耗模 式处理等。 usb_desc.c 文件,该文件用于描述符的处理。 usb_endp.c 文件,该文件用于非控制传输,处理正确传输中断回调函数。 usb_istr.c 文件,该文件用于处理 USB 中断。 usb_prop.c 文件,该文件用于处理设备的相关事件,包括设备的初始化、复位等等操作。 usb_pwr.c 文件,该文件用于 USB 控制器的电源管理;。 在usb_desc.c里面定义了设备描述符、配置描述符、字符串描述符,需要将其修改成CDC设备对应的描述符,需要注意的是要在usb_desc.h里面修改描述符对应的长度,否则会枚举出错。其次在usb_endp.c里面增加设备端点的中断回调函数,实现将批量下传端点3收到的数据完全透传至批量上传端点1,实现回传效果,如图所示: 在usb_prop.c中首先需要加上CDC设备修改波特率的类命令的代码支持,其次需要在USBD_Reset() 函数中把端点1、端点3修改成批量端点。以上修改完,整个的功能就已经完成了,实际效果如下图所示:
源码见附件如下:
|