一种基于STM32的USB接口数据通信方法研究

2021-04-28 08:05赵晓娜
山西电子技术 2021年2期
关键词:机软件描述符端点

赵晓娜

(山西大众电子信息产业集团有限公司,山西 太原 030024)

0 引言

随着嵌入式系统的不断发展,通过单片机采集并发送数据到PC端供人们研究,已经成为目前热门的研究领域。单片机到PC之间数据的传输方式主要有并口传输、串口传输、I2C传输和USB传输等。大多数的数据传输方式具有连接复杂,速度慢等缺点,而USB传输有速度快,连接简单、扩展性相对强、支持热插拔等优势,也是目前使用最广泛且最方便的传输方式[1]。

本文主要是通过USB接口将上位机软件的数据指令发送给STM32,对其指示灯进行点亮。通过上位机软件发送数据到单片机,也是新的研究课题之一,具有很好的研究价值。

1 总体设计

USB一般有主设备和从设备之分,并且当主设备发起数据传输时,作为从设备只能被动地接收数据。本系统设计主要包含两部分,下位机STM32端USB数据接收和上位机端USB数据发送。上位机通过自定义协议发送两位字节数据给下位机,下位机对数据进行解析后将其指示灯进行点亮控制,两者相互配合实现了可靠、高速的数据传输。

2 上位机软件设计

2.1 设计流程

该系统上位机软件开发是在Windows操作系统下,通过VC6.0开发工具,采用MFC框架进行界面设计的。该设计中USB驱动程序的开发使用了LibUSB-Win32库函数。主要的USB驱动库函数如图1所示。

图1 USB驱动库函数

上位机软件的实质就是Windows应用程序,即通过界面的形式把与用户的交互式命令形象地展示出来。它是通过消息对话框窗口实现命令交互,该窗口可以接收和反馈用户的输入数据、进行多方位窗口拖动和窗口关闭操作,具体设计流程如图2所示[2]。

图2 流程图

2.2 模块实例

界面的设计采用了模块化的设计理念,主要分为HID设备模块、报告模块、发送模块、状态显示模块、发送数据输入模块(见图3)。

图3 界面图

HID模块的功能主要是通过查找输入USB设备的VID和PID,点击连接设备程序将通过不断的扫描查找到与之匹配的设备,找到设备后就可以对设备进行正常的输入输出操作。 当输入HID设备信息时,其厂商ID(VID)和产品ID(PID)在电脑端设备管理器中可找到(见图4)。

图4 HID设备信息

在发送数据输入模块输入ab或AB字符,点击发送模块的发送数据,即可将数据发送出去,指示灯点亮,输入其他的任意两个字符数据都将熄灭指示灯。在发送模块中对数据发送的端点进行了默认设置为端点2,同时对单片机的USB接收端也选择了端点2接收。

状态显示模块主要是提示设备有没有连接成功,数据有没有发送成功。报告模块对报告描述符的ID设置为0,报告描述符大小设为32字节。点击“退出”就关闭整个窗口。

该系统中上位机的界面设置实现了基本的USB设备的管理和数据传输功能,做到了简洁,直观。

3 下位机软件设计

3.1 文件导入

下位机软件设计核心是对STM32芯片进行USB固件库的设计和使用。单片机中USB协议本身就很复杂,对于USB接口的程序设计相对难度也很大。ST公司专门提供了关于STM32系列芯片的USB固件库驱动程序,这样就简化了USB接口的程序设计,大大地缩短了软件的开发周期。本系统也使用了STM32标准的固件库程序,相关的程序文件如图5所示[3]。

图5 程序文件包

USB固件库主要由内核层(STM32_USB-FS-LIB)和应用接口层(USB_OEM)组成,内核层主要功能是对USB底层的控制传输处理、设备信息的注册、协议的解析和硬件模块的配置与实现,所以内核层在程序开发时一般不需要做大的改动;应用接口层的函数是与上位机进行通信的直接接口函数,在实际的固件库开发过程中,一般只需要对应用接口层的函数进行相应的修改即可。

3.2 USB描述符设置

1) 配置描述符(Configuration Descriptor)用于定义设备的配置信息,一个设备同时可以有多个配置描述符。配置描述符中包含了描述符大小(0x09)、类型(USB_CONFIGURATION_DESCRIPTOR_TYPE)、数据长度(KVMCLIENT_SIZE_CONFIG_DESC)、配置支持的接口数量(0x01)、配置参数选择(0x01)、字符串索引(0x04)、供电模式选择(0xa0)和最大电流消耗值(0x32)。

2) 接口描述符(InterfaceDescriptor)说明了接口的配置。接口描述符中包含了描述符大小(0x09)、类型( USB_INTERFACE_DESCRIPTOR_TYPE)、接口编号(0x00)、备用接口标号(0x00)、端点使用数目(0x02)、类型代码(0x03)、子类型代码(0x01)、协议代码(0x01)、字符串索引(05)。

3) 端点描述符(Endpoint Descriptor)描述了接口使用的端点属性(端点0除外)。端点描述符中设置了描述符大小(0x07)、类型(USB_ENDPOINT_DESCRIPTOR_TYPE)、端点地址(0x81)、端点属性(0x03)、信息包大小(0x40)、数据传输时间间隔(0x0A)。本文将设置端点2 为输入端。

4 实验结果

使用USB数据线连接PC端的上位机与STM32单片机,通过上位机发送数据指令ab(AB),点亮STM32端的指示灯;发送其他任意两位字符指示灯熄灭,效果图如图6所示。

图6 实验结果

5 结论

本系统提出了一种PC机作为发送端,STM32单片机作为接收端,基于USB接口进行数据传输的方法,两者连接之后发送端首先进行USB设备的识别,识别之后开始连接通信。发送端发送十六进制形式的两位数据字符给STM32单片机,单片机端进行数据的解析,最终实现了对其指示灯进行开关控制,传输稳定,速度快,具有很好的应用价值。

猜你喜欢
机软件描述符端点
无线传感网气象监测系统上位机软件设计
基于Qt的探测器温控上位机软件设计
例谈求解“端点取等”不等式恒成立问题的方法
基于AKAZE的BOLD掩码描述符的匹配算法的研究
不等式求解过程中端点的确定
欧洲共同语言参考标准在中国高校学术英语写作教学适用性的研究:可理解性,可行性和有用性
基于深度学习的局部描述符
一种基于PCIE总线的改进分散集聚DMA的设计
小水电站计算机监控系统上位机软件的开发
基丁能虽匹配延拓法LMD端点效应处理