Custom Firmware für meine STM32-Maus
Entwicklung einer eigenen Firmware in C für meine selbst entworfene STM32-Computermaus.
Nachdem ich im Hardwareprojekt bereits die komplette Elektronik und Platine der Maus selbst entwickelt hatte, fehlte noch der entscheidende Teil: die Software, die aus der Hardware tatsächlich eine funktionierende Computermaus macht.
Die Firmware habe ich vollständig in C für den auf meiner Platine verbauten STM32-Mikrocontroller entwickelt.
Zu Beginn habe ich den Mikrocontroller mit den STM32-Tools von STMicroelectronics entsprechend meines eigenen PCB-Designs konfiguriert. In STM32CubeMX habe ich die zuvor beim Hardwaredesign festgelegten Pins den jeweiligen Funktionen zugeordnet und die benötigten Peripherieschnittstellen eingerichtet. Auf dieser Grundlage wurde anschließend die erste Codebasis für das Projekt generiert.
Von dort aus ging es an die eigentliche Firmwareentwicklung. Ich habe mich zunächst damit beschäftigt, wie eine Computermaus auf Firmwareebene funktioniert und wie die verschiedenen Hardwarekomponenten miteinander kommunizieren. Anschließend habe ich die benötigte Logik Schritt für Schritt selbst implementiert.
Die Firmware verbindet dabei die einzelnen Komponenten meiner Platine miteinander: Der STM32 verarbeitet die Daten des PMW3360-Bewegungssensors, erkennt Eingaben der linken, rechten und mittleren Maustaste, wertet das Mausrad und den DPI-Button aus und steuert die entsprechenden Funktionen der Maus. Die erfassten Eingaben werden anschließend vom Mikrocontroller so verarbeitet, dass sie vom angeschlossenen Computer als Mausbewegungen und Tasteneingaben erkannt werden können.
Für das Aufspielen und Testen der Firmware auf der eigenen Hardware nutze ich unter anderem den STM32CubeProgrammer.
Besonders spannend an diesem Projekt war für mich die direkte Verbindung zwischen Hardware und Software. Da ich die Platine selbst entwickelt hatte, musste sich die Firmware exakt an meinen eigenen Schaltplan, meine Pinbelegung und die verwendeten Komponenten anpassen. Fehler ließen sich dadurch nicht einfach nur einer Software- oder Hardwareseite zuordnen – häufig musste ich beide Ebenen gemeinsam betrachten und systematisch herausfinden, wo das Problem lag.