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

stc32g USB CDC 如何单纯的发数据

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-05-27 09:25:30

20

主题

68

回帖

260

积分

等待验证会员

积分
260
发表于 2024-3-8 11:08:54 | 显示全部楼层
dongch*** 发表于 2024-3-8 10:27
这里有两个USB库,
旧一点的这个可以在 FressRTOS 中使用,但是会对其他线程有影响,
新一点的这个USB库  ...

我不喜欢使用LIB,LIB是通用库,冗余太多,损失速度同时占用内存太大
回复

使用道具 举报 送花

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

3

主题

31

回帖

106

积分

注册会员

积分
106
发表于 2024-3-8 11:13:04 | 显示全部楼层
5533*** 发表于 2024-3-8 11:08
我不喜欢使用LIB,LIB是通用库,冗余太多,损失速度同时占用内存太大

这个是 USB-CDC 的lib 库  ,自己写这个USB库 对与大部分开发者来时  真是太难了哦
回复

使用道具 举报 送花

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

3

主题

31

回帖

106

积分

注册会员

积分
106
发表于 2024-3-8 11:22:55 | 显示全部楼层
5533*** 发表于 2024-3-8 11:08
我不喜欢使用LIB,LIB是通用库,冗余太多,损失速度同时占用内存太大

我之前用STM32的时候 也和你一样,喜欢用寄存器写程序,
但是现在不同了,毕竟函数库 比较方便使用,还不容易遗漏没注意到的问题
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-05-27 09:25:30

20

主题

68

回帖

260

积分

等待验证会员

积分
260
发表于 2024-3-8 11:29:36 | 显示全部楼层
USB不论HID还是CDC等等在驱动侧都一样的,使用他的例子改一下就好了,而且还没有模式限制
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-05-27 09:25:30

20

主题

68

回帖

260

积分

等待验证会员

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

priintf被卡死我遇到的是TI没有初始化后置1,要是使用USB_SendData()函数的化,前边需要加一个条件if(!UsbInBusy)吧,USB有时候反应慢

你的那个帖子被删了?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2024-08-29 09:23:04

8

主题

29

回帖

37

积分

新手上路

积分
37
发表于 2024-7-11 16:15:02 | 显示全部楼层
请问解决了吗
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2024-08-29 09:23:04

8

主题

29

回帖

37

积分

新手上路

积分
37
发表于 2024-7-11 16:23:56 | 显示全部楼层

我解决了 就是需要把 stc_usb_cdc_32.LIB 手动添加到工程文件中 最和和main.c一块放 好查找
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:308
  • 最近打卡:2025-11-01 08:40:28

3

主题

68

回帖

594

积分

高级会员

积分
594
发表于 2024-12-7 10:34:34 | 显示全部楼层

cdc串口

回复

使用道具 举报 送花

已绑定手机

1

主题

22

回帖

89

积分

注册会员

积分
89
发表于 2024-12-11 18:04:28 | 显示全部楼层

请问问题解决了吗?同问

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-11-02 09:54:45
已绑定手机

8

主题

594

回帖

1075

积分

金牌会员

积分
1075
发表于 3 天前 | 显示全部楼层
电子DI*** 发表于 2023-6-9 10:15
cdc串口发数据之前可以判断一下当前的usb状态,等他空闲了再发,实测这样一点问题没有,贼好用。

好像有时候也不行,请看:


void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码
                u8 sm=1;   //因为打印1次说明未能顺利执行,只能先在主循环打印一次
                u8 i=0;
                u8  tmp[8];
       
       
    //<<AICUBE_USER_MAIN_INITIAL_END>>

    SYS_Init();

    //<<AICUBE_USER_MAIN_CODE_BEGIN>>
    // 在此添加主函数中运行一次的用户代码
       

       
                P40 = 0;        //三极管引脚输出低电平
                P60 = 0;        //输出低电平   //这2颗灯亮了
                P61 = 0;        //输出低电平   //说明这段程序是执行了
                //delay_ms(2000);//经STC论坛版主erci***指导“print_usb并非阻
        //塞函数,所以在打开串口前可能已经打印完成了。 所以延时应放在打印前,或者在循环里
        //每隔1s反复打印这样每次打开串口都能看到。”
//                printf_usb( " A 首先从24C02读取8个数\xfd:            \r\n");  
//                printf_usb( " B 把从24C02读取8个数\xfd加1后写入24C02:\r\n");
//                printf_usb( " C 把从24C02读取8个数\xfd减1后写入24C02:\r\n");
//                printf_usb( " D 把24C02地址0x0000的8个数\xfd清零:    \r\n");
               
                while(bUsbInBusy==1) //cdc串口发数据之前可以判断一下当前的usb状态,等他空闲了再发,
                                                         //实测这样一点问题没有
                {
                printf_usb( " A 首先从24C02读取8个数:            \r\n");  
                printf_usb( " B 把从24C02读取8个数加1后写入24C02:\r\n");
                printf_usb( " C 把从24C02读取8个数减1后写入24C02:\r\n");
                printf_usb( " D 把24C02地址0x0000的8个数清零:    \r\n");
                }

                IIC_Read_NGByte(0,tmp, 8); //读地址0开始的8个字节
                for( i=0;i<8;i++ )
                {
                printf_usb( "%u\t",tmp );
                }                                                        //为什么串口助手看不到以上打印结果?
                                                                        //可能是USB查询方式,只有在回答查询的时候才输出?
               
               
                                               
                for(i=0; i<8; i++)  LED8 = tmp & 0x0f; //数码管打印8个字节
               
               
               
       
    //<<AICUBE_USER_MAIN_CODE_END>>

    while (1)
    {.................


如果我不延时,只是判断有没有准备好,也没什么用,没准备好也没有等待动作,
感觉反正USB没准备好,就直接执行下一段程序了

点评

你的代码和原文逻辑上不一样 while(x); {} 和 while(x){ }; 是两个意思,这个;的位置决定了{}代码块作用域。 遇到什么新问题需要追加这样的代码?将printf改为阻塞模式? 可以先printf再while(bUsbInBusy == 1);  详情 回复 发表于 3 天前
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-11-3 02:58 , Processed in 0.148771 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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