开篇:润墨网以专业的文秘视角,为您筛选了一篇基于USB―HID的I/O扩展卡设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
摘要:本文详细介绍了一种基于usb-hid的I/O扩展卡,研究其系统硬件、固件程序、驱动程序和应用程序的设计。本设计采用高性能单片机STM32F103ZET6作为主控制器,采用Visual Studio和Keil作为开发环境,实现了对计算机数字、模拟I/O的扩展。本设计巧妙地将I/O操作和控制逻辑分离开来,既保留了单片机使用灵活的特点,又充分利用了通用计算机的强大性能,具有广阔的发展前景。
关键词:STM32 USB-HID GPIO ADC DAC
中图分类号:TP302.1 文献标识码:A 文章编号:1007-9416(2016)04-0000-00
1 设计背景
随着信息技术的不断发展,原来裸机上可以直接进行的硬件I/O操作逐渐作系统所接管,而原来计算机的通用I/O端口也逐渐被专用的板卡代替,用户无法再通过编写程序对I/O端口进行操作,这便给一些领域的研发、教学工作带来诸多不便,本设计便解决了这一难题。
2 设计方案
基于USB-HID的I/O扩展卡可以从功能上分为系统硬件、固件程序、驱动程序和应用程序四个层次:应用程序位于系统的最上层,驱动程序位于系统的第二层,固件程序位于系统的第三层,系统硬件位于系统的最底层。来自应用程序的操作指令经过驱动程序、固件程序依次传递给系统硬件,指令执行完成后,系统硬件会将输入指令的读取到的数据或输出指令的执行结果将依次通过固件程序、驱动程序原路传递回应用程序,供系统进行下一步处理。如图1。
2.1 系统硬件
基于USB-HID的I/O扩展卡系统硬件由STM32单片机、LM2940稳压芯片和光耦构成,负责解析来自固件程序的控制指令,分别执行GPIO、ADC、DAC等功能。
2.2 固件程序
基于USB-HID的I/O扩展卡固件程序采用C语言、汇编等低级语言编写,运行在STM32单片机上,接收来自驱动程序的控制指令并传递给系统硬件执行。
将单片机配置为自定义USB-HID设备,规定好设备的接口描述符、端点描述符、设备描述符、报告描述符,即可在Windows平台下实现免驱通信。
固件程序分为两部分:主程序首先进行系统初始化,然后再主循环中调用CheckTask()函数检查任务队列,当检查到队列中有任务时便调用ReadData()函数读取并执行指令,执行完成后调用GetResult()函数获取并返回执行结果;中断处理程序响应USB接收中断,调用AddTask()函数解析指令并加入任务队列,最后清除标志位完成处理。如图2。
2.3 驱动程序
基于USB-HID的I/O扩展卡驱动程序提供了可被应用程序调用的托管类库作为接口,屏蔽不同语言间的差异,并将传入的数据通过USB-HID方式发送给固件程序。
驱动程序提供了OpenDevice()、SetHandler()、WriteData()、ReadData()、CloseDevice()五个函数分别用于打开设备、设置委托、写入数据、读取数据和关闭设备,通过hid.dll调用了Windows API中的HidD_GetHidGuid()、SetupDiGetClassDevs()、HidD_FreePreparsedData()、ReadFile()、CreateFile()、HidP_GetCaps()、CloseHandle()等函数。
2.4 应用程序
基于USB-HID的I/O扩展卡应用程序采用C#、VB、C++等.NET Framework中的高级语言编写,负责完成系统的业务逻辑并调用驱动程序中的接口发送控制指令。
3 设计总结
本设计巧妙地将I/O操作和控制逻辑分离开来,既保留了单片机使用灵活的特点,又充分利用了通用计算机的强大性能,具有即插即用、易于扩展、电磁干扰小、性价比高、可靠性好等特点,可以广泛应用于课堂教学、电子制作、产品研发等领域,具有广阔的发展前景。
参考文献
[1] 覃冬华.基于Visual C#的USB接口通信程序设计[J].数字技术与应用,2010(8):90-91.
[2] 张寿春.基于USB主机的船舶航向数据实时记录系统[J].数字技术与应用,2012(2):62-63.
[3] 张俊,王小祥,许杰.简易家用USB温度测量器[J].数字技术与应用,2010(2):66-68.
收稿日期:2016-02-29
作者简介:李健(1995―)男,山东潍坊人,本科,研究方向:嵌入式。