[STM32L4] HAL_PCDEx_SetTxFiFo 与 FIFO 顺序相关问题

[复制链接]
9|0
地瓜patch 发表于 2026-9-1 20:44 | 显示全部楼层 |阅读模式
我在 STM32L476 的`USBD_LL_Init()`内部调用`HAL_PCDEx_SetTxFiFo()`。我附上了 USBTreeView 读取到的描述符结果,重点信息如下:

我的复合设备包含多个接口:
1 个 HID 接口
1 个中断 IN 端点 0x83
1 个应用自定义接口
1 个 Bulk IN 端点 0x84
1 个 Bulk OUT 端点 0x04
1 个中断 IN 端点 0x85
1 个同步(ISO)IN 端点 0x86
IAD 关联两个 CDC 接口
1 个 CDC 控制接口
1 个中断 IN 端点 0x82
1 个 CDC 数据接口
1 个 Bulk IN 端点 0x81
1 个 Bulk OUT 端点 0x01

我把 IAD 和 CDC 放在描述符的最后,这样可以避免部分串口驱动识别异常。但端点和 TX 缓冲区初始化的调用逻辑我拿不准,不确定自己配置是否正确。

请教`HAL_PCDEx_SetTxFiFo()`的第二个入参:是去掉方向位(& ~0x80)后的端点 ID?
还是按照描述符、接口出现的先后顺序编号?

这个参数到底代表什么?能否跳过某些 FIFO 不配置?最多可以配置多少个,配置 6 个会不会超出限制?

如果删掉自定义应用相关端点,CDC 可以正常工作;一旦添加这组端点,`CDC_Transmit_FS()`就无法执行:

if (hcdc->TxState != 0){
  return USBD_BUSY;
}
`TxState`***为忙。即便不加载任何 PC 端驱动、完全不操作其他端点,CDC 也会失效。我怀疑是`HAL_PCDEx_SetTxFiFo`的 TX 缓冲区配置错误。
我的配置代码:
HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40); /* Default control EP */

   HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x40); /* CDC bulk EP */

   HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 2, 0x10); /* CDC interrupt EP */

   HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 3, 0x10); /* HID interrupt EP */

   HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 4, 0x40); /* App bulk EP */

   HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 5, 0x40); /* App interrupt EP */

   HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 6, 0x40); /* App isochronous EP */

可能是这里出错了。我不清楚这个编号如何和实际端点绑定,也不确定是否挤占了 RX FIFO 空间。我看到有资料说 F4 系列只支持 0~5 号 FIFO,不确定 L4 是否同样有这个限制?

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

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

2990

主题

17957

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部
0