找回密码
 立即注册
查看: 96|回复: 7

求解CDC USB发送10个字节非常慢 ,需要80ms的问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-29 19:31:05
已绑定手机

1

主题

11

回帖

41

积分

新手上路

积分
41
发表于 4 天前 | 显示全部楼层 |阅读模式
在官网下载的,https://www.stcai.com/khs
USB库文件20250716版本,使用自带DEMO程序,
使用Ai8H8K64U-64PIN,

STC-CDC范例程序(查询方式)
stc8h_cdc_xdata_query_demo
stc8h_cdc_xdata_query_demo.uvproj

实测USB_SendData  不同位置,发送一个速度不一样,求解


#include "stc8h.h"
#include "stc32_stc8_usb.h"


sbit LED_0 = P2 ^ 0;
sbit LED_1 = P2 ^ 1;

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;

    usb_init();                                     //USB CDC 接口配置

    EA = 1;

    while(1)
        {
            if(bUsbOutReady)
                {
                    // USB_SendData(UsbOutBuffer, OutNumber);  //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                 
                 //实测USB发送10个字节占用45us
                   LED_1 = 0;
                    USB_SendData("12345678\r\n", 10); //测试发送10个字节
                    LED_1 = 1;

                    usb_OUT_done();
                }

            //实测USB发送10个字节占用80ms  
            LED_0 = 0;
            USB_SendData("12345678\r\n", 10);//测试发送10个字节
            LED_0 = 1;

        }
}


https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTEwMDExfGYzYTEwN2VjfDE3NTM5ODM3Nzh8MHw%3D
https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTEwMDEyfDcyNmZjYTI0fDE3NTM5ODM3Nzh8MHw%3D
https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTEwMDEzfDJiMzU4YmVkfDE3NTM5ODM3Nzh8MHw%3D
https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTEwMDE0fDQzN2Q4Zjg0fDE3NTM5ODM3Nzh8MHw%3D
https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTEwMDE1fDY1Njg3ZGJjfDE3NTM5ODM3Nzh8MHw%3D


//实测USB发送10个字节占用80ms  
            LED_0 = 0;
            USB_SendData("12345678\r\n", 10);//测试发送10个字节
            LED_0 = 1;

https://www.stcaimcu.com/forum.php?mod=attachment&aid=MTEwMDE2fDM3YjVkMDM4fDE3NTM5ODM3Nzh8MHw%3D

//在bUsbOutReady接收中发送,就很快

if(bUsbOutReady)
                {
                    // USB_SendData(UsbOutBuffer, OutNumber);  //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                 
                                                                         //实测USB发送10个字节占用45us
                                                                                LED_1 = 0;
                    USB_SendData("12345678\r\n", 10); //测试发送10个字节
                    LED_1 = 1;

                    usb_OUT_done();
                }



微信截图_20250728100054.png
微信截图_20250728100128.png
微信截图_20250728100149.png
微信截图_20250728102231.png
微信截图_20250728101729.png
微信截图_20250728102110.png
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-07-31 02:10:14
已绑定手机

38

主题

2302

回帖

3014

积分

荣誉版主

积分
3014
发表于 4 天前 | 显示全部楼层
只保留一部分代码再测试看看
截图202507281120152293.jpg
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:253
  • 最近打卡:2025-07-31 08:55:10
已绑定手机

78

主题

2294

回帖

5226

积分

荣誉版主

无情的代码机器

积分
5226
发表于 4 天前 | 显示全部楼层

打开串口状态:
截图202507281233257067.jpg

关闭串口状态,触发超时机制:
截图202507281234036639.jpg

不想要这个超时,可以参考此帖:
https://www.stcaimcu.com/forum.p ... 9040&pid=177176

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-29 19:31:05
已绑定手机

1

主题

11

回帖

41

积分

新手上路

积分
41
发表于 3 天前 | 显示全部楼层
晓*** 发表于 2025-7-28 11:20
只保留一部分代码再测试看看

没用啊,上面接收后再转发,占用时间很短,下面正常发送,占用时间很长,根本没法用啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-29 19:31:05
已绑定手机

1

主题

11

回帖

41

积分

新手上路

积分
41
发表于 3 天前 | 显示全部楼层
erci*** 发表于 2025-7-28 12:36
打开串口状态:

不好意思哈,2张截图,除了占用时间不一样,其他没看出啥区别,我是用的官网的250716 的USB库的DEMO,有劳指点下

补充下,串口调试软件是打开状态,能正常接收显示数据,只是占用时间太长了


貌似看起来还只能用回传统串口直接打印,外挂CH340 ,没法实现完全替代CH340

点评

不至于那么慢,我做的一个模拟量采集盒子,12位ADC,四个通道,采样率都是1KHz,用USB-CDC串口方式发送数据,一点丢包卡顿都没有。  详情 回复 发表于 3 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:500
  • 最近打卡:2025-07-31 02:10:14
已绑定手机

38

主题

2302

回帖

3014

积分

荣誉版主

积分
3014
发表于 3 天前 | 显示全部楼层
BH4*** 发表于 2025-7-29 19:37
不好意思哈,2张截图,除了占用时间不一样,其他没看出啥区别,我是用的官网的250716 的USB库的DEMO,有劳 ...

不至于那么慢,我做的一个模拟量采集盒子,12位ADC,四个通道,采样率都是1KHz,用USB-CDC串口方式发送数据,一点丢包卡顿都没有。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-07-29 19:31:05
已绑定手机

1

主题

11

回帖

41

积分

新手上路

积分
41
发表于 3 天前 | 显示全部楼层
晓*** 发表于 2025-7-29 19:50
不至于那么慢,我做的一个模拟量采集盒子,12位ADC,四个通道,采样率都是1KHz,用USB-CDC串口方式发送数 ...

我用的官网程序,编译是OK的,下载运行也正常,就是发送占用时间长,没法完全替代传统串口+CH340的方式,其实我是想省掉CH340这个


官网的USB 最新250716库的DEMO ,8H8K64U ,只加了2个LED输出,用于逻辑分析仪测量,其他没做任何修改



#include "stc8h.h"
#include "stc32_stc8_usb.h"


sbit LED_0 = P2 ^ 0;
sbit LED_1 = P2 ^ 1;

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;

    usb_init();                                     //USB CDC 接口配置

    EA = 1;

    while(1)
        {
            if(bUsbOutReady)
                {
                    // USB_SendData(UsbOutBuffer, OutNumber);  //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
                 
                 //实测USB发送10个字节占用45us
                   LED_1 = 0;
                    USB_SendData("12345678\r\n", 10); //测试发送10个字节
                    LED_1 = 1;

                    usb_OUT_done();
                }

            //实测USB发送10个字节占用80ms  
            LED_0 = 0;
            USB_SendData("12345678\r\n", 10);//测试发送10个字节
            LED_0 = 1;

        }
}


点评

拿这个测,us级别:  详情 回复 发表于 3 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:253
  • 最近打卡:2025-07-31 08:55:10
已绑定手机

78

主题

2294

回帖

5226

积分

荣誉版主

无情的代码机器

积分
5226
发表于 3 天前 | 显示全部楼层
BH4*** 发表于 2025-7-29 19:55
我用的官网程序,编译是OK的,下载运行也正常,就是发送占用时间长,没法完全替代传统串口+CH340的方式, ...

拿这个测,us级别:

  1. #include "stc8h.h"
  2. #include "stc32_stc8_usb.h"
  3. sbit LED_0 = P2 ^ 0;
  4. sbit LED_1 = P2 ^ 1;
  5. extern void usb_write_reg(BYTE addr, BYTE dat);
  6. extern BYTE usb_read_reg(BYTE addr);
  7. u8 isCDCOpen(){
  8.         u8 result = 0;   
  9.         if (DeviceState != DEVSTATE_CONFIGURED){
  10.                         return 0;
  11.         }
  12.         IE2 &= ~0x80;
  13.         usb_write_reg(INDEX, 1);
  14.         if (!(usb_read_reg(INCSR1) & INIPRDY)){
  15.                 result = 1;
  16.         }       
  17.         IE2 |= 0x80;
  18.         return result ;
  19. }
  20. void main()
  21. {
  22.     P_SW2 |= 0x80;
  23.    
  24.     P0M1 = 0x00;   P0M0 = 0x00;
  25.     P1M1 = 0x00;   P1M0 = 0x00;
  26.     P2M1 = 0x00;   P2M0 = 0x00;
  27.     P3M1 = 0x00;   P3M0 = 0x00;
  28.     P4M1 = 0x00;   P4M0 = 0x00;
  29.     P5M1 = 0x00;   P5M0 = 0x00;
  30.     P6M1 = 0x00;   P6M0 = 0x00;
  31.     P7M1 = 0x00;   P7M0 = 0x00;
  32.    
  33.     usb_init();                                     //USB CDC 接口配置
  34.    
  35.     EA = 1;
  36.     while (1)
  37.     {
  38.         if (bUsbOutReady)
  39.         {
  40.             //USB_SendData(UsbOutBuffer,OutNumber);   //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  41.                                           LED_1 = 0;
  42.                                                 USB_SendData("12345678\r\n", 10); //测试发送10个字节
  43.                                                 LED_1 = 1;
  44.             usb_OUT_done();
  45.         }
  46.                                
  47.                                 LED_0 = 0;
  48.                                 if(isCDCOpen()){
  49.                                         USB_SendData("12345678\r\n", 10);//测试发送10个字节
  50.                                 }
  51.                                 LED_0 = 1;
  52.     }
  53. }
复制代码


三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-8-1 01:42 , Processed in 0.130335 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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