[good]基于labview的USB调试小助手

    xiaoxiao2021-03-25  13

    基于labview的USB调试小助手

    #原文地址:http://blog.csdn.net/a827415225/article/details/51745789 上一篇博文介绍了STM32的USBHID的双向通信。这篇博文说一下为了查看首发数据编写的基于labview的USB调试小助手(极其简单)

    一、前期准备

        首先介绍一下USB设备(STM32 USB),设备通过一个接口2个端点与主机通信,两个端点分别为端点1输入和端点1输出。两个端点均为中断端点。

        好,下面来正式介绍一下基于labview的USB调试小助手。

        USB口的HID类能轻易的被windows系统识别,因为它内置了USB HID驱动。但是这个驱动是不被labview承认的。要想被labview承认,需要安装VISA生成的USB驱动。(个人感觉这个是labview比较不好的地方)具体的操作方法是:

    打开NI-VISA driver wizard

    选择USB,点NEXT

        因为我的USB设备一直在电脑上插着,所以VISA安装向导识别了它,我们直接选中这个设备。这个时候你会发现,都自动填装好了,不用我们自己再填写。 包括Vendor ID、Product ID、Descriptor Information(可以查看各种描述符),Model Name(设备管理器要显示的名字)我们点击NEXT,进行下一步(点完后可能会跳出小窗口,我们一路点Yes,通过)

    下一步是Output Files Generation,我们可以不做任何修改直接next

    最后一步是Installation Option,我们选第一项安装,然后点Finish。

        然后系统就开始安装驱动啦。我遇到的情况是安装完成,它弹出一个小窗口说安装不成功,我们不用管它直接close就好。然后这个时候我们再去设备管理器中看,已经产生可以被labview识别的驱动了。

        那么如何查看我们的USB能被labview识别了呢。我们打开NI-MAX,在设备和接口处如果能看到我们的USB设备,说明已经被识别了。(我一般是看0x0413::0x5724来识别我的USB口,因为这两个参数是我自己设的。。)

    我们选打开VISA测试面板,可以看到一些USB状态,这也证明USB设备的一些信息,继续往下走。

    上面我们已经验证了NI可以识别USB口,我们开始编写小助手程序吧.

    二、程序编写

    新建VI文件。

        因为使用VISA通信,所以我们想到的肯定是去VISA里找驱动。先把几个常用的拖出来。(它们的都在仪器I/O—>VISA里,具体哪个在什么位置我就不说了)VISA打开、VISA写入、VISA读取、VISA关闭。于是我们连接了这样的结构

    结果,我打开VISA资源口发现是COM4,懵逼了呀,上面才说的USB口识别了呀。

        研究一番(实际上是忘记了从哪里查的了)问题出在VISA资源名称,这个控件上,我们需要设备它识别的VISA类为USB。具体设置方式是在控件上右键—>选择VISA—>I/O session-->USB Raw

    Ok设置完成我们就能找到USB设备啦!我们运行一下看看效果,结果出来这个鬼东西。

        上网查了一下,网上有大神已经针对这个问题给出了解决办法: http://bbs.elecfans.com/jishu_515959_1_1.html     我大概说一下大概就是,就是HID类只支持仅支持控制传输和中断传输。需要主机发送命令后,USB设备返回信息,这样才能完成读取。所以我们需要使用中断方式进行数据读取。按照上面给出的解决办法(非常详细)我们做出修改。于是程序又变成了这个样子。

        然后再运行程序,完成啦.配合上一博文写的USBHID通讯的历程,我们通过上位机把字符5通过主机发给设备,然后设备,把收到的字符发给主机,我们也确实读到了字符5!!!到此简单的USB通讯已经可以了但是,我们是要做通讯小助手的人呀,不能就此止步呀。     我们继续往下修改,上面的网址中文章提到过”要注意必须在visa写入之后才可以读取usb中断返回的数据。不写入或是写入的数据错误导致无返回值,就会产生超时错误 VISA:  (Hex 0xBFFF0015) 完成操作前超时已过期。”     经过实测,确实是这样样子。于是我们通过一个条件结构来解决,当需要发送数据时,点发送按键,条件为真,labview将发送写入缓冲区的数据,当不需要发送时,条件为假,系统送0字节

                  

    我们点击运行看一下效果。结果系统又报错了。

        说系统完成操作前超时,问题出在VISA等待事件,这是为什么呢?原来我们设置启用中断传输时间,结果这个中断传输一直没发生,没有数据通过中断传输读取过来。所以系统报错了。但是仔细想想,USB设备想发数据就发数据,没有要发送的数据,你偏要它发点有效数据,也是无理的要求呀(USB设备内心:你自己报错,怪我咯)怎么办呢?既然我们理解了超时的原因,他对于我们USB通信也无大碍,那我们就忽略它好了!具体的操作方式是:

        获取错报代码(0xbfff0015)然后当发现是超时报错时我们不处理它,不用弹出报错窗口

             

    所以后来程序又变成了这样

    这个时候程序已经可以正常运行了,主体部分完成,下面再介绍几个细枝末节的部分 1、 使用移位寄存器实现读取缓冲区的的不覆盖显示。 2、 使用条件结构控制USB口的打开与关闭 3、 调用发送缓冲区与接收缓冲区的显示样式的属性节点控制属性 最后的最后程序是这样的

    前面板是这样的

    至此USB通信小助手完成! 参考文献: http://bbs.elecfans.com/jishu_515959_1_1.html http://bbs.elecfans.com/forum.PHP?mod=viewthread&tid=454527

    转载请注明原文地址: https://ju.6miu.com/read-200173.html

    最新回复(0)