谢谢__STM32__朋友的回复:)
但是上位机是不能修改的,因为要与原来的产品兼容,只升级硬件,软件不用作任何更改。所以你说的两种方式,都不可行。
不知道原来的产品是如何做的?(没有原始资料)
一个正常的通讯流程是这样的:
1,CTL(SET_REPORT)
2, DO(上位机发下来的命令)
3,CTL(GET_REPORT)
4,DI(回应命令)
5,CTL(SET_REPORT)
6,DO(上位机发下来的命令)
7,CTL(GET_REPORT)
8,DI(回应命令)
....
....
可以看出,1234和5678分别是一组完整的“问-答”通讯。按照你的EDN博客提到一篇文章《以HID的SET REPORT为例说明如何使用STM32的USB库支持控制端点0》提到,在Process_Status_IN()里处理或设置一个标志,现在设置标志不可行(还没到主循环处理就已经回发了),直接把处理的函数放到这里,倒是能插进这个USB响应流程里了,只是因为此时还处于中断,感觉不是很妥。或者把整个USB的中断的内容放到大循环里(因为别的动作都是根据从USB接收到的命令进行的,没有自主动作的操作),检查状态然后去执行?
另外再请教一下:它个GetReport响应稍微慢一些都不行吗?不能发一个NAK或STALL暂停一下?(试过不行,不过可能也是流程没对)。另在“DataStageIn()”这个函数里,是不是已经是启动真正的发送了?转载 |