找回密码
 立即注册
查看: 1055|回复: 34

stc32g USB CDC 如何单纯的发数据

[复制链接]
  • TA的每日心情
    郁闷
    2024-3-28 10:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    7

    主题

    16

    回帖

    107

    积分

    注册会员

    积分
    107
    发表于 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=");程序就卡死了?
    所以想知道主动发数据的流程
    回复 送花

    使用道具 举报

    该用户从未签到

    551

    主题

    9305

    回帖

    1万

    积分

    管理员

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



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4033

    积分

    论坛元老

    积分
    4033
    发表于 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接口输出。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-28 10:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    7

    主题

    16

    回帖

    107

    积分

    注册会员

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

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

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-28 10:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    7

    主题

    16

    回帖

    107

    积分

    注册会员

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

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

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-28 10:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    7

    主题

    16

    回帖

    107

    积分

    注册会员

    积分
    107
     楼主| 发表于 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发数据。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4033

    积分

    论坛元老

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

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

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-3-28 10:05
  • 签到天数: 2 天

    [LV.1]初来乍到

    7

    主题

    16

    回帖

    107

    积分

    注册会员

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

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

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4033

    积分

    论坛元老

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

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

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

    44.8 KB, 下载次数: 39

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

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


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


    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-3 21:09 , Processed in 0.090688 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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