找回密码
 立即注册
查看: 3988|回复: 38

stc32g USB CDC 如何单纯的发数据

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-07 11:48:24

13

主题

21

回帖

200

积分

中级会员

积分
200
发表于 2023-6-7 21:02:33 | 显示全部楼层 |阅读模式
我使用USB_SendData,直接报错,


*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?USB_SendData?BYTE
    MODULE:  .\Objects\main.obj (main)
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  USB_SendData
    MODULE:  .\Objects\main.obj (main)
    ADDRESS: FF087CH



用printf发到时可以。但是必须在

if (bUsbOutReady)
        {
            usb_OUT_done();    //接收应答(固定格式)
            
            printf("OutNumber=0x%X\r\n",OutNumber);  //使用 printf 函数打印接收数据长度

            //memcpy(UsbInBuffer, UsbOutBuffer, OutNumber);  //将接收数据(UsbOutBuffer),复制到发送缓冲区(UsbInBuffer)
            //usb_IN(OutNumber);      //原路返回, 用于测试
        }


里面发,我理解就是必须受到PC发送的数据在返回才行。
我在IF外面循环调用printf("OutNumber=");程序就卡死了?
所以想知道主动发数据的流程
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2023-6-7 21:28:59 | 显示全部楼层
1.png
2.png
先参考下程序23,程序25



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-6-8 10:41:41 | 显示全部楼层
如果是调用“stc_usb_cdc_32g.LIB”函数库进行USB-CDC串口打印信息的话,
需要将“usb.h”头文件里面的"PRINTF_HID"定义开启:
#define PRINTF_HID              //printf输出直接重定向到USB HID接口
这样使用printf打印信息就会通过USB接口输出。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-07 11:48:24

13

主题

21

回帖

200

积分

中级会员

积分
200
发表于 2023-6-8 14:09:02 | 显示全部楼层
乘风*** 发表于 2023-6-8 10:41
如果是调用“stc_usb_cdc_32g.LIB”函数库进行USB-CDC串口打印信息的话,
需要将“usb.h”头文件里面的"PRI ...

我在不先接收的情况下直接使用printf会导致程序卡死。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-07 11:48:24

13

主题

21

回帖

200

积分

中级会员

积分
200
发表于 2023-6-8 14:09:39 | 显示全部楼层
神*** 发表于 2023-6-7 21:28
先参考下程序23,程序25

我就是在程序23的基础上修改的。还没看25.我在看看25
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-07 11:48:24

13

主题

21

回帖

200

积分

中级会员

积分
200
发表于 2023-6-8 14:41:12 | 显示全部楼层
乘风*** 发表于 2023-6-8 10:41
如果是调用“stc_usb_cdc_32g.LIB”函数库进行USB-CDC串口打印信息的话,
需要将“usb.h”头文件里面的"PRI ...


        if (bUsbOutReady)

所有的例子都是在这下面收发的。也就是先收到PC的数据再发。
我需要单方向往PC发数据。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-6-8 16:13:23 | 显示全部楼层
kingm*** 发表于 2023-6-8 14:09
我在不先接收的情况下直接使用printf会导致程序卡死。

我觉得问题的关键应该在于,USB CDC还没配置完成你就调用了发送函数,导致程序出问题。
在程序初始化代码后面,printf函数调用前面,插入以下代码试试:
  1. while(DeviceState != DEVSTATE_CONFIGURED);  //等待USB完成配置
复制代码
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-04-07 11:48:24

13

主题

21

回帖

200

积分

中级会员

积分
200
发表于 2023-6-8 16:35:22 | 显示全部楼层
乘风*** 发表于 2023-6-8 16:13
我觉得问题的关键应该在于,USB CDC还没配置完成你就调用了发送函数,导致程序出问题。
在程序初始化代码 ...

是有时候下载完成程序要拔电重插USB才能初始化正常。现在发数据可以了。又有新问题。
printf发送数据,如果PC端关闭串口它就会卡在那里。
应该给printf增加一个超时退出功能。
我是调用的LIB库不知道怎么增加这个发送超时退出。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-6-8 19:38:47 | 显示全部楼层
kingm*** 发表于 2023-6-8 16:35
是有时候下载完成程序要拔电重插USB才能初始化正常。现在发数据可以了。又有新问题。
printf发送数据,如 ...

试试附件的例程,可以参考例程的用法,并使用例程包里的“stc_usb_cdc_32g.LIB”文件。

08-16路ADC轮询-每路16次ADC转换取中间8次求平均值-CDC串口返回结果.zip

44.8 KB, 下载次数: 223

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2023-6-9 10:15:40 | 显示全部楼层


cdc串口发数据之前可以判断一下当前的usb状态,等他空闲了再发,实测这样一点问题没有,贼好用。


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:11 , Processed in 0.127130 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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