你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

F429-disco的VCP驱动问题

[复制链接]
watershade 提问时间:2015-6-4 11:50 /
最近使用f4cube V1.5开发VCP驱动,按照F429-Discovery板子的配置选择OTG-HS接口作为Device设备来用,选择CDC协议。修改完APP_RX_DATA_SIZE和APP_TX_DATA_SIZE为2048,添加LineCoding代码。可是连接到计算机上,装完驱动(VCP V1.4)之后显示错误代码10的故障。计算机业换过win764/32位的。所以估计是代码的错误,使用USB VIEW观测之后,效果如下:
Device Descriptor:
bcdUSB:             0x0200
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x40 (64)
idVendor:           0x0483 (STMicroelectronics)
idProduct:          0x5740
bcdDevice:          0x0200
iManufacturer:        0x01
0x0409: "STMicroelectronics"
iProduct:             0x02
0x0409: "STM32 Virtual ComPort"
iSerialNumber:        0x03
0x0409: "000000002B1A"
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed:     Full
Device Address:       0x03
Open Pipes:              0

Configuration Descriptor:
wTotalLength:       0x0043
bNumInterfaces:       0x02
bConfigurationValue:  0x01
iConfiguration:       0x00
bmAttributes:         0xC0 (Bus Powered Self Powered )
MaxPower:             0x32 (100 Ma)

Interface Descriptor:
bInterfaceNumber:     0x00
bAlternateSetting:    0x00
bNumEndpoints:        0x01
bInterfaceClass:      0x02
bInterfaceSubClass:   0x02
bInterfaceProtocol:   0x01
iInterface:           0x00

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 00 10 01

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 01 00 01

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x04
04 24 02 02

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 06 00 01

Endpoint Descriptor:
bEndpointAddress:     0x82  IN
Transfer Type:   Interrupt
wMaxPacketSize:     0x0008 (8)
bInterval:            0x10

Interface Descriptor:
bInterfaceNumber:     0x01
bAlternateSetting:    0x00
bNumEndpoints:        0x02
bInterfaceClass:      0x0A
bInterfaceSubClass:   0x00
bInterfaceProtocol:   0x00
iInterface:           0x00

Endpoint Descriptor:
bEndpointAddress:     0x01  OUT
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x81  IN
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

观察发现枚举应该没有问题,可是端点没有打开。不知何故?
收藏 评论24 发布时间:2015-6-4 11:50

举报

24个回答
watershade 回答时间:2015-6-4 15:43:20
creep 发表于 2015-6-4 14:26
我的F429使用的是标准库里面的USB CDC 驱动,比这个HAL好理解些,这个HAL的USB代码太复杂了 ...

又及:
关于cube和标准库的争辩由来已久。cube的好处是显而易见的:硬件免配置,用户可以将尽力用到应用上,而且熟悉了之后整个代码的结构还是相对简明的。但是标准库的好处也是不用言说的:代码结构非常简洁,不像cube同一个功能要封装几层,标准库很容易追踪到函数的实现。而且用户量庞大。
但是cube在另外一些方面也远远好于标准库,之前的标准库并不附带usb和freertos,当你使用stemwin的时候也要自己将其添加到工具中,但是cube想当一个百宝箱。
此外mbed的库叶挺不错,希望arm借助mbed能够将arm的变成标准化,今年年底应该可以看到mbed os。此外,谷歌新出的Brillo不知道是不是和M系列的CPU能搭上。
科技发展太快了,硬件工程师很累呀。希望能有办法只专注于应用,而非平台。
watershade 回答时间:2015-6-8 08:54:22
问题终于在上周五解决了,先说怎么解决的。
在usbd_conf.h中有两个宏:USBD_MAX_NUM_INTERFACES和USBD_MAX_NUM_CONFIGURATION。我将其值设置为2,问题顺利解决了。
这两个宏对应于CubeMX软件USB_DEVICE Configuration 配置卡里面Basic Parameters的头两项。
再说一下为什么要改这两项。在我用USB VIEW观察的时候我看到了两个接口。所以USBD_MAX_NUM_INTERFACES改为2是合理的。CDC类的确有两个Interface:第一个包含通讯端点,第二个包含两个数据端点。
但是为什么要将USBD_MAX_NUM_CONFIGURATION设置为2,我就不清楚,我只清楚的是:在usbd_ctlreq.c的函数USBD_SetConfig内部有if (cfgidx > USBD_MAX_NUM_CONFIGURATION ) 这句话。而cfgidx的含义是什么呐?我在追踪了一会发现这个值,可能是由setup阶段有关。

那么有谁能告诉我USBD_MAX_NUM_CONFIGURATION是什么意思。
creep 回答时间:2015-6-4 16:57:55
watershade 发表于 2015-6-4 15:43
又及:
关于cube和标准库的争辩由来已久。cube的好处是显而易见的:硬件免配置,用户可以将尽力用到应用 ...

HAL的结构的使用和Linux的做法很相似,将硬件层和应用层分离出来,这样的做法是很好的,但是适应的确需要个过程,比较标准库用了那么久了。
好像标准库也有USB的各种模式的驱动啊,我不知道你所指的没有USB是说哪方面?
mark0668 回答时间:2015-6-4 12:18:15
看下USB 驱动ID是否一样
lusonghua 回答时间:2015-6-4 12:22:04
学习学习,,,
watershade 回答时间:2015-6-4 13:31:13
最早就看过ID了,似乎不是。谢谢!
watershade 回答时间:2015-6-4 13:33:07
驱动里面的ID:
%DESCRIPTION%=DriverInstall,USB\VID_0483& PID_5740
和我用USB VIEW看到的一样。
无助呀,
莫林2020 回答时间:2015-6-4 13:52:40
可以学习
无力回天 回答时间:2015-6-4 13:54:15
xuexileafa 学习了
watershade 回答时间:2015-6-4 14:05:59
刚才我从一个国外网站上找到一段F429-Disco的例程 ,测试通过。
网站是: http://stm32f4-discovery.com/
我需要用usb view再观察一下,然后排查一下cube生成的代码还需要做什么工作。我看cube的那个um1734看了一两天,也没看明白流程。杯具呀!
下面是用usb view得出的数据:
Device Descriptor:
bcdUSB:             0x0200
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x40 (64)
idVendor:           0x0483 (STMicroelectronics)
idProduct:          0x5740
bcdDevice:          0x0200
iManufacturer:        0x01
0x0409: "STMicroelectronics"
iProduct:             0x02
0x0409: "STM32 Virtual ComPort in FS Mode"
iSerialNumber:        0x03
0x0409: "00000000050C"
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:     Full
Device Address:       0x03
Open Pipes:              3

Endpoint Descriptor:
bEndpointAddress:     0x82  IN
Transfer Type:   Interrupt
wMaxPacketSize:     0x0008 (8)
bInterval:            0x10

Endpoint Descriptor:
bEndpointAddress:     0x01  OUT
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x81  IN
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Configuration Descriptor:
wTotalLength:       0x0043
bNumInterfaces:       0x02
bConfigurationValue:  0x01
iConfiguration:       0x00
bmAttributes:         0xC0 (Bus Powered Self Powered )
MaxPower:             0x32 (100 Ma)

Interface Descriptor:
bInterfaceNumber:     0x00
bAlternateSetting:    0x00
bNumEndpoints:        0x01
bInterfaceClass:      0x02
bInterfaceSubClass:   0x02
bInterfaceProtocol:   0x01
iInterface:           0x00

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 00 10 01

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 01 00 01

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x04
04 24 02 02

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 06 00 01

Endpoint Descriptor:
bEndpointAddress:     0x82  IN
Transfer Type:   Interrupt
wMaxPacketSize:     0x0008 (8)
bInterval:            0x10

Interface Descriptor:
bInterfaceNumber:     0x01
bAlternateSetting:    0x00
bNumEndpoints:        0x02
bInterfaceClass:      0x0A
bInterfaceSubClass:   0x00
bInterfaceProtocol:   0x00
iInterface:           0x00

Endpoint Descriptor:
bEndpointAddress:     0x01  OUT
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x81  IN
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

顺便吐槽一下cube库中F4/429-discovery没有USB Device的例程,F4X9的例程似乎也不适用。
watershade 回答时间:2015-6-4 14:22:53
通过比较,发现枚举的数据和之前那个并无不同,唯一不同的是连接状态。设备在连上主机之后的枚举应该是完成的,但是为什么端点打不开呐?通过刚才烧写的那个程序显示,硬件是没有问题的。继续探测,能不能为cube库的usb做几节教程呐,高手们,哪怕是ppt也行。
creep 回答时间:2015-6-4 14:26:29
watershade 发表于 2015-6-4 14:22
通过比较,发现枚举的数据和之前那个并无不同,唯一不同的是连接状态。设备在连上主机之后的枚举应该是完成 ...

我的F429使用的是标准库里面的USB CDC 驱动,比这个HAL好理解些,这个HAL的USB代码太复杂了
watershade 回答时间:2015-6-4 14:38:04
creep 发表于 2015-6-4 14:26
我的F429使用的是标准库里面的USB CDC 驱动,比这个HAL好理解些,这个HAL的USB代码太复杂了 ...

嗯,我刚才在看我提到网站上的VCP,他用的就是标准库。
你好我好大家好! 回答时间:2015-6-4 15:53:05
学习了      
无力回天 回答时间:2015-6-4 16:05:01
还是要潜心研究
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版