本帖最后由 wyb4993 于 2011-7-15 11:50 编辑
在前面,我们已经介绍过利用NI的VISA来实现STM32 USB HID双向通信。借助VISA来实现USB HID通信,简单易用,是比较稳定和可靠的,缺点就是需要安装庞大的VISA驱动程序,而且我们的STM32硬件必须被MAX正常识别出来,如果不能识别,那么这种方法是行不通的。
https://bbs.21ic.com/viewthread.php?tid=244490&highlight=
其实我们还有另外的方法,就是通过LabVIEW调用DLL文件,实现STM32 USB HID的双向通信。
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文件的路径了。而“线程”,一般都是选择“在UI线程中运行”。在“调用规范”中,因为是调用我们写的DLL文件,所以选择“C”。如果是调用windows系统中的DLL文件,那么选择“stdcall(WINAPI)”。
我们把DLL文件装进来之后,就可以看到DLL文件中包含的所有函数了,在“函数名”下拉列表中可以看到。
需要注意的是:默认的DLL文件中的函数原型都是:“void
Init(void );”,这是不对的,我们需要在“参数”中,给函数配置输入参数、输出参数以及返回类型。
我们最终的目的,就是要把函数原型,配置成DLL文件中的函数定义格式。所以,创建DLL文件的开发者需要提供函数原型,我们才能在LabVIEW中正确配置,否则我们将直接失败!
“回调”和“错误检查”选项的配置,一般默认就可以了:
我们退出“调用库函数”的配置之后,在LabVIEW的程序框图上,就多了输入和输出接线头了,这样我们就可以给函数输入参数了,或者输出函数的执行结果:
3、LabVIEW调用windows系统的的DLL文件
我们知道,在windows系统中有大量的DLL文件,如果LabVIEW可以调用它,那么将可以实现更多的、更强大的功能。
我们以一个实例来说明一下。我们调用“user32.dll”文件,实现windows弹出窗口的显示:
请注意上图中的“函数原型”,这是要根据微软公司提供的“FindWindowA”函数原型,才能配置出来的。如果没有微软的函数原型,那么我们在“参数”中将无法配置!
其它函数的配置类似。最后的运行结果是:
这个弹出窗口是不是比LabVIEW自带的弹出窗口专业多了?也更符合用户的windows使用习惯。
4、结尾
到了这里,我们可以看到,LabVIEW调用DLL文件是很简单的,关键是我们要知道DLL文件中的函数原型!(不需要了解具体源代码。)
我们也可以比较一下,通过VISA和通过LabVIEW调用DLL文件,实现STM32 USB HID双向通信的的优缺点。
1、通过VISA,我们可以简单和快速地开发STM32 USB HID通信,不必了解底层函数的函数原型,系统稳定可靠。但需要我们安装庞大的VISA驱动程序,而且STM32硬件必须被MAX识别。
2、通过LabVIEW调用DLL文件,我们不需要安装任何驱动程序,发挥USB HID免驱动的优点,但我们需要了解DLL文件中的函数原型,而且如果DLL文件做得不好的话,有可能引起程序崩溃。
其实我们也可以调用windows系统自带的hid.dll文件的,一般在以下路径:C:\WINDOWS\system32。现在的USB HID上位机软件,一般都是调用这个微软的这个hid.dll来实现的。这个留给用户去完成了(不难的,只要知道函数原型就可以了)。
其实LabVIEW作为一种通用的编程语言,和VC++一样,也可以封装和创建DLL文件的,有兴趣的用户可以了解一下,这里就不详细介绍了。
为了方便阅读,我把上文整理成PDF文档了:
再谈USB开发:LabVIEW调用DLL文件实现STM32 USB HID双向通信.pdf
(224.81 KB)
(说明:请不要向我索要LabVIEW源代码,开发千般辛苦,而且是公司的代码,我相信大家的水平都比我高,通过上面的入门介绍,相信大家可以做出来的。)
|