当前位置:
文档之家› 再谈USB开发:LabVIEW调用DLL文件实现STM32+USB+HID双向通信
再谈USB开发:LabVIEW调用DLL文件实现STM32+USB+HID双向通信
4、结尾
到了这里,我们可以看到,LabVIEW 调用 DLL 文件是很简单的,关键是我们要知道 DLL 文件中的函数原型! 我们也可以比较一下通过 VISA 和通过 LabVIEW 调用 DLL 文件实现 USB HID 双向通 信的的优缺点。 1、通过 VISA,我们可以简单和快速地开发 STM32 USB HID 通信,不必了解底层函 数的原型,系统稳定可靠。但需要我们安装庞大的 VISA 驱动程序,而且硬件需要被 MAX 识别。 2、通过 LabVIEW 调用 DLL 文件,我们不需要安装任何驱动程序,发挥 USB HID 免 驱动的优点,但需要我们了解 DLL 文件中的函数原型,而且如果 DLL 文件做得不好的话, 有可能引起程序崩溃。 其 实 我 们 也 可 以 调 用 windows 系 统 自 带 的 hid.dll 文 件 的 , 一 般 在 以 下 路 径 : C:\WINDOWS\system32。现在的 USB HID 上位机软件,一般都是调用微软的 hid.dll 来实现 的。这个留给用户去完成了(不难的,只要知道函数原型就可以了) 。 其实 LabVIEW 作为一种通用的编程语言, 和 VC++一样, 也可以封装和创建 DLL 文件 的,有兴趣的用户可以了解一下,这里就不详细介绍了。
ห้องสมุดไป่ตู้
2、LabVIEW调用我们创建的DLL文件
LabVIEW 的“调用库函数节点”在以下路径: “互连接口”“库与可执行程序” “调用库函数节点”
我们把这个控件放在 VI 的程序框图中:
双击控件后,可以打开如下配置窗口:
“库名/路径”比较简单,就是 DLL 文件的路径了。而“线程” ,一般都是选择“在 UI 线程中运行” 。在“调用规范”中,因为是调用我们写的 DLL 文件,所以选择“C” 。如果 是调用 windows 系统中的 DLL 文件,那么选择“stdcall(WINAPI) ” 。 我们把 DLL 文件装进来之后, 就可以看到 DLL 文件中包含的所有函数了, 在 “函数名” 下拉列表中可以看到。
“回调”和“错误检查”选项的配置,一般默认就可以了:
我们退出“调用库函数”的配置之后,在 LabVIEW 的程序框图上,就多了输入和输出 接线头了,这样我们就可以给函数输入参数了,或者输出函数的执行结果:
3、LabVIEW调用windows系统的的DLL文件
我们知道,在 windows 系统中有大量的 DLL 文件,如果 LabVIEW 可以调用它,那么 将可以实现更多的、更强大的功能。 我们以一个实例来说明一下。我们调用“user32.dll”文件,实现 windows 弹出窗口的 显示:
再谈 USB 开发:LabVIEW 调用 DLL 文件实现 STM32 USB HID 双 向通信
王逸彬
wyb_4993@
在前面, 我们已经介绍过利用 NI 的 VISA 来实现 STM32 USB HID 双向通信。 借助 VISA 来实现 USB HID 通信,是比较稳定和可靠的,缺点就是需要安装庞大的 VISA 驱动程序, 而且我们的 STM32 硬件需要被 MAX 正常识别出来,如果不能识别,那么这种方法是行不 通的。 其实我们还有另外的方法,就是通过 LabVIEW 调用 DLL 文件,实现 STM32 USB HID 的双向通信。
需要注意的是:默认的 DLL 文件中的函数原型都是: “void Init(void );” ,这是不对的, 我们需要在“参数”中,给函数配置输入参数、输出参数以及返回类型。
我们最终的目的,就是要把函数原型,配置成 DLL 文件中的函数格式。所以,创建 DLL 文件的开发者需要提供函数原型,我们才能在 LabVIEW 中正确配置,否则我们将直 接失败!
请注意上图中的“函数原型” ,这是要根据微软公司提供的“FindWindowA”函数原型, 才能配置出来的。如果没有微软的函数原型,那么我们在“参数”中将无法配置! 其它函数的配置类似。最后的运行结果是:
这个弹出窗口是不是比 LabVIEW 自带的弹出窗口专业多了?也更符合用户的 windows 使用习惯。
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 文件。下面我们分这两种情况进行说明。