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

STM32F407 USB的IN端点只能是0x81么?

[复制链接]
灰泥鳅 提问时间:2024-5-8 14:51 / 已解决

使用STM32CubeMX生成的USB工程,默认的IN端点都是0x81。我尝试将它改为其它端口,比如0x82、0x83、0x84等都会导致数据上传失败。具体的现象是可以触发TXFE中断,但是无法触发XFRC中断。OUT端点可以适应其它值,比如0x02、0x03等。实验了HID和CDC工程都是一样,看上去像是这个MCU的IN端点只支持0x81。但是看了下Refernece Manual,只找到关于IN或OUT支持几个端点的说明。

image.png

收藏 评论7 发布时间:2024-5-8 14:51

举报

7个回答
灰泥鳅 最优答案 回答时间:2024-5-10 08:40:02

已解决。原因是FIFO没有分配好,这个是在usbd_conf.c的USBD_LL_Init()中操作的。同时要注意STM32CubeMX默认的FIFO分配过大,覆盖了后面的端点,应当按需分配,也就是描述符设置多大FIFO就分配多大。关键函数HAL_PCDEx_SetTxFiFo()。

xmshao 回答时间:2024-5-8 18:05:25
对于F407而言,除了0端点外,还分别有3个IN端点和3个OUT端点。你是可以增加IN端点的,比方0x82,0x83.在USBD_LL_Init()函数把总的端点数给出来,做好地址分配、FIFO分配、开启相应的端点等,把各个端点的表述符USBD_CDC_CfgDesc写清楚。可以参考下CDC的工程来修改。
灰泥鳅 回答时间:2024-5-9 08:43:50

xmshao 发表于 2024-5-8 18:05
对于F407而言,除了0端点外,还分别有3个IN端点和3个OUT端点。你是可以增加IN端点的,比方0x82,0x83.在USBD ...

CDC和HID设备我都尝试过,为了避免端点没有初始化,我还特地没有增加端点,只是修改STM32CubeMX生成的代码对应IN端点的宏,以确保不会影响端点的配置流程。从我OUT端点的修改有效来看,应当不是描述符配置问题。

灰泥鳅 回答时间:2024-5-9 17:03:18

问题已解决。参考资料:https://bbs.21ic.com/icview-1589200-1-1.html

image.png

需要注意的是,FIFO要和端点的缓存需求匹配。

灰泥鳅 回答时间:2024-5-9 17:05:06

问题已解决。

参考资料:https://bbs.21ic.com/icview-1589200-1-1.html

image.png

需要注意的是,FIFO要和端点的缓存大小一致。

xmshao 回答时间:2024-5-9 17:21:18
我这边用STM32F401开发板测试了。


你除了对端点号的宏值做修改外, 比方:


#define CDC_IN_EP                                   0x83U


有个地方还需要调整下,针对端点3.至于那个0x80大小你看情况。
其它地方,库函数结合宏定义都做了相应配置。


HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 3, 0x80);


我这边验证是没问题的。
xmshao 回答时间:2024-5-10 09:25:59

灰泥鳅 发表于 2024-5-9 08:43
CDC和HID设备我都尝试过,为了避免端点没有初始化,我还特地没有增加端点,只是修改STM32CubeMX生成 ...

[md]昨天我找F401开发板验证过了。估计是你FIFO配置方面的问题。

关于IN 端点FIFO配置的地方,要手动,目前不能简单跟着端点宏来做配置。

比方:HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 3, 0x80);

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版