STM32
直播中

李杰

7年用户 1335经验值
私信 关注
[问答]

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

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




回帖(2)

秦涌安

2024-5-30 14:12:45
对于F407而言,除了0端点外,还分别有3个IN端点和3个OUT端点。你是可以增加IN端点的,比方0x82,0x83.在USBD_LL_Init()函数把总的端点数给出来,做好地址分配、FIFO分配、开启相应的端点等,把各个端点的表述符USBD_CDC_CfgDesc写清楚。可以参考下CDC的工程来修改。 
举报

李星童

2024-5-30 16:20:17
STM32F407的USB IN端点并不一定只能是0x81。实际上,STM32F407支持多个IN和OUT端点。在STM32CubeMX中,IN端点默认设置为0x81,但这并不意味着它不能使用其他值。以下是一些建议来解决您遇到的问题:

1. 确保您正确配置了USB端点。在STM32CubeMX中,您可以在“配置USB核心”选项卡中设置端点。请确保您选择了正确的传输类型(例如,控制、等时、中断或批量)并分配了正确的端点地址。

2. 检查您的USB设备描述符。在您的USB设备描述符中,确保您正确地定义了端点的数量和类型。例如,如果您想要使用0x82作为IN端点,请确保在设备描述符中添加了一个等时传输类型的端点,其地址为0x82。

3. 确保您的USB类驱动程序支持您选择的端点地址。在某些情况下,类驱动程序可能期望特定的端点地址。如果您更改了端点地址,可能需要相应地更新类驱动程序。

4. 检查您的中断处理函数。确保您的中断处理函数正确地处理了TXFE和XFRC中断。如果TXFE中断被触发,但XFRC中断没有被触发,这可能意味着数据传输没有完成。请检查您的中断处理函数,确保在传输完成后正确地清除中断标志。

5. 使用USB协议分析器或逻辑分析仪来检查USB通信。这可以帮助您确定问题是否出在硬件上,还是软件上。

总之,STM32F407的IN端点不仅限于0x81。请确保您正确配置了端点,并检查您的设备描述符、类驱动程序和中断处理函数。如果问题仍然存在,请尝试使用USB协议分析器或逻辑分析仪来进一步诊断问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分