找回密码
 立即注册
查看: 9283|回复: 33

中断模式的USB-CDC/虚拟串口库函数及中断模式的HID库函数 使用说明,32G/8H系列

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-5-25 17:35:05 | 显示全部楼层 |阅读模式
中断模式的 USB-CDC/虚拟串口库函数 及使用说明
中断模式的 HID库函数 及使用说明,2024/5/30更新
===32G12K128 / 8H8K64U系列
===USB-CDC虚拟串口/就是最简单的串口, WIN10 及以后都不用装驱动了!!!
===USB-HID, 是免驱动安装的 !!!

大家已经非常熟悉 查询模式的STC USB-CDC/虚拟串口库函数
当串口接收的数据量大或者有其他高优先级中断需要响应时,查询模式可能会无法及时处理接收的数据。
基于实际的应用需求,现提供中断模式的 USB-CDC/虚拟串口库函数,供参考和使用,见本贴附件

当在USB中断服务程序中接收到来自于上位机的数据包后,
在USB的中断服务程序中会调用一个回调函数usb_OUT_callback(),
用户只需要在自己的代码中实现usb_OUT_callback(),
并在处理完成接收到的串口数据后,返回1就可以了
剩下后续的收尾工作中断服务程序会自动完成

下面以STC32G12K128系列的中断模式库为例进行说明(STC8H完全类似)
第一步、新建项目,选择目标芯片型号为STC32G12K128

STC32G/STC8H中断模式的STC USB-CDC/虚拟串口库及使用说明-1.png

第二步、将下面的代码保存为main.c,并将文件添加到项目中
  1. #include "stc32g.h"
  2. #include "stc32_stc8_usb.h"
  3. char *USER_DEVICEDESC = NULL;
  4. char *USER_PRODUCTDESC = NULL;
  5. char *USER_STCISPCMD = "@STCISP#";
  6. void main()
  7. {
  8.     P_SW2 |= 0x80;
  9.    
  10.     P0M1 = 0x00;   P0M0 = 0x00;
  11.     P1M1 = 0x00;   P1M0 = 0x00;
  12.     P2M1 = 0x00;   P2M0 = 0x00;
  13.     P3M1 = 0x00;   P3M0 = 0x00;
  14.     P4M1 = 0x00;   P4M0 = 0x00;
  15.     P5M1 = 0x00;   P5M0 = 0x00;
  16.     P6M1 = 0x00;   P6M0 = 0x00;
  17.     P7M1 = 0x00;   P7M0 = 0x00;
  18.     P3M0 &= ~0x03;
  19.     P3M1 |= 0x03;
  20.    
  21.     IRC48MCR = 0x80;
  22.     while (!(IRC48MCR & 0x01));
  23.    
  24.     USBCLK = 0x00;
  25.     USBCON = 0x90;
  26.    
  27.     usb_init();                                     //USB CDC 接口配置
  28.    
  29.     IE2 |= 0x80;                                    //使能USB中断
  30.     EA = 1;
  31.    
  32.     while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  33.     while (1);
  34. }
  35. /************************************************
  36. 函数功能:USB-CDC串口接收数据的回调函数
  37. 函数描述:回调函数由USB中断在接收到串口数据时自动调用
  38.           回调函数处理完成串口数据后需要返回1
  39. 函数返回:返回1:USB中断服务程序自动完成后续的收尾工作
  40.           返回0:USB会暂停接收串口数据,直到用户自行调用
  41.                  usb_OUT_done()函数后USB才会重新恢复接收数据
  42. 注意事项:当函数返回1时用户无需调用usb_OUT_done()
  43.           只有返回0时才需要调用usb_OUT_done()进行手动收尾
  44.           强烈建议usb_OUT_callback返回1
  45. ************************************************/
  46. BOOL usb_OUT_callback()
  47. {
  48.     USB_SendData(UsbOutBuffer,OutNumber);           //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  49.    
  50.     return 1;
  51. }
复制代码
第三步、将库文件“stc_usb_cdc_32g_interrupt.lib”也添加到项目中
STC32G/STC8H中断模式的STC USB-CDC/虚拟串口库及使用说明-2.png

第四步、对项目进行如下设置
STC32G/STC8H中断模式的STC USB-CDC/虚拟串口库及使用说明-3.png

STC32G/STC8H中断模式的STC USB-CDC/虚拟串口库及使用说明-4.png

STC32G/STC8H中断模式的STC USB-CDC/虚拟串口库及使用说明-5.png

第五部、最后对项目进行编译产生HEX文件
STC32G/STC8H中断模式的STC USB-CDC/虚拟串口库及使用说明-6.png
将hex文件下载到目标芯片中即可。

下面的附件为中断模式的库文件
同时顺便间之前的查询模式的库文件和“stc32_stc8_usb.h”头文件也一并上传,供大家下载和参考



STC_CDC_INTERRUPT_LIBRARY.ZIP

144.64 KB, 下载次数: 398

中断模式的USB-CDC库和Demo程序

STC_CDC_QUERY_LIBRARY.ZIP

143.68 KB, 下载次数: 304

查询模式的USB-CDC库和Demo程序

STC_HID_QUERY_LIBRARY.ZIP

163.45 KB, 下载次数: 324

查询模式的USB-HID库和Demo程序

STC_HID_INTERRUPT_LIBRARY.ZIP

236.52 KB, 下载次数: 218

中断模式的USB-HID库和Demo程序

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2023-5-25 17:56:07 | 显示全部楼层
好,必须学习,有爱好者问:

Q1. 实例中的“BOOL usb_OUT_callback()”就相当于中断程序,只要USB-CDC接收到上位机发来的程序就自动启动这个程序?
A1. 是的. usb_OUT_callback()是一个回调函数,只要USB-CDC接收到上位机发来的数据,中断服务程序就会自动调用这个程序

Q2. 在这个程序中处理上位机发来的数据。接收的数据保存在UsbOutBuffer中,数量是OutNumber
A2. 是的

Q3. USB发送数据还是调用USB_SendData(SendBuffer,SendNumber); ,SendBuffer,SendNumber分别是要发送数据的缓冲区地址和发送数据数量
A3. 是的

Q4. 只要调用上述程序,且处理完接收到的数据,并且最后“return 1;”就无需再调用“usb_OUT_done()”函数,
A4. 是的. 中断服务程序发现回调函数的返回值为1,就会自动去做剩下的工作,用户无需在软件中调用“usb_OUT_done()”函数


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:96
  • 最近打卡:2025-04-30 06:09:25

0

主题

12

回帖

476

积分

中级会员

积分
476
发表于 2023-5-26 08:48:16 | 显示全部楼层
有源码么
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-04-28 16:56:43

21

主题

376

回帖

2345

积分

超级版主

积分
2345
发表于 2023-5-26 09:25:51 | 显示全部楼层
看楼主的附件,有源码。

不同USB程序需要的程序空间大小
@STC8H8K64U, STC8H2K32U, STC8H2K12U, STC8H2K08U

USB-HID 通信, 2.3K
USB-CDC
通信, 3.2K

2CDC, USB-CDC双串口, 6.3K
2CDC+HID, USB-CDC双串口 + HID通信, 8.5K
电话:0513-55012946 QQ:2195591714  微信:  19952583740
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-07-05 16:23:47

3

主题

51

回帖

487

积分

中级会员

积分
487
发表于 2023-6-21 23:05:46 | 显示全部楼层
callback好,亲民的接口,写进去的代码他帮你安排执行,
其中给自己设置一个标志,就可以知道发生了什么
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-1-18 18:03:26 | 显示全部楼层
STC8F2K16是否支持USB-CDC呢?

点评

没有,用 STC8H8K64U  发表于 2024-1-18 18:20
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-18 18:19:41 | 显示全部楼层
截图202401181819109175.jpg

截图202401181819341589.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-1-18 19:25:42 | 显示全部楼层
STC8F2K16S2可以USB-HID下载,程序运行后,设备管理器中出现”未知USB设备(设备描述符请求失败)“作何解释呢?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-18 19:54:34 | 显示全部楼层
那个芯片我们手上没有,你直接换  
STC8H8K64U-45I-TSSOP20/SOP16, 人民币1.4;

我们 免费+包邮 送 您

下图硬件 USB直接下载,不是软件模拟 USB下载


截图202401181954025409.jpg

截图202401181954284998.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-01 06:03:55
已绑定手机

34

主题

459

回帖

2215

积分

金牌会员

积分
2215
发表于 2024-1-24 16:37:54 | 显示全部楼层
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 03:53 , Processed in 0.143302 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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