找回密码
 立即注册
查看: 14177|回复: 50

USB-HID & 拔插自动恢复通信 & 自动升级 & C#2022 & HidLibrary库-----完全开源

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-4-7 01:52:56 | 显示全部楼层 |阅读模式
USB-HID & 拔插自动恢复通信 & 自动升级 & C#2022 & HidLibrary库-----完全开源

终于自己搞定了.非常完美,全部开源,大家可随意修改使用!!
/************************************************************************************************
基于STC8H8K64U芯片.用官方的usb库,进行一些修改,目前功能如下:
VID PID 定义:
private const int CJX_VID = 0x34BF;
private const int CJX_PID = 0xFF02;
************************************************************************************************/
1. 支持hid升级,main.c中可以自行修改升级口令,默认:"@ofetcnc",下载一次后,勾选STC-HID升级,并设置VID,PID即可(点一次就可以升级,不用点第二次)
2. 上位机用c# + HidLibrary 库,和单片机交互非常方便.
   1) USB拔插自动恢复通信
   2) 三个按钮,每个点击后,对应单片机内部三个变量执行加一操作.对应发送指令为: " ofet-cmd1" " ofet-cmd3" " ofet-cmd3"
   3) 实时通信线程(ThreadOFET_CheckStatus),周期发送 " ofet-check",单片机收到这个信号,发送数据到上位机

    (发送到HID设备的数据,第一个字节默认为 0x00,所以命令第一个字符都是空格,然后发送前修改为 0x00)

3. 压缩包说明:
   !vs2022_Demo      vs2022工程
   app                      用户代码
   usb                       官方库

第一次用C#,好多特性不会用,目前运行倒是没有啥问题,如果有问题,大家可以发出来共同探讨.

最后再总结一下:     STC单片机确实好用.

补充:
增加了一个变量,按钮按下发送命令的同时,把变量+1, 然后把变量值显示在按钮上,
每次点击按钮时,实时通信的线程并没有停止,
按钮点击后,我按住回车不松手,,本地变量值和单片机收到命令次数是一致的,相当于一帧数据都没丢.
这个对于实时通信来说,太方便了,啥也不用考虑了.
真不知道单片机内部怎么处理的.居然一帧数据都没有丢失.
C#也是,线程里和主程序都同时使用了HID资源,也没有丢帧..真是省事啊.

!STC8H_HID_模版.zip (324.22 KB, 下载次数: 218)





4 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-4-7 10:55:27 | 显示全部楼层
xiangz*** 发表于 2024-4-7 10:08
嗯,这个没关系,看看论坛里有没有大神做这方面的.

这里有VC++版本的
USB-HID 上位机操作源码,仅供参考:

https://www.stcaimcu.com/forum.p ... ptid=4838&pid=70564


截图202404092101448959.jpg




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-4-8 20:39:54 | 显示全部楼层
lg*** 发表于 2024-4-8 20:31
祝贺你成功!公开的源码在哪里?请问C#的HidLibrary库是VS自带的还是其它第三方开发的? ...
附件里啊.全都在,keil工程,vs工程,HidLibrary是第三方的.
通过NuGet添加,我的工程里面有,不知道能不能自动加载,
我第一次用C#,好多搞不清.

第一步

第一步

第二步

第二步


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-12-27 15:57:04

26

主题

166

回帖

1221

积分

金牌会员

积分
1221
发表于 2024-4-7 08:44:18 | 显示全部楼层
官方有个例程,具体在哪下载的忘了,找找
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-4-7 09:45:59 | 显示全部楼层
aho*** 发表于 2024-4-7 08:44
官方有个例程,具体在哪下载的忘了,找找

我好像也看到过,一个pdf文件里,说VC6怎么操作,但那个时候还没调试,现在调试通了,想做上位机,怎么也找不到了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:447
  • 最近打卡:2025-04-30 11:36:47

7

主题

64

回帖

659

积分

高级会员

积分
659
发表于 2024-4-7 09:57:11 | 显示全部楼层
可以请论坛里的这位大神出个教程。gentleman
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-4-7 10:00:24 | 显示全部楼层
本帖最后由 xiangzichen 于 2024-4-7 10:06 编辑

现在python可以调试通,这个代码和isp软件能通信

import hid

# pip install hidapi

def main():
    # 获取所有连接的 HID 设备
    devices = hid.enumerate()

    # 查找目标 HID 设备
    target_vid = 0x34bf  
    target_pid = 0xff01
    target_device = None

    for device_info in devices:
        if device_info["vendor_id"] == target_vid and device_info["product_id"] == target_pid:
            target_device = device_info
            break

    if target_device is None:
        print("Target HID device not found.")
        return

    # 打开 HID 设备
    device = hid.device()
    device.open_path(target_device["path"])

    # 读取数据
    while True:
        data = device.read(64)  # 读取最多64字节的数据
        if data:
            print("Received data:", data)

    # 关闭 HID 设备
    device.close()

if __name__ == "__main__":
    main()
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-4-7 10:06:14 | 显示全部楼层
c的话,这样的,怎么也不打开hid设备,如果把 L"\\\\.\\VID_34BF&PID_FF01" 改成 "L"\\\\.\\COM1",和串口通信一点问题都没有.是不是这一串字符定义的不对啊,还需要增加什么吗?
我后面增加stc的名字什么的,各种测试都不行.
看看群里有没有大神做这方面开发的.只要能提供一个打开设备成功的一句话就可以了.先行谢过各位了.



WCHAR deviceName[] = L"\\\\.\\VID_34BF&PID_FF01";
// 打开设备
HANDLE hDevice = CreateFileW(deviceName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
    printf("Failed to open device.\n");
    return 1;
}




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-4-7 10:07:44 | 显示全部楼层
conso*** 发表于 2024-4-7 09:57
可以请论坛里的这位大神出个教程。gentleman

也不能@别人,等大神自己发现吧.期待大神回复~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-4-7 10:08:39 | 显示全部楼层
神*** 发表于 2024-4-7 08:51
官方不管 上位机这个事

嗯,这个没关系,看看论坛里有没有大神做这方面的.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:520
  • 最近打卡:2025-05-01 08:06:21

109

主题

1897

回帖

5204

积分

论坛元老

积分
5204
发表于 2024-4-7 10:36:17 | 显示全部楼层
这个很难,专业性很强。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:27 , Processed in 0.176450 second(s), 128 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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