单片机型号为CH552
请问下怎么能返回下发的数据啊。是用的HID符合设备
可以直接这样上发数据吗。
Ep3FLAG = 0;
for(i=0;i<64;i++)
Ep3Buffer[i]=i;
Enp3IntIn(64);
while(Ep3FLAG == 0);
然后这里不明白是什么意思
最后再请问下老大,有没有能上发单片机收到HID数据的例程啊,目前用那个HID复合设备的例程貌似下发数据不成功,不知道什么原因
单片机型号为CH552
请问下怎么能返回下发的数据啊。是用的HID符合设备
可以直接这样上发数据吗。
Ep3FLAG = 0;
for(i=0;i<64;i++)
Ep3Buffer[i]=i;
Enp3IntIn(64);
while(Ep3FLAG == 0);
然后这里不明白是什么意思
最后再请问下老大,有没有能上发单片机收到HID数据的例程啊,目前用那个HID复合设备的例程貌似下发数据不成功,不知道什么原因
第一个可以上传;
第二个作用是PC通过端点4下传的键鼠数据,通过协议解析然后分别赋值到键盘和鼠标上传的端点。
第二个 我理解的是PC下发数据到端点4(自定义HID设备),然后判断长度,再复制到键盘或者鼠标再上发到PC
为什么是从Ep0Buffer的第64字节开始呢,每次下发的只有64字节啊
然后我在端点4接受的那个地方串口打印调试,上位机下发数据,貌似都不成功,这个打印的东西也没出来,会不会是HID的报告描述符的问题啊
端点0和端点4定义的时候缓冲区是连在一起的,一共192字节,前64是端点0收发缓冲区,64-127是端点4 OUT,128-192是端点4 IN,具体你可以看CH554的头文件端点定义。
如果PC没有出现无法识别的设备,证明描述符就是OK的,有可能是你的下传软件的问题,你可以是其他的USB调试工具。
奥,谢谢,这个明白了。那端点4(自定义HID设备)要上发数据,得把数据装到Ep0Buffer[128]到Ep0Buffer[191]哈,那怎么让端点4上发数据呢
类似于上面的端点3,数据放到端点4发送缓冲区,然后设置端点响应方式ACK,。
唯一不同的是,需要在端点4的IN中断中手动翻转
谢谢老大解答,目前单片机上发是没问题的,测试了连续上发的话每次上发之间加了10ms的延时。您说的手动反转是加入了的。也在手册上找到这个了,端点4是没有自动翻转的。
目前我这边的问题是:上位机只能下发成功一次。现在写的功能是上位机下发什么,单片机就返回什么数据。
单片机上电,第一次能下发成功,且单片机回传了数据回来。再次发送就不行了,也用串口打印测试了主循环是还在运行的,最后删除了测试的代码,目前有问题的修改的代码如下:
中断里:
主函数的大循环里
这是上电第一次能发送和接收成功的
收到一包数据后,被设置NAK,以后就不收数据了。可以把这句话去掉,或者在主函数里面等发送完一包数据后,再把端点4接收设置为ACK。
感谢老大,可以了。谢谢谢谢。