{"id":442,"date":"2017-11-24T23:30:56","date_gmt":"2017-11-24T22:30:56","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=442"},"modified":"2017-12-30T19:37:16","modified_gmt":"2017-12-30T18:37:16","slug":"56-usb_hid_host-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/56-usb_hid_host-library-stm32f4\/","title":{"rendered":"56-USB_HID_HOST-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/55-timer-library-stm32f4\/\" title=\"55-Timer-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 55-Timer-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/57-virtuelle_eeprom-library-stm32f4\/\" title=\"57-Virtuelle_EEprom-Library (STM32F4)\">57-Virtuelle_EEprom-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Mit dieser Library kann eine USB-Maus oder eine USB-Tastatur am\u00a0USB-OTG-Port vom Discovery-Modul betrieben werden.<\/p>\n<p>Die Library hat vier Funktionen :<br \/>\n1. Eine \u201cInit-Funktion\u201d<br \/>\nDie muss beim start einmal aufgerufen werden.<\/p>\n<p>2. Die \u201cHOST_Do-Funktion\u201d<br \/>\nDiese muss zyklisch, am besten in der while(1) aufgerufen werden. Sie liefert den Status vom USB-Device zur\u00fcck. Dieser Status muss ausgewertet werden und erst wenn ein USB-Device (Mouse oder Keyboard) erkannt wurde, darf auf das Device zugegriffen werden.<\/p>\n<p>3. Die \u201cGetKey-Funktion\u201d liefert (wenn eine USB-Tastatur angeschlossen ist) den Ascii-Code der gedr\u00fcckten Taste zur\u00fcck (bzw. 0 wenn keine Taste gedr\u00fcckt ist)<\/p>\n<p>4. Die \u201cGetMouse-Funktion\u201d liefert (wenn eine USB-Maus angeschlossen ist) eine \u201c1\u2033 zur\u00fcck, wenn neue Maus-Daten vorhanden sind, ansonsten eine \u201c0\u2033. Die Mausdaten stehen in der Struktur \u201cUSB_MOUSE_DATA\u201d<\/p>\n<p>Hinweis : bei mir kommt es ab und zu vor, das nach dem einstecken von einem Device, dieses nicht erkannt wird (Status = \u201cUSB_HID_DEV_NOT_SUPPORTED\u201d). Ein abziehen und erneutes einstecken bringt dann nichts mehr, es muss ein Hardware Reset ausgel\u00f6st werden !! -&gt; keine Ahnung was das ist, falls da jemand Fehler suchen will \u2026viel Spass.<\/p>\n<p><span style=\"text-decoration: underline;\">USB-Tastatur :<\/span><br \/>\nes wird nur das <span style=\"text-decoration: underline;\">dr\u00fccken<\/span> einer Taste erkannt, eine gedr\u00fcckt gehaltene Taste l\u00f6st kein neues event aus (Tasten repeat funktioniert also nicht)<\/p>\n<p><span style=\"text-decoration: underline;\">USB-Maus :<\/span><br \/>\nein Mausrad wird nicht unterst\u00fctzt<br \/>\ndie Grenzen der Maus-Koordinaten k\u00f6nnen in einem H-File eingestellt werden<br \/>\n(im Moment 320 x 240)<\/p>\n<p><strong>Benutzte Pins :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">PA9   -&gt; USB_OTG_VBUS\r\nPA10  -&gt; USB_OTG_ID\r\nPA11  -&gt; USB_OTG_DM\r\nPA12  -&gt; USB_OTG_DP\r\nPC0   -&gt; USB_VBUS_Enable<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO, MISC\r\nBenutzte Librarys : keine<\/pre>\n<p><strong>Enumerationen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum {\r\n  USB_HID_HOST_NO_INIT =0,   \/\/ USB-Schnittstelle noch nicht initialisiert\r\n  USB_HID_DEV_DETACHED,      \/\/ kein Device angeschlossen\r\n  USB_HID_SPEED_OK,          \/\/ USB-Speed wird unterst\u00fctzt\r\n  USB_HID_SPEED_ERROR,       \/\/ USB-Speed wird nicht unterst\u00fctzt\r\n  USB_HID_DEV_NOT_SUPPORTED, \/\/ Device wird nicht unters\u00fctzt\r\n  USB_HID_OVER_CURRENT,      \/\/ \u00dcberstrom erkannt\r\n  USB_HID_DEV_CONNECTED,     \/\/ Device verbunden noch nicht bereit\r\n  USB_HID_MOUSE_CONNECTED,   \/\/ Mouse verbunden und bereit\r\n  USB_HID_KEYBOARD_CONNECTED \/\/ Tastatur verbunden und bereit\r\n}USB_HID_HOST_STATUS_t;<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_USB_HID_HOST_Init(void);                \/\/ zum init des USB-Host\r\nUSB_HID_HOST_STATUS_t UB_USB_HID_HOST_Do(void); \/\/ zum check vom Device-Status\r\nuint8_t UB_USB_HID_HOST_GetKey(void);           \/\/ zum auslesen der Keyboard-Daten\r\nuint8_t UB_USB_HID_HOST_GetMouse(void);         \/\/ zum auslesen der Maus-Daten<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 28.08.2013\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.4\r\n\/\/ GCC      : 4.7 2012q4\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der USB-HID-Host Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_led.h\"\r\n#include \"stm32_ub_usb_hid_host.h\"\r\n\r\n\/\/--------------------------------------------------------------\r\nvoid mouse_function(void)\r\n{\r\n  UB_Led_On(LED_ORANGE);\r\n  \/\/ Maus-Daten abfragen\r\n  UB_USB_HID_HOST_GetMouse();\r\n  \/\/ Gr\u00fcne LED mit linker Maustaste ein\/ausschalten\r\n  if(USB_MOUSE_DATA.btn_left==MOUSE_BTN_PRESSED) {\r\n    UB_Led_On(LED_GREEN); \/\/ gr\u00fcne LED einschalten\r\n  }\r\n  else {\r\n    UB_Led_Off(LED_GREEN); \/\/ gr\u00fcne LED ausschalten\r\n  }\r\n}\r\n\r\n\/\/--------------------------------------------------------------\r\nvoid key_function(void)\r\n{\r\n  uint8_t akt_key=0;\r\n\r\n  UB_Led_On(LED_BLUE);\r\n  \/\/ Keyboard-Daten abfragen\r\n  akt_key=UB_USB_HID_HOST_GetKey();\r\n  \/\/ Gr\u00fcne LED mit Tasten \"1\" und \"2\" ein\/auschalten\r\n  if(akt_key=='1') {\r\n    UB_Led_On(LED_GREEN); \/\/ gr\u00fcne LED einschalten\r\n  }\r\n  if(akt_key=='2') {\r\n    UB_Led_Off(LED_GREEN); \/\/ gr\u00fcne LED ausschalten\r\n  }\r\n}\r\n\r\n\/\/--------------------------------------------------------------\r\nint main(void)\r\n{\r\n  USB_HID_HOST_STATUS_t host_status;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ Init der LEDs\r\n  UB_Led_Init();\r\n\r\n  \/\/ Init vom USB-OTG-Port als HID-HOST\r\n  \/\/ (zum betreiben von USB-Mouse oder USB-Tastatur)\r\n  UB_USB_HID_HOST_Init();\r\n\r\n  while(1)\r\n  {\r\n    \/\/ pollen vom USB-Status\r\n    host_status=UB_USB_HID_HOST_Do();\r\n    if(host_status==USB_HID_MOUSE_CONNECTED) {\r\n      \/\/ wenn USB-Maus gefunden wurde\r\n      mouse_function();\r\n    }\r\n    else if(host_status==USB_HID_KEYBOARD_CONNECTED) {\r\n      \/\/ wenn USB-Keyboard gefunden wurde\r\n      key_function();\r\n    }\r\n    else if(host_status==USB_HID_DEV_NOT_SUPPORTED) {\r\n      \/\/ wenn Fehler beim USB-Device\r\n      UB_Led_On(LED_RED);\r\n    }\r\n    else {\r\n      \/\/ wenn kein USB-Device vorhanden\r\n      UB_Led_Off(LED_ORANGE);\r\n      UB_Led_Off(LED_BLUE);\r\n      UB_Led_Off(LED_GREEN);\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/08\/ub_stm32f4_usb_hid_host_v100.zip\">ub_stm32f4_usb_hid_host_v100<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/08\/Demo_56_USB_HID_HOST.zip\">Demo_56_USB_HID_HOST<\/a><\/p>\n<h3 id=\"comments-title\">2 Antworten auf <em>56-USB_HID_HOST-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-3801\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-3801\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/656bb93d7eea76ebd6d09c7b00a083d7?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Johnny Dreher<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">12. Juli 2015 um 21:45<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hello, I\u2019m trying to read a gamepad USB with a STM32F407 board. Can you help me?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<li id=\"li-comment-3807\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-3807\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/656bb93d7eea76ebd6d09c7b00a083d7?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Johnny Dreher<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">13. Juli 2015 um 01:10<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hello, I\u2019m trying to convert this library to read a gamepad, but I\u2019m realy confused. Can you help me?<br \/>\nThanks a lot.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Mit dieser Library kann eine USB-Maus oder eine USB-Tastatur am\u00a0USB-OTG-Port vom Discovery-Modul betrieben werden. Die Library hat vier Funktionen : 1. Eine \u201cInit-Funktion\u201d Die muss beim start einmal aufgerufen werden. 2. Die \u201cHOST_Do-Funktion\u201d Diese muss zyklisch, am besten in der &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/56-usb_hid_host-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":56,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[157,9,7,95,202,203],"class_list":["post-442","page","type-page","status-publish","hentry","category-stm32f4","tag-hid","tag-library","tag-stm32f4","tag-usb","tag-usb-maus","tag-usb-tastatur"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=442"}],"version-history":[{"count":3,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/442\/revisions"}],"predecessor-version":[{"id":1595,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/442\/revisions\/1595"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}