【问题标题】:stm32cube, usb host, hid mouse/keyboardstm32cube、usb主机、hid鼠标/键盘
【发布时间】: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;

其余代码不变。就像我在它检测到连接之前所说的那样,如果它是鼠标、键盘或未知设备就好了。我就是无法让它交流

【问题讨论】:

    标签: usb host hid stm32f4


    【解决方案1】:

    Cube 有问题,编码方式很奇怪,而且没有很好的文档记录。

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

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

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

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

    USB OTG FS, SDIO and RNG Clock =  PLL_VCO / PLLQ
    PLL_VCO = (HSE_VALUE / PLL_M) * PLL_N
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多