modm (ausgesprochen wie „DFÜ-Modem“) ist eine Toolbox zum Erstellen benutzerdefinierter C++23-Bibliotheken, die auf Ihr eingebettetes Gerät zugeschnitten sind. modm generiert Startup-Code, HALs und deren Implementierungen, Kommunikationsprotokolle, Treiber für externe Geräte und BSPs in einem modularen, anpassbaren Prozess, den Sie genau an Ihre Bedürfnisse anpassen können.
Dieses Projekt verfügt außerdem über ein Diskussionsforum und einen technischen Blog zur Dokumentation größerer Designkonzepte.
modm ist für die harten Anforderungen des Eurobot-Wettbewerbs optimiert, bei dem unsere Roboter während der Spieldauer von 100 Sekunden zuverlässig und völlig autonom laufen müssen. Unsere Roboter enthalten viele verschiedene Mikrocontroller, einige davon ohne große Ressourcen, daher muss Modm eine Reihe unterschiedlicher Ziele erfüllen, wie z. B. kleine Codegröße bei geringem Speicherverbrauch, vorhersehbarer Programmablauf und extreme Portabilität.
Der Quellcode der Bibliothek ist als MPLv2 mit jedem externen Quellcode unter kompatiblen Lizenzen (BSD, Apache2, MIT) lizenziert. Fühlen Sie sich also frei, dieses Projekt zu forken und an Ihre Bedürfnisse anzupassen. Das Einzige, was wir von Ihnen verlangen, ist, Ihre Änderungen beizutragen, damit alle davon profitieren können.
Bitte klonen Sie modm rekursiv, Sie benötigen alle Submodule:
git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git
modm kann ein HAL für 3839 Geräte dieser Hersteller erstellen:
Hier ist eine Tabelle mit allen Gerätefamilien und den von ihnen unterstützten Peripherietreibern:
Beachten Sie, dass dies eine zusammenfassende Übersicht ist und Ihr spezifisches Gerät möglicherweise nicht über alle Peripheriegeräte in dieser Tabelle verfügt. Bitte entdecken Sie die Peripherietreiber von modm für Ihr spezifisches Gerät.
STM32 | SAM | RP | BEI | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Peripherie | C0 | F0 | F1 | F2 | F3 | F4 | F7 | G0 | G4 | H7 | L0 | L1 | L4 | L5 | U5 | D1x D2x DAx | D5x E5x | E7x S7x V7x | G5x | 20 | 90 | Mega | Winzig |
ADC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ |
DÜRFEN | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ✅ | ✕ | ✕ | ○ | ○ | ✕ |
Komparator | ✕ | ○ | ✕ | ✕ | ✅ | ✕ | ✕ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ |
DAC | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✕ | ✕ | ✕ | ○ | ✕ |
DMA | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✕ | ✅ | ✕ | ✕ | ✕ |
Ethernet | ✕ | ✕ | ○ | ○ | ✕ | ✅ | ✅ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
Externer Interrupt | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ |
Externer Speicher | ✕ | ✕ | ✅ | ✅ | ✕ | ✅ | ○ | ✕ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
GPIO | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Ich 2 C | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ✅ | ✅ |
Interner Flash | ○ | ○ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ✕ | ✕ |
IWDG | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
Zufallsgenerator | ✕ | ✕ | ✕ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
SPI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Systemuhr | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ |
Timer | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ |
UART | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ |
Eindeutige ID | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
USB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✕ | ✕ | ✕ |
Wir sind nur ein kleines Entwicklerteam und die Anzahl der Geräte, die wir in Hardware unterstützen und testen können, ist begrenzt. Eröffnen Sie eine Diskussion, um zu fragen, ob Ihr spezifisches Gerät standardmäßig unterstützt wird und wie Sie es ansonsten hinzufügen können.
Wir bieten für viele Entwicklungsboards sofort einsatzbereiten Support, einschließlich Dokumentation.
AL-AVREB-CAN | Arduino NANO | Arduino UNO | Schwarze Pille F103 |
Schwarze Pille F401 | Schwarze Pille F411 | Blaue Pille F103 | DEVEBOX-STM32F4XX |
DEVEBOX-STM32H750VB | DISCO-F051R8 | DISCO-F072RB | DISCO-F100RB |
DISCO-F303VC | DISCO-F401VC | DISCO-F407VG | DISCO-F411VE |
DISCO-F429ZI | DISCO-F469NI | DISCO-F746NG | DISCO-F769NI |
DISCO-L152RC | DISCO-L476VG | FEDER-M0 | FEDER-M4 |
FEDER-RP2040 | MEGA-2560-PRO | NUCLEO-C031C6 | NUCLEO-F031K6 |
NUCLEO-F042K6 | NUCLEO-F072RB | NUCLEO-F091RC | NUCLEO-F103RB |
NUCLEO-F303K8 | NUCLEO-F303RE | NUCLEO-F334R8 | NUCLEO-F401RE |
NUCLEO-F411RE | NUCLEO-F429ZI | NUCLEO-F439ZI | NUCLEO-F446RE |
NUCLEO-F446ZE | NUCLEO-F746ZG | NUCLEO-F767ZI | NUCLEO-G070RB |
NUCLEO-G071RB | NUCLEO-G431KB | NUCLEO-G431RB | NUCLEO-G474RE |
NUCLEO-H723ZG | NUCLEO-H743ZI | NUCLEO-L031K6 | NUCLEO-L053R8 |
NUCLEO-L152RE | NUCLEO-L432KC | NUCLEO-L452RE | NUCLEO-L476RG |
NUCLEO-L496ZG-P | NUCLEO-L552ZE-Q | NUCLEO-U575ZI-Q | OLIMEXINO-STM32 |
Raspberry Pi Pico | SAMD21-MINI | SAMD21-XPLAINED-PRO | SAME54-XPLAINED-PRO |
SAME70-XPLAINED | SAMG55-XPLAINED-PRO | SAMV71-XPLAINED-ULTRA | Smart Response XE |
STM32-F4VE | STM32F030-DEMO | THINGPLUS-RP2040 |
Wir haben auch eine Reihe völlig zielunabhängiger Treiber für externe Geräte, die über I 2 C, SPI, UART, BitBang usw. angeschlossen sind. Die meisten davon ermöglichen Ihnen auch Zugriff auf das gesamte Gerät, sodass Sie sie einfach für Ihre spezifischen Anforderungen konfigurieren können.
AD7280A | AD7928 | ADIS16470 | ADNS9800 | ADS101X | ADS7828 |
ADS7843 | ADS816x | AMS5915 | APA102 | AS5047 | AS5600 |
AT24MAC402 | SPI-Flash | BME280 | BMI088 | BMP085 | BNO055 |
CAT24AA | ZYKLUSZÄHLER | DRV832X | DS1302 | DS1631 | DS18B20 |
DW3110 | EA-HUND | Encoder-Eingang | Encoder-Eingang BitBang | Encoder-Ausgang BitBang | FT245 |
FT6x06 | Gpio-Sampler | HCLAx | HD44780 | HMC58x | HMC6343 |
HX711 | I2C-EEPROM | ILI9341 | IS31FL3733 | ITG3200 | IXM42XXX |
L3GD20 | LAN8720A | LAWICEL | LIS302DL | LIS3DSH | LIS3MDL |
LM75 | LP503x | LSM303A | LSM6DS33 | LSM6DSO | LTC2984 |
MAX31855 | MAX31865 | MAX6966 | MAX7219 | MCP23x17 | MCP2515 |
MCP3008 | MCP7941x | MCP990X | MMC5603 | MS5611 | MS5837 |
NOKIA5110 | NRF24 | TFT-DISPLAY | PAT9125EL | PCA8574 | PCA9535 |
PCA9548A | PCA9685 | QMC5883L | SH1106 | SIEMENS-S65 | SIEMENS-S75 |
SK6812 | SK9822 | SSD1306 | ST7586S | ST7789 | STTS22H |
STUSB4500 | SX1276 | SX128X | TCS3414 | TCS3472 | TLC594x |
TMP102 | TMP12x | TMP175 | TOUCH2046 | VL53L0 | VL6180 |
WS2812 |
Eine vollständige Liste der getesteten Ziele und Treiber finden Sie in unseren Beispielen.
Der einfachste Weg für Sie und der beste Weg für uns, herauszufinden, ob etwas unklar ist oder fehlt, besteht darin, die Bibliothek zu nutzen und uns Feedback zu geben, indem Sie einen Fehlerbericht einreichen, oder wenn Sie bereits einen Fix haben und einen Pull-Request öffnen.
Unsere Beitragsrichtlinien finden Sie unter CONTRIBUTING.md.
Das modm-Projekt wird von Niklas Hauser (@salkinium), Raphael Lehmann (@rleh) und Christopher Durand (@chris-durand) betreut, mit wesentlichen Beiträgen von Sascha Schade (@strongly-typed), Fabian Greif (@dergraaf) und Kevin Läufer (@ekiwi), Martin Rosekeit (@thundernail), Daniel Krebs (@daniel-k), Georgi Grinshpun (@georgi-g), David Hebbeker (@dhebbeker), Thorsten Lajewski (@TheTh0r), Mike Wolfram (@mikewolfram) und viele weitere Mitwirkende.