OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3533|回复: 7

USB虚拟串口可接收不能发送求助

[复制链接]

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
发表于 2018-5-8 12:39:00 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 孟亮 于 2018-5-8 12:54 编辑

自己改的组合串口,如果不在
USB_Port_Set(ENABLE);    //USB再次连接
USB_Interrupts_Config();   //USB中断设置
Set_USBClock();      //USB时钟启用
USB_Init();       //USB开启

// USB_Send_Data(0xC0); 这个位置增加一个随便发送数据的命令,
while(1)
……

再后面的while里对我发送数据的应答 USB_Send_Data(0xC0); 就会发不出东西来。再怎么发送请求应答也是无应答,但是能接收到有效数据,也就是我如果控制某个LED闪烁是有反应的。难道这个USB发送有休眠?。。。
而原子的USB转串口例程就不存在这个问题,求指点。

最佳答案

查看完整内容[请看2#楼]

找到原因了,但是依旧需要大神指点。 目前发的原因如下:我自己定义的CDC的bulk是dp5收dp5发,当改为5发4收或者5发1收就可以正常工作。为验证现象非小概率事件,将官方USB-CDC例程和原子的USB-com例程,收发端点都改为相同端点时,发生同样现象(初始化USB后不在3.5秒内发送任意数据,就会导致后面程序中无法发送;只要3.5秒内发送过任意数据,后面程序不论延迟多久发送,都正常工作。)官方例程不采用同一端点收发估计也是发现了 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
 楼主| 发表于 2018-5-8 12:39:01 | 显示全部楼层
找到原因了,但是依旧需要大神指点。
目前发的原因如下:我自己定义的CDC的bulk是dp5收dp5发,当改为5发4收或者5发1收就可以正常工作。为验证现象非小概率事件,将官方USB-CDC例程和原子的USB-com例程,收发端点都改为相同端点时,发生同样现象(初始化USB后不在3.5秒内发送任意数据,就会导致后面程序中无法发送;只要3.5秒内发送过任意数据,后面程序不论延迟多久发送,都正常工作。)官方例程不采用同一端点收发估计也是发现了类似现象,而使用1收2中断3发。
所以需要USB大神指点一下该如何设置可以解决同一端点收发,发送卡住问题。

同时在此解答分享一下阅读CDC代码的得到的一些附加内容,前些天有人咨询USB串口的发送速度,1ms发64B觉得慢,这里其实官方例程和原子例程,这个串口发送频率是可以设定的,官方的默认5ms,原子的好像改为了1ms,但是影响发送速度的不是这个握手频率,而是后续的发送函数,其中发送函数由两个函数组成,一个是握手后的第一次发送函数 void Handle_USBAsynchXfer (void) 【hw_config.c】,然后在发送端点回调函数void EP1_IN_Callback (void)【usb_endp.c】中继续补发,而这两个函数中的发送函数,会按照64一次再64一次的方式发送全部数据,而这个发送缓冲在#define USART_RX_DATA_SIZE   2048【hw_config.h】中设置,并且如果在间隔的5ms或1ms内没有发送完全,则会重复调用回调函数继续发送。因此如果需要发送数据量大,则可以适当调高发送缓冲大小,极限速度尚未测试。
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
 楼主| 发表于 2018-5-8 12:46:16 | 显示全部楼层
再补充点,那个随意发送和上面初始化之间好像间隔大于3500ms就会使后续的发送无效。小于这个时间,后续的发送就会正常。但是也是会在第一次发送时,把那个随意发送的数据接收到。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-5-9 01:43:38 | 显示全部楼层
直接下载我们代码到你板子上,一般都可以用,只要型号相同。
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
 楼主| 发表于 2018-5-9 07:14:33 来自手机 | 显示全部楼层
正点原子 发表于 2018-5-9 01:43
直接下载我们代码到你板子上,一般都可以用,只要型号相同。

原子大侠的代码是正常的,我自己扩充的cdc+msd出现这个问题…昨天缩减代码,已经正常了,今天再对比下,找找原因所在
回复

使用道具 举报

10

主题

196

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
390
金钱
390
注册时间
2018-3-20
在线时间
80 小时
 楼主| 发表于 2018-5-9 14:00:30 | 显示全部楼层
懒得动用ZET6了,C8T6在增大USART_RX_DATA_SIZE之后,用虚拟串口1秒内连续发数据,串口助手收到100,000 Bytes,如果再增大,应该还能更快,这个速度应该够用了吧。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-5-10 01:31:49 | 显示全部楼层
孟亮 发表于 2018-5-9 14:00
懒得动用ZET6了,C8T6在增大USART_RX_DATA_SIZE之后,用虚拟串口1秒内连续发数据,串口助手收到100,000 By ...

100K字节每秒,可以了吧
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

10

主题

32

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-8-7
在线时间
15 小时
发表于 2018-6-25 19:55:48 | 显示全部楼层
正点原子 发表于 2018-5-9 01:43
直接下载我们代码到你板子上,一般都可以用,只要型号相同。

原子的代码里面没有USB通讯的代码啊
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 09:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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