大家好,我试图在STM32的USB平台上建立一个USB Composite device(组合设备)的应用。该组合设备是HID+Audio device。我的软件平台是ST的USB库UM0424(V
现在我已经在Audio Speaker这个例程中修改好了描述符,并使得它在XP系统下枚举成功了,如下图所示。
图中两个USB人体学设备中的一个就是添加进去的HID类设备,USB Audio device就是USB库原本有的音频设备,但是我修改成了USB MIC的应用(原有的库是USB Speaker的功能)。我现在HID的功能就是该USB库中提供的JoystickMouse的功能,实现鼠标的移动的功能。
现在我遇到的情况是,我插入设备以后,设备枚举成功提示硬件已安装并可以使用后,我首先不打开PC中的录音设备,首先测试HID的功能,拨动我的开发板上的摇杆,鼠标的箭头能够正常移动。但是一旦我打开PC中的录音设备,Joystick的鼠标的功能就工作不正常了,但是这个时候MIC的音频流传输是正常的。鼠标的工作不正常体现在PC收到的HID report数据是混乱的,与我的摇杆按键毫无关系,以至于鼠标会有很多误操作。
我也试图去自己解决这个问题,刚开始的时候我以为是USB的Isochronous传输打断了USB的Interrupt传输,因为Isochronous传输的中断优先级要高于Interrupter的传输的中断,所以我就把两个传输的中断优先级设成一样,然而我得到的结果是一样的。
后来我怀疑音频的Isochronous传输端点的FIFO与HID的Interrupter传输端点的FIFO有重叠,我计算了我在程序中设置的两个端点的缓冲区PMA地址与大小,我设置的地址确实没有重叠。并且ST提供的STM32F10xxx的参考手册上说,设置好了缓冲区地址与大小的端点,在IN传输和OUT传输的过程中是不会影响别的端点的缓冲区的内容的。
我现在已经想不到解决办法了,我已经被这个问题卡了三天了。请大家帮帮我吧,我这个课题比较紧,没几天就得交工了。谢谢了!