请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 3215|回复: 14

中断模式的 USB-CDC/虚拟串口库函数 及使用说明,STC32G/STC8H

[复制链接]
  • TA的每日心情
    开心
    2024-1-4 08:56
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    16

    主题

    702

    回帖

    2460

    积分

    超级版主

    积分
    2460
    发表于 2023-5-25 17:35:05 | 显示全部楼层 |阅读模式

    中断模式的 USB-CDC/虚拟串口库函数 及使用说明
    ===STC32G12K128 / STC8H8K64U

    ===USB-CDC虚拟串口/就是最简单的串口, WIN10 及以后都不用装驱动了!!!


    大家已经非常熟悉 查询模式的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”头文件也一并上传,供大家下载和参考



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

    STC_CDC_INTERRUPT_LIBRARY.ZIP

    144.64 KB, 下载次数: 133

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

    STC_CDC_QUERY_LIBRARY.ZIP

    143.68 KB, 下载次数: 109

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

    STC_HID_QUERY_LIBRARY.ZIP

    163.45 KB, 下载次数: 107

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

    回复 送花

    使用道具 举报

    该用户从未签到

    538

    主题

    8734

    回帖

    1万

    积分

    管理员

    积分
    14193
    发表于 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()”函数


    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    9

    回帖

    58

    积分

    注册会员

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-5 13:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    12

    主题

    233

    回帖

    1464

    积分

    超级版主

    积分
    1464
    发表于 2023-5-26 09:25:51 | 显示全部楼层
    看楼主的附件,有源码。
    电话:0513-55012946 QQ:2195591714  微信:  19952583740
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    3

    主题

    51

    回帖

    473

    积分

    中级会员

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

    使用道具 举报

  • TA的每日心情
    奋斗
    21 小时前
  • 签到天数: 65 天

    [LV.6]常住居民II

    7

    主题

    467

    回帖

    505

    积分

    高级会员

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

    点评

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

    使用道具 举报

    该用户从未签到

    538

    主题

    8734

    回帖

    1万

    积分

    管理员

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

    截图202401181819341589.jpg

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    21 小时前
  • 签到天数: 65 天

    [LV.6]常住居民II

    7

    主题

    467

    回帖

    505

    积分

    高级会员

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

    使用道具 举报

    该用户从未签到

    538

    主题

    8734

    回帖

    1万

    积分

    管理员

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

    我们 免费+包邮 送 您

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


    截图202401181954025409.jpg

    截图202401181954284998.jpg


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    19 小时前
  • 签到天数: 125 天

    [LV.7]常住居民III

    14

    主题

    247

    回帖

    587

    积分

    高级会员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-3-29 21:34 , Processed in 0.075567 second(s), 69 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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