55337575 发表于 2024-3-8 11:08:54

dongchengya 发表于 2024-3-8 10:27
这里有两个USB库,
旧一点的这个可以在 FressRTOS 中使用,但是会对其他线程有影响,
新一点的这个USB库...

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

dongchengya 发表于 2024-3-8 11:13:04

55337575 发表于 2024-3-8 11:08
我不喜欢使用LIB,LIB是通用库,冗余太多,损失速度同时占用内存太大

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

dongchengya 发表于 2024-3-8 11:22:55

55337575 发表于 2024-3-8 11:08
我不喜欢使用LIB,LIB是通用库,冗余太多,损失速度同时占用内存太大

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

55337575 发表于 2024-3-8 11:29:36

USB不论HID还是CDC等等在驱动侧都一样的,使用他的例子改一下就好了,而且还没有模式限制

55337575 发表于 2024-3-8 12:33:16

kingmacth 发表于 2023-6-8 14:09
我在不先接收的情况下直接使用printf会导致程序卡死。

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

你的那个帖子被删了?

李白白 发表于 2024-7-11 16:15:02

请问解决了吗

李白白 发表于 2024-7-11 16:23:56

李白白 发表于 2024-7-11 16:15
请问解决了吗

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

ofela 发表于 2024-12-7 10:34:34

<p>cdc串口</p>

carysun 发表于 2024-12-11 18:04:28

<p>请问问题解决了吗?同问</p>

wuzhengmin 发表于 5 天前

电子DIY小家 发表于 2023-6-9 10:15
cdc串口发数据之前可以判断一下当前的usb状态,等他空闲了再发,实测这样一点问题没有,贼好用。




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


void main(void)
{
    //<<AICUBE_USER_MAIN_INITIAL_BEGIN>>
    // 在此添加用户主函数初始化代码
                u8 sm=1;   //因为打印1次说明未能顺利执行,只能先在主循环打印一次
                u8 i=0;
                u8tmp;
       
       
    //<<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没准备好,就直接执行下一段程序了
页: 1 2 3 [4] 5
查看完整版本: stc32g USB CDC 如何单纯的发数据