STM32
直播中

旧念

9年用户 755经验值
擅长:可编程逻辑 电源/新能源 光电显示
私信 关注
[问答]

USB CDC无法使用中断传输的原因?


目前使用USB CDC 遇到无法使用中断传输的问题, 想请大家解惑

MCU  : STM32F439
使用STM32Cube MX 产生code
USB Full Speed - USB CDC device

CDC 端点有三个
- Bulk IN
- Bulk OUT
- Interrupt IN

Bulk IN/OUT 测试皆正常, 但无法读取到Interrupt IN 资料

[MCU]
在main whil loop中每隔一秒传送1 byte 资料

(1 )  [Bulk]
USBD_LL_Transmit( hUsbDeviceFS,CDC_IN_EP , data, 1)

(2) [Interrupt]
USBD_LL_Transmit( hUsbDeviceFS,CDC_CMD_EP, data, 1)

(1) OK
(2) FAIL


[测试方式]
PC端使用Bus hound 传送,接收

Bus Hound监测 USB 资料
可读到来自 MCU Bulk IN 的data
但Interrupt IN的资料完全无法收到


请问各位老司机 有人遇过类似的问题吗?
CDC 是否可以使用 interrupt transfer 的端点 传输资料呢?



回帖(1)

杨杰

2024-4-9 18:01:03
USB CDC中断传输无法使用的原因可能有以下几种:

1. 中断传输未正确配置:中断传输需要正确配置中断相关的寄存器和中断服务函数,确保中断传输的初始化和处理正常。

2. 中断传输超时:中断传输需要在一定时间内完成数据传输和确认,如果超时时间设置过短或者数据量过大,可能导致无法正常传输。

3. 端点号设置错误:在使用中断传输时,需要正确设置CDC的中断传输的端点号,确保FIFO和相关传输参数配置正确。

4. 缓冲区溢出:如果数据发送过快或者接收处理不及时,可能会导致中断传输的缓冲区溢出,从而无法继续接收或者发送数据。

针对你的具体问题,你可以按照以下步骤进行排查:

1. 确认中断配置是否正确,并检查中断服务函数的实现是否正确。

2. 检查中断传输的超时时间设置。

3. 确认中断传输的端点号是否设置正确,并检查FIFO和传输参数配置。

4. 检查缓冲区是否溢出,可以增加缓冲区大小或者减小数据传输速度来排除此问题。

另外,你可以检查USB CDC的文档、MCU手册以及STM32Cube MX的配置是否正确,并查看是否有其他错误导致中断传输无法正常工作。
举报

更多回帖

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