再谈USB开发:LabVIEW调用DLL文件实现STM32+USB+HID双向通信
- 格式:pdf
- 大小:224.81 KB
- 文档页数:8
图20 Parameters页面点击“OK”,将生成的CLN的输入段连接到DAQmx Read.vi,return type 输出连接到波形图表上,即可实现采集值放大10倍的功能。
图21 完成后的程序方法二LabVIEW中还有一种方法可以调用DLL文件,在VI的选项栏,依次选择Tools——Import——Shared Library(.dll),弹出Import Shared Library 对话框。
图22 生成Import Shared Library对话框选择Create VIs for a shared library,点击Next,在Shared Library (.dll) Files中输入Scale.dll文件的路径,Head(.h) File里填写头文件的路径。
图23 选择DLL文件路径和头文件路径点击Next,如果DLL文件中依赖其他的一些DLL文件,需要在Include Paths中填写这些文件的路径。
其他选项可以根据客户需求设置,一般默认即可。
这样一直点击Next到最后,选择Open the generated library,点击Finish。
这样可以生成一个.lvlib格式的库文件,里面包含了Scale.vi,这是将调用该DLL 文件的方法封装好的VI,只留下输入和输出接口,方便运用到LabVIEW的程序中。
直接将Scale.vi拖放到刚才的连续采集中即可完成方法一的功能。
图24 完成的程序VC调用LabVIEW生成的DLL文件刚才介绍了LabVIEW调用DLL文件的方法,使用VC调用LabVIEW生成的DLL 文件也很简单。
还是以之前生成Scale 的DLL文件为例,不同的是采集电压程序使用的是C语言的例程,但和LavVIEW实现的功能相同。
首先将先前生成Scale DLL文件时,路径下所有的文件全部复制粘帖到C语言例程的文件夹下。
打开连续采集程序,点击状态栏的Project——Settings,在Project Settings对话框中加载入Scale.lib的静态链接库。
基于LabVIEW的USB实时数据采集处理系统的实现基于LabVIEW的USB实时数据采集处理系统的实现摘要介绍了以图形化编程语言LabVIEW为应用程序开发平台的USB数据采集处理系统的设计,并给出了LabVIEW对外部动态链接库的调用方法以及USB驱动程序的设计方法。
关键词USB LabVIEW 数据采集通用串行总线USB(Universal Serial Bus)作为一种新型的数据通信接口在越来越广阔的领域得到应用。
而基于USB接口的数据采集卡与传统的PCI卡及ISA卡相比具有即插即用、热插拔、传输速度快、通用性强、易扩展和性价比高等优点。
USB的应用程序一般用Visual C++编写,较为复杂,花费的时间较长。
由美国国家仪器(VI)公司开发的LabVIEW语言是一种基于图形程序的编程语言,内含丰富的数据采集、数据信号分析分析以及控制等子程序,用户利用创建和调用子程序的方法编写程序,使创建的程序模块化,易于调试、理解和维护,而且程序编程简单、直观。
因此它特别适用于数据采集处理系统。
利用它编制USB应用程序,把LabVIEW语言和USB总线紧密结合起来的数据采集系统将集成两者的优点。
USB总线可以实现对外部数据实时高速的采集,把采集的数据传送到主机后再通过LabVIEW的功能模块顺利实现数据显示、分析和存储。
1 USB及其在数据采集设备中的应用USB自在Comdex上亮相以来,已广泛地为各PC厂家所支持。
现在生产的PC几乎都配置了USB接口,Micro soft的Windows98、NT以及Mac OS、Linux等流行操作系统都增加对USB的支持。
USB具有速度快、设备安装和配置容易、易于扩展、能够采用总线供电、使用灵活等主要优点,应用越来越广泛。
一个实用的USB数据采集系统硬件一般包括微控制器、USB通信接口以及根据系统需要添加的A/D转换器和EPROM、SRAM 等。
为了扩展其用途,还可以加上多路模拟开关和数字I/O端口。
烟台大学硕士学位论文基于USB接口的LabVIEW数据采集与传输系统的设计与实现姓名:刘昌伟申请学位级别:硕士专业:信号与信息处理指导教师:邵左文20090601摘要通用串行总线(USB)作为一种新的总线标准,由于具有接口简单、支持热插拔、传输速率高等优点在数据采集中得到了广泛应用。
本课题结合DSP和USB技术的优点设计了一种基于USB总线和数字信号处理器的多路数据采集系统,具有成本低、集成度高等优点。
采用德州仪器公司先进的高性能数字信号处理器TMS320F2812和赛普拉斯公司的USB 接口芯片,自行设计的多路信号调理模块等电路,实现了集AD转换、数据存储等功能于一体的数据采集与传输系统,可通过USB接口将数据实时传输至PC机或存储至U盘。
主要设计了DSP主控模块、程控信号调理模块、高速ADC模块、嵌入式USB主机接口模块、USB从机接口模块和4通道高速DAC模块,并基于这一硬件平台,通过LabVIEW编制应用程序,把LabVIEW软件和USB总线的优点紧密结合起来,最终实现了数据的采集、处理、显示及存储等功能。
关键词:数字信号处理,数据采集,通用串行总线,LabVIEWAbstractAs a kind of new bus standard, Universal Serial Bus (USB) has been widely applied in the field of the data acquisition because of its easy interface,high transmission rate,supporting hot plug and bining the advantages of the DSP and USB technology, this article designs a suit of the multi-channel data acquisition system based on the USB bus and digital signal processor, which has the advantages of the lower cost, higher integration and so on.Depending on the advanced high-performance digital signal processor of Texas Instruments corporation and USB interface chip of Cypress,this article develops a kind of data acquisition and transmission system which has the function of signal conditioning,analog to digital signal conversion,data storage and other functions.It has a variety of auxiliary circuit to meet the requirement of increasingly complex signal acquisition and processing and the real-time data can be transmitted to the PC or storaged in U disk through the USB interface. This article mainly designs DSP control module, programmable signal conditioning module, high-speed ADC module, embedded USB host interface module, USB slave interface module and 4-channel high-speed DAC module. basing on the hardware platformt, we finally carry out the function of data acquisition, processing, display, storage by using LabVIEW.Key Words:digital signal processing,data acquisition,USB,LabVIEW烟台大学学位论文原创性声明和使用授权说明原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。
1楼发表于昨天 12:07 |只看该作者|倒序浏览|打印本帖最后由 wyb4993 于 2011-7-15 09:36 编辑在前面,我们已经介绍过利用NI的VISA来实现USB HID双向通信。
借助VISA来实现USB HID通信,是比较稳定和可靠的,缺点就是需要安装庞大的VISA驱动程序,而且我们的STM32硬件需要被MAX正常识别出来,如果不能识别,那么这种方法是行不通的。
/bbs/forum.php?mod=viewthread&tid=27417其实我们还有另外的方法,就是通过LabVIEW调用DLL文件,实现USB HID的双向通信。
(说明:请不要向我索要LabVIEW源代码,开发千般辛苦,况且是公司的代码,我相信大家的水平都比我高,通过下面的入门介绍,相信大家可以做出来的。
)1、什么是DLL文件?动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。
动态链接库文件的扩展名一般是DLL,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。
按照我们的理解,DLL文件中有C语言(也可以是其它语言)写的函数,究竟有多少个函数,由DLL文件的创建者决定的。
DLL有助于促进模块式程序的开发。
因为它的封装性、***性好。
DLL文件也不一定由开发者创建的,其实windows系统中就提供了大量的DLL文件,例如windows编程所需的大量API函数存储在Kernal.DLL文件中。
LabVIEW不仅可以调用我们自己创建的的DLL文件,也可以调用windows系统中的DLL文件。
下面我们分这两种情况进行说明。
2、LabVIEW调用我们创建的DLL文件LabVIEW的“调用库函数节点”在以下路径:“互连接口”→“库与可执行程序”→“调用库函数节点”我们把这个控件放在VI的程序框图中:双击控件后,可以打开如下配置窗口:“库名/路径”比较简单,就是DLL文件的路径了。
利用动态链接库(DLL)实现LabVIEW与USB设备的数据通
信
陈国亮;张素君
【期刊名称】《福建电脑》
【年(卷),期】2005(000)007
【摘要】本文简要介绍了LabVIEW的特点及USB设备的功能;分析了在LabVIEW软件环境下如何调用DLL(Dynamic Link Library)子VI实现LabVIEW 与USB设备的通信;并利用VC++6.0编写所需要的DLL模块.
【总页数】2页(P149-150)
【作者】陈国亮;张素君
【作者单位】福建省超高压输变电局,福建,厦门,351100;福州大学电气工程与自动化学院,福建,福州,350002
【正文语种】中文
【中图分类】TP3
【相关文献】
1.在LabVIEW中利用动态链接库实现串口通信 [J], 田云
2.利用LabVIEW导入工具实现DLL调用 [J], 郑铭
3.基于LabVIEW NI-VISA实现PC与C8051F320的USB数据通信 [J], 段晋军;位恒曦;常晓明
4.机房运行监控系统中采用动态链接库(DLL)技术实现数据通信接口的方法 [J], 黄
晓兵
5.在LabVIEW中利用DLL实现数据采集 [J], 许剑;邹小芳;王建华
因版权原因,仅展示原文概要,查看原文内容请购买。
/a827415225/article/details/51745013移植STM32固件库用于HID双向通信USB的应用中HID类是比较常见的方式。
通过修改STM32 USB固件库V4.0的JOYSTICK 应用,我们实现一个双向USB通信。
一、移植使用STM32源程序为点亮LED灯程序。
首先将USB固件库中有用的函数复制到源函数中,建立LIB文件夹其中放入USB2.0协议函数建立CFG文件夹放入USB应用函数将两个文件夹都放到源工程目录下将文件添加进来,设置好,配置好KEIL软件设置。
二、修改文件1、首先修改platform_config.h函数。
该文件是对于多种芯片对于USB库的支持。
我们使用STM32F103ZET6芯片,所以只保留与之相关的ID项,与USB_DISCONNECT线(PG11)的配置。
修改之后的头文件如下所示2、然后修改hw_config.c中Set_System函数实际上STM32F103zet6不需要对USB端口进行单独的配置,删掉Set_System函数中没用的部分,只对USB_DISCONNECT线(PG11)进行初始化。
修改后的函数如下图所示。
3、接下来修改hw_config.c文件中USB_Cable_Config函数因为我使用的是比较老的神舟III开发板,当PG11为高电平时实现上拉,所以修改后的函数为4、修改USB_Interrupt_Config函数,配置USB_LP_CAN1_RX0_IRQn和USBWakeUp_IRQn中断修改后的函数如下图所示。
5、接下来删掉hw_config.c文件中GPIO_AINConfig函数,没有什么用,只会报错6、删掉与按键相关的设置,因为我们并没有用到,主要是先清除JoyState和Joystick_Send 函数中内容,不用管。
7、最后我们处理USB挂起相关的问题。
在USB固件库中提供挂起相关的处理函数,主要有2个函数需要修改。
利用LabVIEW导入工具实现DLL调用
郑铭
【期刊名称】《电子测试》
【年(卷),期】2009(000)006
【摘要】本文在介绍了动态链接库程序概念的基础上,以台湾泓格科技股份有限公司ISI-AD32、32通道隔离A/D数据采集卡为例,介绍了在LabVIEW 8.5开发环境下,通过利用LabVIEW开发环境中"导入"工具实现DLL调用方法.该方法克服了程序设计者通常在开发环境中通过CLF节点进行调用繁琐、各种不同类型的变量转换不正确时会造成不能控制的问题,及对类似的硬件提供的LabVIEW驱动版本太低或没有驱动,没有办法控制的问题同样可以解决.该方法简单实用,非常方便快捷,希望广大程序设计广为利用.
【总页数】4页(P33-35,39)
【作者】郑铭
【作者单位】91370部队,福建省福州市,350014
【正文语种】中文
【中图分类】TP312
【相关文献】
1.基于LabVIEW环境下调用DLL实现仪器控制 [J], 侯博;廖醒宇
2.嵌入式LabVIEW调用DLL实现数据采集 [J], 黄佳钰;邓焱;张锦杰
bVIEW平台下调用DLL实现PC/104数据采集 [J], 袁魏华;韩裕生;张伟伟;李
小明
4.基于调用DLL的LabVIEW数据采集的实现 [J], 张亿雄;顾海明
bVIEW 8.6报表工具包生成和调用DLL问题分析及对策 [J], 胡胜文;万加林因版权原因,仅展示原文概要,查看原文内容请购买。
收稿日期:2007-10-08作者简介:刘宇芳(1983-),女,江苏宿迁人,硕士生,研究方向为USB接口设计、虚拟仪器、PLC控制系统仿真技术。
文章编号:1671-7872(2008)02-0168-03Labview平台下基于DLL的USB通信技术应用刘宇芳,李秀娟(南京航空航天大学自动化学院,江苏南京210016)摘要:选用虚拟仪器开发平台Labview实现数据分析处理和操作界面设计,采用Windows下的动态链接库技术(DLL),在VisualC++中将USB通信程序模块封装成DLL供Labview调用,实现Labview与USB系统的实时通信。
阐述了Labview中调用DLL的关键技术及步骤。
关键词:Labview;动态链接库;USB;VisualC++中图分类号:TP319文献标识码:BApplicationofUSBCommunicationTechniqueinLabviewPlatformBasedonDLLLIUYu-fang,LIXiu-juan(SchoolofAutomation,NanjingUniversityofAeronauticsandAstronautics,Nanjing210016,China)Abstract:VirtualdevelopmentplatformLabviewwasusedtorealizedataprocessinganddesignoperatinginterface.Withthedynamiclinkinglibrary(DLL)technologyofwindows,theUSBcommunicationprogramwaswrittenintheformofDLLinVisualC++,whichwascalledbyLabviewtoimplementtherealtimecommunicationbetweenitandUSBsystem.thepivotaltechnologyandprocedureofcallingDLLisalsointroduced.Keywords:Labview;dynamic-linklibrary(DLL);USB;VisualC++Labview是NI公司开发的基于图形编程的虚拟仪器开发平台,内含丰富的数据采集、信号分析和控制等子程序,界面友好直观,在测量、测试以及工业控制领域已有广泛的应用[1]。
0 引言LabVIEW是一种基于图形程序的虚拟仪器编程语言,与传统仪器相比,虚拟仪器技术以计算机为平台,在程序界面中有用于模拟真实仪器面板的控件可供调用,可用于设置输入数值、观察输出值以及实现图表、文本等显示,因此具有友好的人机界面。
LabVIEW具有强大的数据采集、分析、处理、显示和存储功能。
在测试与测量、数据采集、仪器控制、数字信号分析、工厂自动化等领域获得了广泛的应用,显示出其强劲的生命力。
LabVIEW平台下开发的虚拟仪器在相同硬件条件下,改变软件即可实现不同的仪器功能,真正实现了“软件即仪器”的设计理念。
实现LabVIEW对数据的采集和处理,传统的方法是采用数据采集卡,但是这些数据采集卡设备存在安装不便,价格昂贵,受计算机插槽数量、地址、中断资源的限制,可扩展性差等缺点。
在LabVIEW平台下使用USB总线进行数据传输,由于USB接口总线具有即插即用,接口简单,传送速率高等特点,因此基于Lab-VIEW和USB接口的虚拟仪器具有灵活、可靠、经济等特点。
鉴于以上LabVIEW和USB接口仪器的优点,实现LabVIEW下USB接口的接口程序就显得尤为重要。
在此,介绍了一种基于LabVIEW与USB的虚拟仪器接口设计的方法。
1 设计方案由于各类基于USB总线的数据采集、控制的虚拟仪器都涉及到LabVIEW与USB接口程序的设计,为了不失一般性,这里以虚拟示波器为例,介绍该接口程序的设计方法。
1.1 硬件设计方案该系统是虚拟示波器,主要工作是采集被测模拟信号,并将信号通过USB2.o 接口传输到PC104计算机,运行计算机LabVIEW平台下的应用软件完成数据的处理与记录,并在显示器上绘制曲线。
该系统主要由模拟信号采集模块、FPGA控制模块、USB传输模块和计算机组成,其系统结构框图如图1所示。
1.1.1 FPGA控制模块该设计采用Alter公司的Cyclone系列现场可编程门阵列(Field Programmable Gate Array,FPGA),芯片EP1c3T144来实现高速数据控制及传输。
【转】labview dll的调用【转载】武汉高收入高福利公司排行榜在LabVIEW中调用DLL的整个过程及注意事项2011-09-15 21:25:44| 分类:驱动开发| 标签:|字号大中小订阅1. LabVIEW支持的数据类型< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />另外,可参考…\Program Files\National Instruments\LabVIEW 2009\examples\dll\data passing\Call Native Code.llb\Call DLL.vi。
…此VI列举了LabVIEW与C语言中兼容的数据类型。
见下表。
2. 在VI里调用DLL时,在DLL的左侧给输出端口添加初始化的值。
给输出端口添加初始化值的目的是分配内存给输出端口。
该初始化数组元素的个数至少为实际输出数组的个数。
若过小,则DLL不正常运行;若相等,则DLL正常运行;若过大,则DLL的数组输出端口除有效数据外,还有其他一些为0的非有效数据。
< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />3.使用DLL的步骤1)制作子VI,添加控件接口到连接端(connector)。
2)在新建的VI中添加DLL,在DLL中指定其路径,会自动添加该DLL包含的输入输出端口。
对于数值型输出,选择Point to value。
选中“Specify path or diagram”,表示动态调用该DLL,此时路径取决于最上端的路径输入端,Library name or path里输入的路径无效。
在parameters页,系统会自动添加DLL的输入输出端口,如果添加不完整,则需要再手动添加额外的输入端或者输出端。
LABVIEW的DLL与API调用LABVIEW的DLL与API调用一.实验目的1.熟悉LabVIEW调用动态链接库的过程2.学会编写用LabVIEW调用WINDOWS的API函数二.实验器材1.计算机(带有声卡)2.LABVIEW8.20软件三.实验原理在开发自动测量系统时,经常遇到计算机与仪器的通信问题,涉及仪器控制及数据处理问题,LabVIEW语言在这一领域的应用有着独到的优势。
为了在LabVIEW中能够充分利用其他编程语言的优势,LabVIEW提供了外部程序接口能力,包括动态链接库(DLL)、C语言接口(CIN)、ActiveX和Matlab等。
动态链接库是基于Windows程序设计的一个非常重要的组成部分。
LabVIEW 开发中使用DLL,可以使代码更简洁,内存资源的使用更经济,而且可以便捷地利用仪器厂商或第三方提供的仪器控制子程序加速开发进程。
而windows平台包含有大量的API函数,这些API函数提供了大量在Windows环境下可操作的功能,它们位于Windows系统目录下的多个DLL文件中,因此在LabView中调用API 函数和DLL的方法是一致的。
在LabVIEW中,利用库函数节点可以较容易地实现对DLL的调用,从而提高了程序的开发效率。
使用调用库函数节点,可以调用Windows标准的动态连接库,也可以调用用户自己编制的DLL。
LabView中动态链接库的调用可在程序框图的函数选板中选取“调用库函数节点”来完成,该节点位于:互连接口->库和可执行程序->调用库函数节点。
将选择好的调用库函数节点图标放在程序框图中,然后通过对它的节点图标进行配置,可以指定DLL模块中与LabVIEW数据交换的相应的驱动函数。
在调用DLL时,首先要找到找到头文件(*.h)或者函数原型声明,确定你需要调用的函数,注意函数的参数是否包含了原始数据类型参数比如int,char, double,等等或者是否包含了复杂数据类型比如clusters。
动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库。
在LabVIEW中,一维数组、二维数组、字符串是可以和C/C++中的相应数据类型直接对应起来,因此比较容易实现。
那么对于C/C++语言中的结构体,大家也会想到可以和LabVIEW中的簇对应起来,但是在具体的应用中还会涉及到一些细节,需要我们去留意,否则很可能调用不成功,甚至由于非法读写内存导致系统崩溃。
另外,在LabVIEW中的返回值只有数值、字符串和指针,因此当DLL中的函数返回值为结构体时该如何处理?当输入参数包含指向函数的指针时该如何处理?在解决这些问题之前,先推荐四篇文档,有长有短,但是都写得很细致:1)如何通过调用库函数结点使用DLL——Configuring the Call Library Function Node to call a Simple DLL 链接:https:///content/docs/DOC-90692)如果是简单的数据类型(如数值、数组、字符串、简单结构体),在LabVIEW和DLL之间传递或接收指针,LabVIEW能够自动的正确的解析指针——Passing and ReceivingPointers with C/C++ DLLs from LabVIEW 链接:https:///content/docs/DOC-90803)因为LabVIEW隐藏了对内存的管理,没有开放的函数提供对具体内存地址的直接访问,所以当C/C++中返回的是一个指针,并且LabVIEW又不能自动解析这个指针时,该怎么办——Dereferencing Pointers from C/C++ DLLs in LabVIEW 链接:https:///content/docs/DOC-90914)介绍导入共享库工具(Import Shared Library Wizard),当我们拿到一个DLL和它的头文件(.h)时,利用该工具,能够自动生成针对DLL每个函数的子VI,最大的好处是不需要再手动设置输入输出参数并进行类型匹配,当然它有一定的局限性,比如复杂的类型它匹配不了——Creating Wrapper VIs for C/C++ DLL functions using the Import Shared Library Wizard 链接:https:///content/docs/DOC-90785)大家也可以通过这篇文档直入主题,因为它写得很全,包含详细的VI和C/C++源代码,并且有一个目录供大家索引,它回答了以下情况的问题:1)数值型2)一维数组 3)字符串4)二维数组 5)简单结构体 6)复杂结构体。
基于LabVIEW的USB数据采集系统的设计与实现的开题报告一、研究背景USB(通用串行总线)作为计算机领域中数据传输的重要接口标准,已经得到了广泛的应用和普及。
现如今,随着科学技术的不断发展,数据采集系统在不同的领域中都扮演着重要的角色,尤其是在实时控制和监测方面更是人们关注的重点。
因此,开发一种基于USB接口的数据采集系统将具有重要的研究意义和广泛的应用前景。
LabVIEW(Laboratory Virtual Instrument Engineering Workbench)作为美国国家仪器公司(National Instruments)开发的一款用于图形化编程和控制系统设计的软件,其以易用、快捷、高效的特点在数据采集、自动化测试等领域得到了广泛的应用。
结合USB接口和LabVIEW软件的特点与优势,基于LabVIEW的USB数据采集系统的设计与开发将变得更加方便快捷、稳定可靠。
二、研究内容本论文旨在基于LabVIEW的USB数据采集系统的设计与实现,主要涉及以下研究内容:B接口及其通信协议的原理和应用。
bVIEW软件开发环境的基本特点、图形化编程思想及其应用。
3.设计并实现基于LabVIEW的USB数据采集系统,包括软件的架构设计、硬件模块的选型与接口设计、数据采集模块的实现等。
4.对系统进行功能测试与性能评测,以及分析其优缺点和应用前景。
三、研究意义本论文所研究的基于LabVIEW的USB数据采集系统不仅具有一定的理论研究价值,也具有实用性和推广性:1.实用性:可应用于实时控制、数据采集、自动化测试等多个领域,解决实时数据采集与处理的难点问题,并极大提高了数据采集和控制的稳定性和准确性。
2.推广性:本研究结果对USB接口应用和LabVIEW软件开发具有一定启示作用,可为以后更多控制系统的设计提供借鉴和参考。
同时,由于LabVIEW软件的应用范围较广,也可为其它数据采集与控制系统的开发提供基础和支持。
完成stm32上HID的应用这个是公司的项目,以前基于usb 的虚拟串口来做上下位机通信,由于usb 平时也就刷参数和调试之用,也不很常用,外面反应usb 有时会连不上stm32 控制器,心里一直认为不是大问题,后来反应的多了,就重视这个事情了,虽然usb 平时不用,但是用的时候只要出现异常掉线,就再也连不上去了,特别影响用户对我们产品的信心。
在网上找了很多资料,到现在也只能隐约确定是stm32 官方的虚拟串口库有问题,我发现不同的电源板都会影响到usb 虚拟串口的枚举,于是下定决心使用其他方式来做上下位机的连接,排除了usb虚拟串口,眼前的选择只有两个1)usblib,这个是针对usb 的上位机库,可以玩很多的花样,但是需要开发者稍稍熟悉usb 协议,而且这个需要在上位机上安装usb 驱动程序。
2)hid 设备,这个是windows 自身支持的usb 设备,只支持中断传输,最大的速率也就64Kb/s,上位机采用windows api 编程我估算了一下,hid 方式满足我的要求,而且是免驱动,又不用学习usblib,所以就使用hid 方式实现了usb 通信。
hid 几个注意事项:1)对于windows API 来说,读和写hid 设备的数据包都是大小确定了,也就是说如果stm32 端口设备的hid 属性是64 的话,那么读写都是64 字节的。
读写的最大帧是64 字节,我在代码中是基于64 字节做应用层协议的。
2)hid 写速度不能太快,所以我一般在写前会等待2ms 左右,确保不会写出错。
确认是是HIDAPI 的代码问题,我对写函数修改如下,结果就好了,可以一直写无需等待int HID_API_EXPORT HID_API_CALL hid_write(hid_device *dev, const unsigned char *data, size_t length){DWORD bytes_written;BOOL res;BOOL bResult;OVERLAPPED ol;HANDLE ReportEvent;ReportEvent = CreateEvent(NULL, TRUE, FALSE, NULL);ResetEvent(ReportEvent);memset(&ol, 0, sizeof(ol));ol.hEvent =。