找回密码
 立即注册
查看: 2106|回复: 48

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

[复制链接]
  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 235 天

    [LV.7]常住居民III

    14

    主题

    588

    回帖

    1779

    积分

    荣誉版主

    积分
    1779
    发表于 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, 下载次数: 133)





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

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:54
  • 签到天数: 277 天

    [LV.8]以坛为家I

    30

    主题

    1754

    回帖

    5738

    积分

    论坛元老

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

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

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


    截图202404092101448959.jpg




    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 235 天

    [LV.7]常住居民III

    14

    主题

    588

    回帖

    1779

    积分

    荣誉版主

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

    第一步

    第一步

    第二步

    第二步


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-12-2 09:55
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    20

    主题

    123

    回帖

    902

    积分

    高级会员

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

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 235 天

    [LV.7]常住居民III

    14

    主题

    588

    回帖

    1779

    积分

    荣誉版主

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

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 05:05
  • 签到天数: 296 天

    [LV.8]以坛为家I

    7

    主题

    66

    回帖

    415

    积分

    中级会员

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

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 235 天

    [LV.7]常住居民III

    14

    主题

    588

    回帖

    1779

    积分

    荣誉版主

    积分
    1779
     楼主| 发表于 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()
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 235 天

    [LV.7]常住居民III

    14

    主题

    588

    回帖

    1779

    积分

    荣誉版主

    积分
    1779
     楼主| 发表于 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;
    }




    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 235 天

    [LV.7]常住居民III

    14

    主题

    588

    回帖

    1779

    积分

    荣誉版主

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

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

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 235 天

    [LV.7]常住居民III

    14

    主题

    588

    回帖

    1779

    积分

    荣誉版主

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

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

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:58
  • 签到天数: 339 天

    [LV.8]以坛为家I

    91

    主题

    1321

    回帖

    3902

    积分

    论坛元老

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-1 07:58 , Processed in 0.086694 second(s), 89 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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