STM32
直播中

Arvinhw

10年用户 1023经验值
擅长:嵌入式技术
私信 关注
[问答]

USB复合设备MSC+CDC,CDC_Transmit_FS函数发送不正常的原因?

单独测试CDC、MSC功能均正常,实现MSC+CDC复合设备后,均可正常识别到,但CDC_Transmit_FS函数不正常,现象如下:
1、在主循环里调用CDC_Transmit_FS,串口调试助手接收不到数据。(多次尝试打开、关闭串口,打开起始会收到一些数据)
2、在接收中断中,调用CDC_Transmit_FS将收到的数据,发回给上位机正常
3、在接收中断中,设置接收数据标志,主循环中发送也正常
总结:CDC先收到数据,再发送可以;如果只是CDC_Transmit_FS发送数据  不行


回帖(1)

李娟

2024-3-13 17:26:27
可能的原因和解决方案如下:

1. 发送数据长度问题:检查发送的数据长度是否正确,确保发送的数据长度与接收方期望的数据长度一致。可以使用调试工具检查发送的数据长度。

2. 发送数据频率问题:如果发送数据的频率过高,可能会导致发送不正常。可以在发送数据之间添加适当的延迟,以确保数据发送的稳定性。

3. 中断冲突问题:检查是否存在中断冲突的情况。如果在接收中断中调用CDC_Transmit_FS函数,可能会与发送中断发生冲突,导致发送失败。可以尝试使用标志位来控制发送的时机,避免中断冲突。

4. 缓冲区溢出问题:检查发送缓冲区是否有足够的空间来存储要发送的数据。如果发送缓冲区已经满了,CDC_Transmit_FS函数可能会阻塞,导致发送失败。可以在发送之前检查缓冲区的剩余空间,并根据需要等待发送缓冲区中有足够的空间。

5. USB传输速度问题:某些USB设备只支持低速传输,如果数据量较大,可能会导致发送失败。可以尝试减少发送的数据量,或者使用更高速的USB设备。

总之,需要逐一排查可能导致发送失败的原因,并根据具体情况进行相应的调试和解决。
举报

更多回帖

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