数码之家

 找回密码
 立即注册
搜索
查看: 1453|回复: 0

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

[复制链接]
头像被屏蔽
发表于 2023-5-26 11:01:38 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

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

173506bew0r9wwwe0ak2bk.png

第二步、将下面的代码保存为main.c,并将文件添加到项目中
  • #include "stc32g.h"
  • #include "stc32_stc8_usb.h"
  • char *USER_DEVICEDESC = NULL;
  • char *USER_PRODUCTDESC = NULL;
  • char *USER_STCISPCMD = "@STCISP#";
  • void main()
  • {
  •     P_SW2 |= 0x80;
  •     P0M1 = 0x00;   P0M0 = 0x00;
  •     P1M1 = 0x00;   P1M0 = 0x00;
  •     P2M1 = 0x00;   P2M0 = 0x00;
  •     P3M1 = 0x00;   P3M0 = 0x00;
  •     P4M1 = 0x00;   P4M0 = 0x00;
  •     P5M1 = 0x00;   P5M0 = 0x00;
  •     P6M1 = 0x00;   P6M0 = 0x00;
  •     P7M1 = 0x00;   P7M0 = 0x00;
  •     P3M0 &= ~0x03;
  •     P3M1 |= 0x03;
  •     IRC48MCR = 0x80;
  •     while (!(IRC48MCR & 0x01));
  •     USBCLK = 0x00;
  •     USBCON = 0x90;
  •     usb_init();                                     //USB CDC 接口配置
  •     IE2 |= 0x80;                                    //使能USB中断
  •     EA = 1;
  •     while (DeviceState != DEVSTATE_CONFIGURED);     //等待USB完成配置
  •     while (1);
  • }
  • /************************************************
  • 函数功能:USB-CDC串口接收数据的回调函数
  • 函数描述:回调函数由USB中断在接收到串口数据时自动调用
  •           回调函数处理完成串口数据后需要返回1
  • 函数返回:返回1:USB中断服务程序自动完成后续的收尾工作
  •           返回0:USB会暂停接收串口数据,直到用户自行调用
  •                  usb_OUT_done()函数后USB才会重新恢复接收数据
  • 注意事项:当函数返回1时用户无需调用usb_OUT_done()
  •           只有返回0时才需要调用usb_OUT_done()进行手动收尾
  •           强烈建议usb_OUT_callback返回1
  • ************************************************/
  • BOOL usb_OUT_callback()
  • {
  •     USB_SendData(UsbOutBuffer,OutNumber);           //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  •     return 1;
  • }


[color=rgb(51, 102, 153) !important]复制代码

第三步、将库文件“stc_usb_cdc_32g_interrupt.lib”也添加到项目中
173506b4txz5jjetfrgfjo.png

第四步、对项目进行如下设置
173506ebclu50luwohwbuz.png

173506nkiikrk9iytitrij.png

173506nyyqwlcca3wqqj9a.png

第五部、最后对项目进行编译产生HEX文件
173506dzutkuhwvwwvu2uq.png
将hex文件下载到目标芯片中即可。

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

STC_CDC_INTERRUPT_LIBRARY.ZIP

144.64 KB, 下载次数: 0, 下载积分: 家元 -55

STC_CDC_QUERY_LIBRARY.ZIP

143.68 KB, 下载次数: 0, 下载积分: 家元 -55

STC_HID_QUERY_LIBRARY.ZIP

163.45 KB, 下载次数: 0, 下载积分: 家元 -55

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-5-11 04:21 , Processed in 0.124800 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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