关于USB-CDC连上电脑如果不开串口会有阻塞现象的疑问
在使用USB-CDC串口时,如果连电脑关闭CDC串口的情况下,程序会出现阻塞现象,大概是跑1S停0.5秒左右。不连接电脑重启后就没有该问题。请问大家是否有遇到类似情况,可有办法消除这种状况?谢谢。使用的擎天柱下的AICUBE配置的代码。见附件程序。
另外提一下,原来的程序USB-CDC时行时不行,把clock.c里面系统时钟分频函分提前到系统时钟选择函数前学感觉问是消失了,每次重启后都能正常进入USB-CDC功能。
另外,不停电下载不能用,不知道为什么。
1.连电脑关闭CDC串口的情况下,程序会出现阻塞现象,大概是跑1S停0.5秒左右
--这个没复现,当CDC未打开时,发送函数是有一定的超时时间,但是没发现有这么长
楼主如何测的,上传的程序里貌似没发现这部分测试代码
2.“把clock.c里面系统时钟分频函分提前到系统时钟选择函数前学感觉问是消失了”,以及“不停电下载不能用” 都能复现
--感觉问题集中在CLK_Init,此函数屏蔽后,不停电下载恢复正常,原因还得再看看
ercircle 发表于 2025-7-12 09:17
1.连电脑关闭CDC串口的情况下,程序会出现阻塞现象,大概是跑1S停0.5秒左右
--这个没复现,当CDC未打开时, ...
1. 阻塞的问题这个程序没写相关测试,在我其它程序里可以看到LEDSMG明显会黑一点时间,跑LED指示灯也可以看出来,是比较明显的。 昨晚我回去用8051U盒子用最新的AICUBE现象会复现。
2. 我怀疑是选用PLL的原因,昨晚我回去使不使用PLL就没这个问题,这个不用CLK_INIT()是一个道理,不初始化时钟就使用默认内部时钟。或许是PLL时钟或者是后面的选择电路哪里有问题导致的。我暂时没用USB-CDC功能了,用的UART,因为我更需要高速PLL时钟来带TFPU和MDU功能。暂时用link-1d代替不停电下载。希望能优化USB-CDC+PLL功能。 Forestspring 发表于 2025-7-12 11:15
1. 阻塞的问题这个程序没写相关测试,在我其它程序里可以看到LEDSMG明显会黑一点时间,跑LED指示灯也可以 ...
看最新版本AiCube更新说明已经修复PLL和自动下载问题
ercircle 发表于 2025-7-17 14:08
看最新版本AiCube更新说明已经修复PLL和自动下载问题
那太好了,赞!
另外,上次说那个阻塞的问题,经过更多的测试,我发现是运行printf_usb函数时会卡一下。供参考。
谢谢。 Forestspring 发表于 2025-7-17 15:57
那太好了,赞!
另外,上次说那个阻塞的问题,经过更多的测试,我发现是运行printf_usb函数时会卡一下。 ...
printf_usb函数是USB库内部做了超时处理,以免USB未连接主机无限等待。
可以在程序加逻辑判断,如长时间没主机消息就不再发送。
或者可以试下这个判断打开的函数,未打开跳过发送:
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=16911&pid=158205
ercircle 发表于 2025-7-17 16:24
printf_usb函数是USB库内部做了超时处理,以免USB未连接主机无限等待。
可以在程序加逻辑判断,如长时间 ...
好的,我去试试。谢谢。 ercircle 发表于 2025-7-17 16:24
printf_usb函数是USB库内部做了超时处理,以免USB未连接主机无限等待。
可以在程序加逻辑判断,如长时间 ...
我测试了那个代码,但是我用的是AI8051,所以更换了头文件和USB库,编译能通过但无法连接生成HEX文件。附件是完整代码,请参考。
Forestspring 发表于 2025-7-19 09:38
我测试了那个代码,但是我用的是AI8051,所以更换了头文件和USB库,编译能通过但无法连接生成HEX文件。附 ...
8h和32g的 USB库不通用的,只需要把函数拷贝到你的工程就行。
ercircle 发表于 2025-7-19 10:15
8h和32g的 USB库不通用的,只需要把函数拷贝到你的工程就行。
无法连接生成机器码。可能是函数定义不一样,你可以试试我那个代码,看看能否生成机器码。
页:
[1]
2