找回密码
 立即注册
查看: 28|回复: 19

用最新的USB_CDC库, 延时时间不对 | 少了两行不减速的程序,典型错误

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:517
  • 最近打卡:2025-06-29 09:53:03

23

主题

184

回帖

1753

积分

金牌会员

积分
1753
发表于 9 小时前 | 显示全部楼层 |阅读模式
典型错误:
        EAXFR = 1;        //允许访问扩展的特殊寄存器,XFR
        WTST = 0;        //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
        CKCON = 0;        //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间

少了上面 2行 不减速的  程序,记录在这,方便大家查阅
=============================================


为了验证延时程序,在官网下载了USB_CDC查询方式范例程序,
未改动源程序,只是在主循环里加了延时程序。
将printf_usb延时1秒输出,结果大约要4.5秒才输出1次,不知为何?
请大佬们验证。

1.bmp
2.bmp

stc32g_cdc_query_demo.rar

64.9 KB, 下载次数: 0

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17194
发表于 9 小时前 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17194
发表于 9 小时前 | 显示全部楼层
参考正确的参考程序:
截图202506291013338859.jpg



#include "ai8051u.h"
#include "ai_usb.h"

void main(void)
{
        EAXFR = 1;                                //允许访问扩展的特殊寄存器,XFR
        WTST = 0;                           //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
        CKCON = 0;                          //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
   
    usb_init();                         //初始化USB模块
    EA = 1;                             //使能全局中断

    while (1)
    {
        if (bUsbOutReady)               //查询是否有接收到数据
        {
                        if (UsbOutBuffer[0] == 6)
                                printf_usb("Hello World !\r\n");
                        else if (UsbOutBuffer[0] == 7)
                                printf_usb("China !\r\n");
                       
                        //            printf_usb("Hello World !\r\n");    //接收到数据后打印“Hello World !”
            usb_OUT_done();             //当前包的数据处理完成
        }
    }
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17194
发表于 9 小时前 | 显示全部楼层
参考正确的参考程序:

截图202506291015295614.jpg


#include "ai8051u.h"
#include "ai_usb.h"

void main(void)
{
        EAXFR = 1;                                //允许访问扩展的特殊寄存器,XFR
        WTST = 0;                           //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
        CKCON = 0;                          //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
   
    usb_init();                         //初始化USB模块
    EA = 1;                             //使能全局中断

    while (1)
    {
        if (bUsbOutReady)               //查询是否有接收到数据
        {
                        if (UsbOutBuffer[0] == 6)
                                printf_usb("Hello World !\r\n");
                        else if (UsbOutBuffer[0] == 7)
                                printf_usb("China !\r\n");
                       
                        //            printf_usb("Hello World !\r\n");    //接收到数据后打印“Hello World !”
            usb_OUT_done();             //当前包的数据处理完成
        }
    }
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17194
发表于 9 小时前 | 显示全部楼层
参考正确的参考程序:

截图202506291016257265.jpg

#include "ai8051u.h"
#include "ai_usb.h"

////////////////////////////////////////
// USB设备接收数据中断回调程序
////////////////////////////////////////
void USBLIB_OUT_Callback(void)
{
    if (UsbOutBuffer[0] == 6)
        printf_usb("Hello World !\r\n");        //接收到数据6后打印“Hello World !”
    else if (UsbOutBuffer[0] == 7)
        printf_usb("China !\r\n");                //接收到数据7后打印“China !”
}

void main(void)
{
        EAXFR = 1;                                //允许访问扩展的特殊寄存器,XFR
        WTST = 0;                           //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
        CKCON = 0;                          //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
   
    usb_init();                         //初始化USB模块
    set_usb_OUT_callback(USBLIB_OUT_Callback);  //设置USB中断回调函数
    EA = 1;                             //使能全局中断

    while (1);
}


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:517
  • 最近打卡:2025-06-29 09:53:03

23

主题

184

回帖

1753

积分

金牌会员

积分
1753
发表于 9 小时前 | 显示全部楼层
就是官网上的范例程序,我的是STC32G12K128屠龙刀,用的也是最新ISP版本。我要用延时输出。只是在主循环里加了延时,没有其它任务,就是简单验证一下输出正确与否。原来的库文件没问题的。

点评

在我给的资料的基础上,再前进 [attachimg]106501[/attachimg] [attachimg]106502[/attachimg] [attachimg]106503[/attachimg]  详情 回复 发表于 9 小时前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17194
发表于 9 小时前 | 显示全部楼层
Tui*** 发表于 2025-6-29 10:14
就是官网上的范例程序,我要用延时输出。只是在主循环里加了延时,没有其它任务,就是简单验证一下输出正确 ...

在我给的资料的基础上,再前进

截图202506291018114323.jpg

截图202506291019098659.jpg

截图202506291019391283.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17194
发表于 9 小时前 | 显示全部楼层
以我给的程序为准:

截图202506291021479514.jpg

截图202506291022391781.jpg


#include  "ai8051u.h"        //头文件不分大小写,但关键字分大小写
#include  "ai_usb.h"        //USB库和USB虚拟设备的头文件

void  main(void)
{
        EAXFR = 1;        //允许访问扩展的特殊寄存器,XFR
       WTST = 0;        //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
        CKCON = 0;        //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17194
发表于 9 小时前 | 显示全部楼层
楼主没用我给的最新资料:
#include  "ai8051u.h"        //头文件不分大小写,但关键字分大小写
#include  "ai_usb.h"        //USB库和USB虚拟设备的头文件

void  main(void)
{
        EAXFR = 1;        //允许访问扩展的特殊寄存器,XFR
        WTST = 0;        //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
        CKCON = 0;        //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

741

主题

1万

回帖

1万

积分

管理员

积分
17194
发表于 9 小时前 | 显示全部楼层
楼主程序,至少目前目测少了下面两行
截图202506291026357058.jpg

===========================================

截图202506291026187227.jpg

===========================================

截图202506291025598845.jpg

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-29 19:49 , Processed in 0.127168 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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