找回密码
 立即注册
楼主: king***

stc32g USB CDC 如何单纯的发数据

[复制链接]
  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-7 20:49:58 来自手机 | 显示全部楼层
    必须在上微机打开串口才能正常输出,关闭上位机串口软件后,stc单片机其他线程收到影响,立即停止工作
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-7 20:57:34 来自手机 | 显示全部楼层
    请今日参与验证的大佬。按照上述描述,在指定位置增加
    printf("问题就在这一行,增加这一行就无法正常运行");
    目的是让cdc串口,持续输出一串字符,
    观察上位机串口软件开启与关闭时,
    led灯线程,是否还能正常工作?
    我看到上述实验没有影响,可能是我没有说清楚,
    需要在指定位置加上一句printf 函数,以使cdc串口能主动的持续的发出一串字符
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-8 08:44:28 | 显示全部楼层
    gentleman 发表于 2024-3-7 14:58
    写了个闪灯任务

    与USB任务 互不影响

    早上好,在线等 。。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-22 08:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    7

    主题

    37

    回帖

    251

    积分

    等待验证会员

    积分
    251
    发表于 2024-3-8 09:18:35 | 显示全部楼层
    本帖最后由 55337575 于 2024-3-8 09:20 编辑
    dongchengya 发表于 2024-3-8 08:44
    早上好,在线等 。。

    我自己修改了一下例子的程序,你参考一下

    #include "stc.h"
    #include "usb.h"
    #include "usb_req_class.h"

    //USN数据发送进程
    void USB_SendData(BYTE *buf,u16 bl)
    {
            BYTE num;
            
            while(bl)
            {
                    num=(bl>(EP1IN_SIZE-1)?EP1IN_SIZE:bl);
                    bl-=num;
                    while(num)
                    {
                            if(UsbInBusy) continue;
                            TxBuffer[TxWptr++] = *buf++;
                            num--;
                    }               
            }
    }


    //USB口收发监视进程。发送通过USB_SendData()函数填充缓冲区;
    //接收数据自动完成,数据填充到USB_RevDataBuf[]缓冲区,
    //数据长度为USB_RevDataLong,该参数在数据处理完成后由软件清零
    void USB_polling()               
    {
        BYTE cnt;

        if (DeviceState != DEVSTATE_CONFIGURED)
            return;

        if (!UsbInBusy && (TxRptr != TxWptr))
        {
            EUSB = 0;
            UsbInBusy = 1;
            usb_write_reg(INDEX, 1);
            cnt = 0;
            while (TxRptr != TxWptr)
            {
                usb_write_reg(FIFO1, TxBuffer[TxRptr++]);
                cnt++;
                if (cnt == EP1IN_SIZE) break;
            }
            usb_write_reg(INCSR1, INIPRDY);
            EUSB = 1;
        }

        while(RxRptr != RxWptr)
                    {
                            USB_RevDataBuf[USB_RevDataLong++] = RxBuffer[RxRptr++];
                    }                        

        if (UsbOutBusy)
        {
            EUSB = 0;
            if (RxWptr - RxRptr < 256 - EP1OUT_SIZE)
            {
                UsbOutBusy = 0;
                usb_write_reg(INDEX, 1);
                usb_write_reg(OUTCSR1, 0);
            }
            EUSB = 1;
        }
    }

    接收监视一直循环,发送随机


    void main()
    {
      
            WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXFR = 1; //扩展寄存器(XFR)访问使能
        CKCON = 0; //提高访问XRAM速度

        usb_init();
        EA = 1;
              
        while (1)
        {
                            USB_polling();
                             USB_SendData("1234567890",10);       
    Delay1000ms();
                           
                            USB_SendData(USB_RevDataBuf,USB_RevDataLong);
                            USB_RevDataLong=0;
        }
    }


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-8 09:40:27 | 显示全部楼层
    55337575 发表于 2024-3-8 09:18
    我自己修改了一下例子的程序,你参考一下

    #include "stc.h"

    我看看,谢
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-8 09:50:45 | 显示全部楼层
    55337575 发表于 2024-3-8 09:18
    我自己修改了一下例子的程序,你参考一下

    #include "stc.h"

    从长远的角度讲,是不是这个 USB-CDC 库 需要改进一下?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-22 08:53
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    7

    主题

    37

    回帖

    251

    积分

    等待验证会员

    积分
    251
    发表于 2024-3-8 10:02:53 | 显示全部楼层
    本帖最后由 55337575 于 2024-3-8 10:07 编辑
    dongchengya 发表于 2024-3-8 09:50
    从长远的角度讲,是不是这个 USB-CDC 库 需要改进一下?

    个人感觉不需要,CDC本身是服务于串口的,所以同串口关联是应该的。我只是需要直接通过串口收发数据所以改了一下。去除了所有串口关联子程,这样我可以嵌套到程序中了。而且这个过程同波特率无关。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-8 10:08:56 | 显示全部楼层
    本帖最后由 dongchengya 于 2024-3-8 10:20 编辑


    stc_usb_cdc_32.LIB  这个新的USB-CDC库是 官方提供的新版本 USB库文件,下载地址为:  https://www.stcai.com/khs

    stc_usb_cdc_32g.LIB  这个早一点的USB-CDC库  是在 FreeRTOS-USB-CDC 中提供的,下载地址为:   https://www.stcai.com/xtrj
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------
      现在需要在 FreeRTOS-库函数版本 中使用 USB-CDC 库文件, 如果使用  FreeRTOS-USB-CDC 中提供的  stc_usb_cdc_32g.LIB 这个库文件 就会出现问题,具体如下:
      stc_usb_cdc_32g.LIB   在使用的时候会出现上述 LED灯线程不工作的情况 ,尝试使用新一点的  stc_usb_cdc_32.LIB ,


    但是编译无法通过,提示如下:

    linking...
    *** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
        SYMBOL:  usb_OUT_done?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
    *** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
        SYMBOL:  USB_SendData?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
    *** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
        SYMBOL:  usb_init?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
    *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
        SYMBOL:  usb_init?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
        ADDRESS: FF54C2H
    *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
        SYMBOL:  USB_SendData?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
        ADDRESS: FF54FDH
    *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
        SYMBOL:  usb_OUT_done?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
        ADDRESS: FF5510H
    *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
        SYMBOL:  USB_SendData?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
        ADDRESS: FF432AH
    *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
        SYMBOL:  USB_SendData?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
        ADDRESS: FF4369H
    *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
        SYMBOL:  USB_SendData?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
        ADDRESS: FF43CEH
    *** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
        SYMBOL:  USB_SendData?_
        MODULE:  .\Objects\usb_cdc.obj (usb_cdc)
        ADDRESS: FF440BH

      



    新建位图图像.bmp
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-8 10:27:55 | 显示全部楼层
    本帖最后由 dongchengya 于 2024-3-8 10:33 编辑
    55337575 发表于 2024-3-8 10:02
    个人感觉不需要,CDC本身是服务于串口的,所以同串口关联是应该的。我只是需要直接通过串口收发数据所以改 ...

    这里有两个USB库,
    旧一点的这个可以在 FressRTOS 中使用,但是会对其他线程有影响,
    新一点的这个USB库 ,又不能在FreeRTOS编译通过,

    感觉就是 新库和 FreeRTOS 不兼容 。
    何故?何解?






    新建位图图像.bmp
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-8 10:50:42 | 显示全部楼层
    55337575 发表于 2024-3-8 09:18
    我自己修改了一下例子的程序,你参考一下

    #include "stc.h"

    我另外发布一个帖子
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-3 20:15 , Processed in 0.067025 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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