打印

再谈USB开发:LabVIEW调用DLL文件实现STM32 USB HID双向通信

[复制链接]
8917|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wyb4993|  楼主 | 2011-7-15 08:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wyb4993 于 2011-7-15 11:50 编辑

    在前面,我们已经介绍过利用NIVISA来实现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文件,那么选择“stdcallWINAPI)”。

    我们把DLL文件装进来之后,就可以看到DLL文件中包含的所有函数了,在“函数名”下拉列表中可以看到。



    需要注意的是:默认的DLL文件中的函数原型都是:“void
Init(void );
”,这是不对的,我们需要在“参数”中,给函数配置输入参数、输出参数以及返回类型。


    我们最终的目的,就是要把函数原型,配置成DLL文件中的函数定义格式。所以,创建DLL文件的开发者需要提供函数原型,我们才能在LabVIEW中正确配置,否则我们将直接失败!

   “回调”和“错误检查”选项的配置,一般默认就可以了:




    我们退出“调用库函数”的配置之后,在LabVIEW的程序框图上,就多了输入和输出接线头了,这样我们就可以给函数输入参数了,或者输出函数的执行结果:

3LabVIEW调用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源代码,开发千般辛苦,而且是公司的代码,我相信大家的水平都比我高,通过上面的入门介绍,相信大家可以做出来的。)

评分
参与人数 1威望 +1 收起 理由
dong_abc + 1
沙发
香水城| | 2011-7-15 09:49 | 只看该作者
发棉裤,保持LZ的开发热度,:lol

使用特权

评论回复
板凳
wyb4993|  楼主 | 2011-7-15 11:47 | 只看该作者
本帖最后由 wyb4993 于 2011-7-15 14:10 编辑

谢谢香主!:lol
对于USB开发,对于DLL文件,我其实是刚入门的。一直以为很复杂,现在看来也很简单了。
感谢ST公司提供了STM32 USB开发库,和LabVIEW软件联合起来,使得开发效率大大提高。

使用特权

评论回复
地板
sinadz| | 2011-7-15 11:48 | 只看该作者
讲解的很详细,应该发棉裤鼓励:lol

使用特权

评论回复
5
xqf2525| | 2012-8-25 20:14 | 只看该作者
HID.dll的函数原型在那可以查看到?
谢谢!

使用特权

评论回复
6
xqf2525| | 2012-8-25 20:15 | 只看该作者
HID.dll的函数原型在那可以查看到?
谢谢!

使用特权

评论回复
7
dfsa| | 2012-8-26 15:30 | 只看该作者
最近正在熟悉LabVIEW,感觉还是非常强大的

使用特权

评论回复
8
无冕之王| | 2012-8-26 15:35 | 只看该作者
很好的资料,鼓励共享

使用特权

评论回复
9
wyb4993|  楼主 | 2012-8-27 20:26 | 只看该作者
HID.dll的函数原型在那可以查看到?
谢谢!
xqf2525 发表于 2012-8-25 20:14

其实,很多时候USB HID通信的DLL文件是自己做的,可以用VC++做,然后在LabVIEW中调用就可以了。

使用特权

评论回复
10
zhrong| | 2014-6-13 16:32 | 只看该作者
谢谢

使用特权

评论回复
11
Aeman| | 2014-6-16 19:11 | 只看该作者
学习了!

使用特权

评论回复
12
tianli1980| | 2014-7-12 15:54 | 只看该作者
通过NI-VISA来实现USB HID双向通信?这个不错,和串和通迅一样,支持!

使用特权

评论回复
13
STM32初学者| | 2014-8-30 09:55 | 只看该作者
顶起,这个真心有用

使用特权

评论回复
14
小浣熊| | 2014-8-30 15:13 | 只看该作者
讲的很详细啊,,受教了!!

使用特权

评论回复
15
djk0125| | 2016-11-13 17:31 | 只看该作者
这应该是高版本的LABVIEW吧!低点的8.x不可以吧!!!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:传感器、自动化测试系统、LabVIEW软件开发,www.blkeji.com

12

主题

67

帖子

5

粉丝