stm32cube,usb主机,隐藏鼠标/键盘

时间:2016-10-09 16:42:09

标签: usb host hid stm32f4

我一直试图使用我的stm32f4 discvery与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,但我无法使其工作。

这是我添加的所有代码,它在主要执行时执行

 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;

其余代码不变。就像我之前说的,它检测到连接,如果它是鼠标,键盘或未知设备就好了。我只是无法与之沟通

1 个答案:

答案 0 :(得分:0)

多维数据集是错误的,以奇怪的方式编码,并没有很好的记录。

根据您拥有的实际电路板,您必须确保正确设置时钟(在system_stm32f4.c中)

使用基于stm32f407的版本(http://www.st.com/en/evaluation-tools/stm32f4discovery.html),您应该使用以下设置:

/* Order of console.log outputs demonstrating asynchronous calls */
    loadImg: false
    panels: undefined
    callback: true
/* After the code has run, clicking another button does show result */
    next: true
    prev: true

USB OTG FS需要48MHz时钟。这是方程式:

HSE = 8000000
PLL_M = 8
PLL_Q = 7
PLL_N = 336
PLL_P = 4