找回密码
 立即注册
楼主: kingmacth

stc32g USB CDC 如何单纯的发数据

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

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

与USB任务 互不影响

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-04-23 15:28:46

19

主题

65

回帖

223

积分

等待验证会员

积分
223
发表于 2024-3-8 09:18:35 | 显示全部楼层
本帖最后由 55337575 于 2024-3-8 09:20 编辑
dongch*** 发表于 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;
    }
}


回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

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

#include "stc.h"

我看看,谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

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

#include "stc.h"

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-04-23 15:28:46

19

主题

65

回帖

223

积分

等待验证会员

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

积分
106
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

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

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

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






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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

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

#include "stc.h"

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 09:01 , Processed in 0.155721 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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