[STM32F4]

STM32F4Cube库CDC类试用手记(含USB全速/高速和VC测试程序)

[复制链接]
楼主: 碧云天书
手机看帖
扫描二维码
随时随地手机跟帖
xmetoo| | 2015-3-27 09:17 | 显示全部楼层
好**~~~~~~~~~~~~~··

使用特权

评论回复
foxglove| | 2015-3-27 14:48 | 显示全部楼层
STM32F4Cube库CDC类

使用特权

评论回复
hzuniversity| | 2015-4-12 01:08 | 显示全部楼层
程序下载后无法打开,显示数据损坏

使用特权

评论回复
搞IT的| | 2015-4-12 11:03 | 显示全部楼层
谢谢楼主分享。全面细致,深入剖析,透彻。

使用特权

评论回复
zxt520506| | 2015-4-15 15:09 | 显示全部楼层
楼主你好,我想问一下STM32F407设置双缓冲时要修改了那些部分呢?这个例子中OUT传输时的双缓冲设置改了哪些位置?:)

使用特权

评论回复
碧云天书|  楼主 | 2015-4-17 20:24 | 显示全部楼层
本帖最后由 碧云天书 于 2015-4-17 20:34 编辑
zxt520506 发表于 2015-4-15 15:09
楼主你好,我想问一下STM32F407设置双缓冲时要修改了那些部分呢?这个例子中OUT传输时的双缓冲设置改了哪些 ...

这个例子还没有做USB双缓冲的处理。等以后做出来了再更新。

使用特权

评论回复
Panevila| | 2015-4-18 14:36 | 显示全部楼层
求救大神 用STM32F4 HSUSB的时候 遇到问题了 用的是
https://bbs.21ic.com/icview-811704-1-1.html 这篇帖子的程序和配套上位机程序,发现发送一段数据,比如10000个,如果都是0,或者都是一样的数据,没有问题,如果是无规律的数据,就会卡死 不知您遇到过这样的问题吗
本人QQ 387756953 希望交流一下,谢谢了

使用特权

评论回复
碧云天书|  楼主 | 2015-4-18 20:50 | 显示全部楼层
Panevila 发表于 2015-4-18 14:36
求救大神 用STM32F4 HSUSB的时候 遇到问题了 用的是
https://bbs.21ic.com/icview-811704-1-1.html 这篇帖子 ...

这个例子程序有点缺陷,当时发布的时候没注意——这个例子的OUT传输没有做流量控制,PC会以最快的速度向STM32发送数据,如果STM32没来得及处理这些数据,那数据就丢了。
我用过逐渐增大的数据测试IN传输,传了几十兆,没发现问题。OUT传输测试的比较简单,只校验过几十K的数据块(因此没发现漏掉了OUT流量控制)。
你是在IN传输卡死,还是在OUT传输卡死?

使用特权

评论回复
Panevila| | 2015-4-19 14:26 | 显示全部楼层
本帖最后由 Panevila 于 2015-4-20 09:51 编辑
碧云天书 发表于 2015-4-18 20:50
这个例子程序有点缺陷,当时发布的时候没注意——这个例子的OUT传输没有做流量控制,PC会以最快的速度向S ...

大神居然回复了 太感动了 上次写的比较粗略哈

我是IN卡死的
是这样的,在每次发的buffer大小都是一样的的情况下,比如说都是 Data[2400]。如果我发送之前不动这个buffer(那么里面就都是0),或者赋值成一样的数据(比如全是0x22),发送和接收不会有任何问题。但如果是无规律的数(比如说采集来的数据)。那么,一旦这些数多于400个,IN就经常会卡死。如果多于2000个基本就发不出去了。Bushound提示babble detected 。 再发就会卡死。而且在卡死之后,STM32还可以接受OUT数据。。。。就是再也发不出去IN了,一发IN指令上位机程序就会死机,复位后才能解决这问题,或者关了EP再开然后重新插拔才行

比如就用的您原版的程序,把下面这段代码(目的在往buffer里填一些没啥规律的数)放在初始化结束后,或者while主循环之前的任何一个地方。其它地方不变,这样一来,测试发送还是正常,但一点接收数据,就会卡死了..st官方驱动测试的,只不过我用的Discovery,F407的,改了几个管脚(PH4,PI11改成了PC3,PC2)。也是用的USB3300PHY。赋值越多,出问题几率越大。。用FS的时候不会卡死,但无规律数据多了同样会被拖慢。好像传输效率和buffer里装什么东西还有关系。。
for(int i=0;i<256;i++)
{
       SendData [i ]= i;
       SendData[i+255] = i;
       SendData[i+511] = i;
       SendData[i+767] = i;       SendData[i+1023] = i;
      SendData[i+1279] = i;
       SendData[i+1535] = i;
       SendData[i+1791] = i;
}

而且卡死之后只能重启下位机才能解决。不知道是不是就我这里这样。。您看看您那是不是也有类似情况。。

一开始入门的时候学习了您的程序,那时候测试IN的时候,发之前没有往buffer里装东西,没有任何问题。
后来要做高速数据采集,我就在你的程序基础上做了一定修改,自己写了驱动和上位机程序。主要是去掉了while的部分,改了下结构,USB底层的东西没动。

测试了下成功了,当时是buffer里所有的数都没动(就是都是0)或者是相同的数(比如说0x22),也有的时候是前10个buffer里放几个数,看PC有没有接收到,一次发20480个字节,这样折腾都没任何问题。

这两天加了采集的数据之后,发现一次发送300字节以下的数据一般不会有问题,但覆盖的数据量一旦大于400,就会卡死。但不管死不死机,我每次发送的数据量都是一样的!不死机的时候,Bushound也能测出速度。我以为只是我程序有问题,于是又拿了您的原版一套程序和st官方驱动试了下,发现也是一样的情况,往里面赋没有什么规律的值,一旦数量多了,就会死机。不赋值就没事。。

后来我怀疑供电不足,换了个2A的电源,还是一样的结果。。
又做了一些试验,发现在一些接近临界的情况,比如如果给480个值,采了几次没问题,试了下100毫秒一次采很久没问题,20毫秒一采一般能**个1分钟;720个值的时候,100毫秒采几次就卡死了,1秒一次基本没问题。但是一旦放的不同的数多于1000,基本多慢也无法成功了。这些试验还是一样,每次发送都是发送那2400个buffer的内容。。只不过是里面填的数不一样。。困惑的就是从没听说过传输成功率还和内容有关的。。。这样的话算起来目前也就24K的速度顶天了。。刚刚又试了下,用FS没有这问题。。

希望大神能提提想法哈,最好能试一下是不是我自己的问题。。
我 qq 387756953 希望能得到指点哈














使用特权

评论回复
碧云天书|  楼主 | 2015-4-21 19:23 | 显示全部楼层
Panevila 发表于 2015-4-19 14:26
大神居然回复了 太感动了 上次写的比较粗略哈

我是IN卡死的

虚拟串口使用的是Bulk传输,是保证无错传输的,所以跟传输的内容无关。
我按你说的加了一段代码在主循环中,没有发现你说的问题。结果见下图。

CDC类传输

CDC类传输

建议你检查一下硬件连接是否有问题。换板、换线、换PC。你描述的现象有点像是硬件连接不可靠。一种可能是主机多次询问设备而得不到应答的时候,把相应的设备挂起了。

使用特权

评论回复
zh113214| | 2015-4-21 20:25 | 显示全部楼层
太牛叉了,学习了!!!

使用特权

评论回复
Panevila| | 2015-4-22 07:56 | 显示全部楼层
本帖最后由 Panevila 于 2015-4-22 08:10 编辑
碧云天书 发表于 2015-4-21 19:23
虚拟串口使用的是Bulk传输,是保证无错传输的,所以跟传输的内容无关。
我按你说的加了一段代码在主循环 ...

感谢大神帮忙测试,这下就排除软件问题了! 谢谢,真的谢谢大神的测试的板子是把CPU和USB3300做成一块PCB了么? 我现在还在用杜邦线。估计是这里的问题吧。。

使用特权

评论回复
zxt520506| | 2015-4-22 09:51 | 显示全部楼层
碧云天书 发表于 2015-4-21 19:23
虚拟串口使用的是Bulk传输,是保证无错传输的,所以跟传输的内容无关。
我按你说的加了一段代码在主循环 ...

楼主,测试的速度好高,我的测了只有10几M速度····为什么呢

使用特权

评论回复
yedongguo| | 2015-4-24 20:30 | 显示全部楼层
我也在使用,发现一个问题,多次插拔usb接口后,发送失败,一直是忙,抓包后发现是 xact error  这个错误,不知什么原因

使用特权

评论回复
碧云天书|  楼主 | 2015-4-25 22:51 | 显示全部楼层
Panevila 发表于 2015-4-22 07:56
感谢大神帮忙测试,这下就排除软件问题了! 谢谢,真的谢谢大神的测试的板子是把CPU和USB3300做成一块PCB ...

嗯,可能跟这个问题有关。如果不差钱,整个USB协议分析仪回来抓些包,会对加速开发有帮助。如果是数据传输过程发生错误,就能看到CRC校验错误。

使用特权

评论回复
碧云天书|  楼主 | 2015-4-25 23:01 | 显示全部楼层
zxt520506 发表于 2015-4-22 09:51
楼主,测试的速度好高,我的测了只有10几M速度····为什么呢

速度跟测试的环境有很大关系。我的PC里插了一块PCIe-USB3.0转接卡,卡上外接的USB3.0 Hub上只挂了这一个STM32虚拟串口设备,所以这个设备就能够占用所有的带宽。如果是USB2.0的Hub,并且挂了多个设备,那么系统就可能会为那些设备预留带宽,结果导致谁都快不起来。

使用特权

评论回复
碧云天书|  楼主 | 2015-4-25 23:12 | 显示全部楼层
yedongguo 发表于 2015-4-24 20:30
我也在使用,发现一个问题,多次插拔usb接口后,发送失败,一直是忙,抓包后发现是 xact error  这个错误, ...

没有遇到过,不是很清楚什么情况。

使用特权

评论回复
734774645| | 2015-4-25 23:26 | 显示全部楼层
这个库的说明文档已经默认读者熟知USB规范了,所以在阅读和使用HAL库之前,最好先读一下USB规范
谢谢楼主

使用特权

评论回复
周董| | 2015-4-26 12:24 | 显示全部楼层
好贴 必须得顶!!!

使用特权

评论回复
hqtdzgs| | 2015-4-30 08:46 | 显示全部楼层
好,正在搞USB这一块,学习一下。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则