dongchengya 发表于 2024-3-8 10:27
这里有两个USB库,
旧一点的这个可以在 FressRTOS 中使用,但是会对其他线程有影响,
新一点的这个USB库...
我不喜欢使用LIB,LIB是通用库,冗余太多,损失速度同时占用内存太大
55337575 发表于 2024-3-8 11:08
我不喜欢使用LIB,LIB是通用库,冗余太多,损失速度同时占用内存太大
这个是 USB-CDC 的lib 库,自己写这个USB库 对与大部分开发者来时真是太难了哦
55337575 发表于 2024-3-8 11:08
我不喜欢使用LIB,LIB是通用库,冗余太多,损失速度同时占用内存太大
我之前用STM32的时候 也和你一样,喜欢用寄存器写程序,
但是现在不同了,毕竟函数库 比较方便使用,还不容易遗漏没注意到的问题
USB不论HID还是CDC等等在驱动侧都一样的,使用他的例子改一下就好了,而且还没有模式限制
kingmacth 发表于 2023-6-8 14:09
我在不先接收的情况下直接使用printf会导致程序卡死。
priintf被卡死我遇到的是TI没有初始化后置1,要是使用USB_SendData()函数的化,前边需要加一个条件if(!UsbInBusy)吧,USB有时候反应慢
你的那个帖子被删了?
请问解决了吗
李白白 发表于 2024-7-11 16:15
请问解决了吗
我解决了 就是需要把 stc_usb_cdc_32.LIB 手动添加到工程文件中 最和和main.c一块放 好查找
<p>cdc串口</p>
<p>请问问题解决了吗?同问</p>
电子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没准备好,就直接执行下一段程序了