【发布时间】:2017-02-18 03:34:35
【问题描述】:
我一直在尝试使用我的 stm32f4 发现与 USB 鼠标设置一些基本的 USB 通信。我的板子没有usb示例,所以我进去看看其他板子。
stm 的 Cube 库东西承诺易于开发,因此我生成了一个包含仅主机模式下的 USB_OTG_FS 和四个用于 LED 的 IO 引脚的立方体项目。 我查看了文件,似乎阅读鼠标按钮相当简单,但我无法让它工作。 如果我跑
devtype = USBH_HID_GetDeviceType(&hUsbHostFS);
它正确检测到设备。
USBH_HID_MouseInit(&hUsbHostFS)
返回 USBH_OK, 但无论我尝试什么
mouse=USBH_HID_GetMouseInfo(&hUsbHostFS);
始终为 NULL
文档中从未提及“USBH_HID_MouseInit”(DM00105256.pdf) 此外,只有 RTOS 示例使用它们。阅读 usb 主机独立示例,似乎与鼠标通信就像运行 GetDeviceType 和轮询 GetMouseInfo 一样简单,但我无法让它工作。
这是我添加的所有代码,在main while中执行
if(Appli_state == APPLICATION_READY){
switch(state)
{
case 0:
devtype = USBH_HID_GetDeviceType(&hUsbHostFS);
if(devtype == HID_MOUSE){
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,1);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,0);
state=1;
}
else if(devtype == HID_KEYBOARD){
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,0);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,1);
state=2;
}
else{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_14,0);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_12,0);
}
break;
case 1:
if(USBH_HID_MouseInit(&hUsbHostFS)==0){
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,1);
state=3;
}
else {
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,0);
state=0;
}
break;
case 3:
mouse=USBH_HID_GetMouseInfo(&hUsbHostFS);
if(mouse != NULL)HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,1);
else HAL_GPIO_WritePin(GPIOD,GPIO_PIN_13,0);
break;
default:
break;
}
}
if(Appli_state != APPLICATION_READY) state=0;
其余代码不变。就像我在它检测到连接之前所说的那样,如果它是鼠标、键盘或未知设备就好了。我就是无法让它交流
【问题讨论】: