楼主能把你的收发逻辑流程画出来看看吧
感觉是你程序逻辑上有问题
usb库的代码写得有点抽象,有bug也应是错误使用引入的
从来没画过流程图...
我把流程再说一遍吧:
- 首先stm32接收到主机的一个特定OUT指令后,往TxFifo写入64字节的数据.
- 然后当主机IN指令后可以正确读出数据,这时stm32产生传输完成中断,并再次往TxFifo中放入64字节数据.
- 如果主机只想读取stm32的数据的话,只需要发送一次特定的OUT指令就可以了,之后可以随时的,任意的读取数据了.
但问题出来了:
1.在上面流程正常读取的情况下(用线程来不停的读取stm32的数据),主机再OUT一次就会造成stm32无响应(无IN中断,主机进入死循环(等待stm32的数据)).
2.若不用线程来读取数据,而采用自己点击一下按钮读取一次数据的方式的话,则出现以下问题.
- 主机连续发送多次OUT指令后,再IN指令,stm32无中断产生(但是主机这边不死机,也就是执行IN指令的函数有返回,但是数据不对),这时OUT指令正常(即stm32可以正确接收数据),但如果再点击一次IN指令,则主机死机(进入死循环等待stm32数据),stm32无中断产生.