OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4637|回复: 15

STM32F4USB的上位机开发

[复制链接]

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
发表于 2018-11-15 12:30:46 | 显示全部楼层 |阅读模式
50金钱
本帖最后由 海文 于 2018-11-15 12:40 编辑

有没有大佬用过LibUsbDotNet这个开源库搞上位机的吗?我用STM32F4枚举成HID设备作为下位机,使用USB2.0全速,端点设置正确,但是在单片机不断发送数据到上位机的时候,一开始上位机可以接收到单片机的数据,运行几分钟后就接收不到数据了,此时单片机的USB状态是suspend,希望各位大佬可以给点意见,谢谢!下面这幅图是这个开源库测试USB设备信息的程序运行结果:
1.png (27.59 KB, 下载次数: 0)


上位机中关于USB的就只有下面这些了,
        private void Form1_Load(object sender, EventArgs e)
        {
  
            MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder);

            // If the device is open and ready
            if (MyUsbDevice == null)
            {
                // The device is not connected or cannot be accessed by libusbdotnet
                messagebox.Text = "Device not connected!" + "\r\n";
                return;
            }
            else messagebox.Text = messagebox.Text + "\r\n" + "Device connected!" + "\r\n";

            //开启接收数据响应
            IUsbDevice wholeUsbDevice = MyUsbDevice as IUsbDevice;
            if (!ReferenceEquals(wholeUsbDevice, null))
            {
                // Select config #1
                wholeUsbDevice.SetConfiguration(1);
                // Claim interface #0.
                wholeUsbDevice.ClaimInterface(0);
            }

            // open read endpoint 1.
            reader = MyUsbDevice.OpenEndpointReader(ReadEndpointID.Ep01);
            writer = MyUsbDevice.OpenEndpointWriter(WriteEndpointID.Ep01);

            reader.DataReceived += (OnRxEndPointData);
            reader.DataReceivedEnabled = true;


        }

        static void USB_SendCmd(byte[] buffer, int count)
        {
            ErrorCode ec = ErrorCode.None;

            try
            {

                // open write endpoint 1.
               
                ec = writer.Write(buffer, 2000, out count);
                if (ec != ErrorCode.None) throw new Exception(UsbDevice.LastErrorString);

            }

            catch (Exception ex)
            {
                Console.WriteLine();
                Console.WriteLine((ec != ErrorCode.None ? ec + ":" : String.Empty) + ex.Message);
            }
        }

        long cnt = 0;
        private  void OnRxEndPointData(object sender, EndpointDataEventArgs e)
        {
            Encoding.Default.GetString(e.Buffer, 0, e.Count);
            cnt++;
            //bytesRead = e.Count;
            if (e.Buffer[0] != 0)
            {
                for (int i = 0; i < e.Count; i++)
                {
                    //messagebox.Text = messagebox.Text + " " + readBuffer;
                    RecBuffer【i】 = e.Buffer
【i】;
                    e.Buffer【i】= 0;
                }
                RecFlag = true;
            }

        }

尝试过使用USB Hound抓包但是没有显示,不知道原因。



USB.rar

3.54 MB, 下载次数: 77

上位机

USB标准库配合USB HID.rar

10.26 MB, 下载次数: 164

单片机程序

最佳答案

查看完整内容[请看2#楼]

看您在这边一直等别人给您答案很久了, 看起来应该是没有人可以帮您了. 我觉得问题很明显在于您的上位机, 而且感觉那个libusb有bug的机会很大. 我随便找到其他用c#和USB HID通讯的分享, 我觉得可以拿来试试看: http://www.voidcn.com/article/p-srdwguha-yy.html https://soldernerd.com/2017/02/14/c-usb-hid-utility/ 如果不行可以自己多找别的, 总比在这里等着好... 我自己写过的USB HID上位机, 是C的, 用法和第一个差 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

259

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2317
金钱
2317
注册时间
2016-12-2
在线时间
354 小时
发表于 2018-11-15 12:30:47 | 显示全部楼层
看您在这边一直等别人给您答案很久了, 看起来应该是没有人可以帮您了.
我觉得问题很明显在于您的上位机, 而且感觉那个libusb有bug的机会很大.

我随便找到其他用c#和USB HID通讯的分享, 我觉得可以拿来试试看:
http://www.voidcn.com/article/p-srdwguha-yy.html
https://soldernerd.com/2017/02/14/c-usb-hid-utility/
如果不行可以自己多找别的, 总比在这里等着好...

我自己写过的USB HID上位机, 是C的, 用法和第一个差不多, 只是我没有长时间压力测试过就是了, 实在是帮不上忙.
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-15 13:39:50 | 显示全部楼层
谢谢分享
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-11-15 13:47:01 | 显示全部楼层

额,我还没调好啊
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-15 13:48:39 | 显示全部楼层
海文 发表于 2018-11-15 13:47
额,我还没调好啊

类似于串口助手这样?
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-11-15 13:50:15 | 显示全部楼层
秋天 发表于 2018-11-15 13:48
类似于串口助手这样?

调好了,效果差不多吧,我现在在调试长时间运行接收不到数据的问题。
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-15 13:54:40 | 显示全部楼层
海文 发表于 2018-11-15 13:50
调好了,效果差不多吧,我现在在调试长时间运行接收不到数据的问题。

分享出来啊
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-11-15 13:56:25 | 显示全部楼层
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-11-15 14:04:12 | 显示全部楼层

啊?我不是把我写的上位机代码和单片机都放上去了吗?
回复

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-11-15 14:06:58 | 显示全部楼层
海文 发表于 2018-11-15 14:04
啊?我不是把我写的上位机代码和单片机都放上去了吗?

Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-11-15 16:31:07 | 显示全部楼层
手动置顶,给个其他C#的上位机工程也行啊
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-11-15 22:31:45 | 显示全部楼层
请求各位大佬原谅,打扰了
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-11-16 22:53:59 | 显示全部楼层
GG了,很尴尬啊
回复

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6505
金钱
6505
注册时间
2018-6-27
在线时间
549 小时
发表于 2018-11-17 11:42:16 | 显示全部楼层
学习学习,学习学习。
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-11-17 15:20:50 | 显示全部楼层
sammy902583 发表于 2018-11-17 15:16
看您在这边一直等别人给您答案很久了, 看起来应该是没有人可以帮您了.
我觉得问题很明显在于您的上位机,  ...

好的,我先看一下,谢谢你了
回复

使用道具 举报

9

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
337
金钱
337
注册时间
2016-4-15
在线时间
126 小时
 楼主| 发表于 2018-12-12 11:31:59 | 显示全部楼层
应该是这个开源库有点问题,目前解决方案:
        [DllImport("kernel32.dll", SetLastError = true)]
        private static extern int CreateFile(
            string lpFileName,                            // file name
            uint dwDesiredAccess,                        // access mode
            uint dwShareMode,                            // share mode
            uint lpSecurityAttributes,                    // SD
            uint dwCreationDisposition,                    // how to create
            uint dwFlagsAndAttributes,                    // file attributes
            uint hTemplateFile                            // handle to template file
            );
在使用这个库的打开设备函数前面,调用上面这个函数就可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 04:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表