Forum: Mikrocontroller und Digitale Elektronik STM32F3 Discovery als USB Keyboard


von test_USB (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich will erreichen, dass mein STM32F3 Discovery Board als USB-Tastatur 
dient.

Über einen Taster will ich Signale wie z.B. die "Enter-Taste" 
verschicken.

Den Descriptor konnte ich bereits so einstellen und der Controller wird 
auch als HID Eingabe-Gerät erkannt.

Zudem ist eine "Sendefunktion" eingerichtet.

Das Projekt bearbeite ich mit Keil.

Im Anhang befinden sich die zugehörigen Projektdateien.

Nun zu meinem Problem:

Mit der Funktion: send_USB(uint8_t Button, uint8_t modKey)
übergebe ich jeweils die Taste die gesendet werden soll und zugleich ob 
z.B. die Umschalttaste gedrückt ist.
Zum senden der Entertaste sieht der Befehl dann so aus:

send_USB(btn_Enter, 0);

In der defines.h sind die Tastencodes definiert.

Mit folgendem Befehl wird der USB_report übertragen.

USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&usbHidReport, 
sizeof(usbHidReport));

Der Report setzt sich folgendermaßen zusammen:

1. Byte: die Funktions-ID, in diesem Fall für Keyboard = 0x01 (Maus wäre 
0x02)
2. Byte: Modificationbyte, (Umschalttaste usw.)
3. Byte Reserved
4-9. Bytes sind Buttons

In der send_USB sende ich zum einem den Report, dass die Taste (Enter = 
0x28) betätigt ist.
Der Report sieht so aus:
--> 01 00 00 28 00 00 00 00 00

In einem weiteren Befehl versende ich, dass die Taste wieder losgelassen 
wird. (Eine Funktion, dass bei längerer Betätigung des Tasters der 
Befehl öfter gesendet wird, wird nicht benötigt)

--> 01 00 00 00 00 00 00 00 00

wenn ich jeweils nach dem  Sende-Befehle ein HAL_Delay(100) einbaue 
funktioniert die Übertragung gut, jedoch gefällt mir die Lösung nicht.

Die gesendeten Packete kontrolliere ich mit dem "Device Monitoring 
Studio" (14 Tage Freeware) 
http://www.hhdsoftware.com/device-monitoring-studio

Wenn ich die Delay-Funktion weglasse, werden mehrer Packete versendet.
z.T. schleicht sich dann auch in Button[3] eine 0x01 ein (woher auch 
immer dieser Befehl kommt), sodass das Packet dann so
--> 01 00 00 28 00 01 00 00 00
oder so
--> 01 00 00 00 00 01 00 00 00
aussieht.
Dies sorgtr dafür, dass die gesendeten Tasten nicht mehr erkannt werden.

Im ST reference Manual 
(http://www.st.com/web/en/resource/technical/document/reference_manual/DM00043574.pdf) 
sind Register und Flags beschrieben, die eine erfolgreiche Übertragung 
normal signalisieren. (Ab Kapitel 32.6)

Meine Überlegung ist, dass ich diese verwenden könnte, um festzustellen, 
wann die Übertragung des ersten Packetes beendet und erfolgreich war. 
Und dann wird erst das zweite Packet geschickt, wobei ich hier wiederum 
warte bis die Übertragung erfolgreich war.

Habt ihr Ansätze wie das geht, oder sogar andere Ideen?
Bin um jeden Rat dankbar.

Gruß

von W.S. (Gast)


Lesenswert?

test_USB schrieb:
> Über einen Taster will ich Signale wie z.B. die "Enter-Taste"
> verschicken.

Ah ja. Und wo sind die übrigen Tasten?

Also, für so ein Projekt wie z.B. ein Barcode-Scanner, der sich als HID 
Eingabegerät ausgibt, hat man ja Verständnis, aber sowas? Was willst du 
damit bezwecken?

W.S.

von test_USB (Gast)


Lesenswert?

W.S. schrieb:
> test_USB schrieb:
>> Über einen Taster will ich Signale wie z.B. die "Enter-Taste"
>> verschicken.
>
> Ah ja. Und wo sind die übrigen Tasten?
>
> Also, für so ein Projekt wie z.B. ein Barcode-Scanner, der sich als HID
> Eingabegerät ausgibt, hat man ja Verständnis, aber sowas? Was willst du
> damit bezwecken?
>
> W.S.

Damit kann ich über jeden GPIO-Pin eine beliebige Taste oder 
Tastenkombination versenden. Zum Start reicht doch erst mal eine.

Dadurch schaffe ich mir eine variable Bedienoberfläche die über USB 
jeden PC steuern kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.