modm (diucapkan seperti dial-up "modem") adalah kotak peralatan untuk membuat pustaka C++23 khusus yang disesuaikan dengan perangkat tertanam Anda. modm menghasilkan kode startup, HAL dan implementasinya, protokol komunikasi, driver untuk perangkat eksternal, dan BSP dalam proses modular dan dapat disesuaikan yang dapat Anda sesuaikan dengan kebutuhan Anda.
Proyek ini juga memiliki forum diskusi dan blog teknis untuk mendokumentasikan konsep desain yang lebih besar.
modm dioptimalkan untuk persyaratan keras kompetisi Eurobot, di mana robot kami harus berjalan dengan andal dan sepenuhnya mandiri selama durasi permainan 100 detik. Robot kami berisi banyak mikrokontroler yang berbeda, beberapa tanpa banyak sumber daya, jadi modm perlu memenuhi beragam tujuan, seperti ukuran kode kecil dengan konsumsi memori kecil, alur program yang dapat diprediksi, dan portabilitas ekstrem.
Kode sumber perpustakaan dilisensikan sebagai MPLv2 dengan kode sumber eksternal apa pun di bawah lisensi yang kompatibel (BSD, Apache2, MIT). Jadi jangan ragu untuk melakukan proyek ini dan menyesuaikannya dengan kebutuhan Anda. Satu-satunya hal yang kami minta dari Anda adalah menyumbangkan perubahan Anda kembali sehingga semua orang dapat memperoleh manfaat.
Silakan mengkloning modm secara rekursif, Anda memerlukan semua submodul:
git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git
modm dapat membuat HAL untuk 3839 perangkat dari vendor berikut:
Berikut adalah tabel berisi semua kelompok perangkat dan driver periferal yang didukungnya:
Perhatikan bahwa ini adalah ikhtisar ringkasan dan perangkat spesifik Anda mungkin tidak memiliki semua periferal dalam tabel ini. Silakan temukan driver periferal modm untuk perangkat spesifik Anda.
STM32 | SAM | Rp | PADA | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Periferal | 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 | Kecil |
ADC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ |
BISA | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ✅ | ✕ | ✕ | ○ | ○ | ✕ |
Pembanding | ✕ | ○ | ✕ | ✕ | ✅ | ✕ | ✕ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ |
DAC | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✕ | ✕ | ✕ | ○ | ✕ |
DMA | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✕ | ✅ | ✕ | ✕ | ✕ |
Ethernet | ✕ | ✕ | ○ | ○ | ✕ | ✅ | ✅ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
Interupsi Eksternal | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ |
Memori Eksternal | ✕ | ✕ | ✅ | ✅ | ✕ | ✅ | ○ | ✕ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
GPIO | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
saya 2C | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ✅ | ✅ |
Lampu Kilat Dalam | ○ | ○ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ✕ | ✕ |
IWDG | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
Generator Acak | ✕ | ✕ | ✕ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
SPI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Jam Sistem | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ |
pengatur waktu | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ |
UART | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ |
ID unik | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
USB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✕ | ✕ | ✕ |
Kami hanyalah tim pengembang kecil dan terbatas dalam jumlah perangkat yang dapat kami dukung dan uji perangkat kerasnya. Buka diskusi untuk menanyakan apakah perangkat spesifik Anda langsung didukung dan bagaimana Anda dapat menambahkannya.
Kami memiliki dukungan siap pakai untuk banyak papan pengembangan termasuk dokumentasi.
AL-AVREB-BISA | Arduino NANO | Arduino UNO | Pil Hitam F103 |
Pil Hitam F401 | Pil Hitam F411 | Pil Biru F103 | DEVEBOX-STM32F4XX |
DEVEBOX-STM32H750VB | DISKO-F051R8 | DISKO-F072RB | DISKO-F100RB |
DISKO-F303VC | DISKO-F401VC | DISKO-F407VG | DISKO-F411VE |
DISKO-F429ZI | DISKO-F469NI | DISKO-F746NG | DISKO-F769NI |
DISKO-L152RC | DISKO-L476VG | BULU-M0 | BULU-M4 |
BULU-RP2040 | MEGA-2560-PRO | NUKLEO-C031C6 | NUKLEO-F031K6 |
NUKLEO-F042K6 | NUKLEO-F072RB | NUKLEO-F091RC | NUKLEO-F103RB |
NUKLEO-F303K8 | NUKLEO-F303RE | NUKLEO-F334R8 | NUKLEO-F401RE |
NUKLEO-F411RE | NUKLEO-F429ZI | NUKLEO-F439ZI | NUKLEO-F446RE |
NUKLEO-F446ZE | NUKLEO-F746ZG | NUKLEO-F767ZI | NUKLEO-G070RB |
NUKLEO-G071RB | NUKLEO-G431KB | NUKLEO-G431RB | NUKLEO-G474RE |
NUKLEO-H723ZG | NUKLEO-H743ZI | NUKLEO-L031K6 | NUKLEO-L053R8 |
NUKLEO-L152RE | NUKLEO-L432KC | NUKLEO-L452RE | NUKLEO-L476RG |
NUCLEO-L496ZG-P | NUCLEO-L552ZE-Q | NUCLEO-U575ZI-Q | OLIMEXINO-STM32 |
Raspberry Pi Pico | SAMD21-MINI | SAMD21-XPLAINED-PRO | SAMA54-XPLAINED-PRO |
SAMA70-XPLAINED | SAMG55-XPLAINED-PRO | SAMV71-XPLAINED-ULTRA | Respon Cerdas XE |
STM32-F4VE | STM32F030-DEMO | HALPLUS-RP2040 |
Kami juga memiliki sejumlah driver yang sepenuhnya tidak bergantung pada target untuk perangkat eksternal yang terhubung melalui I 2 C, SPI, UART, BitBang, dll. Sebagian besar driver ini juga memberi Anda akses ke seluruh perangkat sehingga Anda dapat dengan mudah mengonfigurasinya untuk kebutuhan spesifik Anda.
IKLAN7280A | tahun 7928 M | ADIS16470 | ADNS9800 | IKLAN101X | IKLAN7828 |
IKLAN7843 | IKLAN816x | AMS5915 | APA102 | AS5047 | AS5600 |
AT24MAC402 | Lampu kilat SPI | BME280 | BMI088 | BMP085 | BNO055 |
CAT24AA | PENGHITUNG SIKLUS | DRV832X | DS1302 | DS1631 | DS18B20 |
DW3110 | EA-DOG | Masukan Encoder | Masukan Encoder BitBang | Keluaran Encoder BitBang | FT245 |
FT6x06 | Pengambil Sampel Gpio | HCLax | HD44780 | HMC58x | HMC6343 |
HX711 | I2C-EEPROM | ILI9341 | IS31FL3733 | ITG3200 | IXM42XXX |
L3GD20 | LAN8720A | HUKUM | LIS302DL | LIS3DSH | LIS3MDL |
LM75 | LP503x | LSM303A | LSM6DS33 | LSM6DSO | LTC2984 |
MAX31855 | MAX31865 | MAKS6966 | MAKS7219 | MCP23x17 | MCP2515 |
MCP3008 | MCP7941x | MCP990X | MMC5603 | MS5611 | MS5837 |
NOKIA5110 | NRF24 | TAMPILAN TFT | 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 | SENTUH2046 | VL53L0 | VL6180 |
WS2812 |
Silakan lihat contoh kami untuk daftar lengkap target dan driver yang diuji.
Cara termudah bagi Anda dan cara terbaik bagi kami untuk melihat apakah ada sesuatu yang tidak jelas atau hilang, adalah jika Anda menggunakan perpustakaan dan memberi kami umpan balik dengan mengajukan laporan bug atau jika Anda sudah memperbaiki dengan membuka permintaan penarikan.
Lihat CONTRIBUTING.md untuk pedoman kontribusi kami.
Proyek modm dikelola oleh Niklas Hauser (@salkinium), Raphael Lehmann (@rleh), dan Christopher Durand (@chris-durand) dengan kontribusi signifikan dari Sascha Schade (@strongly-typed), Fabian Greif (@dergraaf), Kevin Läufer (@ekiwi), Martin Rosekeit (@thundernail), Daniel Krebs (@daniel-k), Georgi Grinshpun (@georgi-g), David Hebbeker (@dhebbeker), Thorsten Lajewski (@TheTh0r), Mike Wolfram (@mikewolfram), dan masih banyak lagi kontributor lainnya.