modm(發音類似於撥號「數據機」)是一個工具箱,用於建立適合您的嵌入式裝置的自訂 C++23 庫。 modm 以模組化、可自訂的流程產生啟動程式碼、HAL 及其實作、通訊協定、外部裝置驅動程式和 BSP,您可以根據需要進行微調。
該專案還有一個討論論壇和一個技術部落格來記錄更大的設計概念。
modm 對 Eurobot 競賽的嚴格要求進行了優化,我們的機器人需要在比賽的 100 秒持續時間內可靠且完全自主地運行。我們的機器人包含許多不同的微控制器,其中一些沒有大量資源,因此 modm 需要實現一系列不同的目標,例如小程式碼大小和小記憶體消耗、可預測的程式流程、極高的可移植性。
此函式庫原始碼與任何外部原始碼均依照相容授權(BSD、Apache2、MIT)授權為 MPLv2。因此,請隨意分叉這個項目並根據您的需求進行調整。我們唯一要求您做的就是貢獻您的更改,以便每個人都能受益。
請遞歸克隆 modm,您需要所有子模組:
git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git
modm 可以為這些供應商的 3839 設備建立 HAL:
下表列出了所有設備系列及其支援的周邊驅動程式:
請注意,這是一個摘要概述,您的特定設備可能不具備此表中的所有周邊設備。請尋找適合您的特定裝置的數據機週邊設備驅動程式。
STM32 | 薩姆 | RP | 在 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
週邊 | 二氧化碳 | 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 | 百萬 | 微小的 |
類比數位轉換器 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ |
能 | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ✅ | ✕ | ✕ | ○ | ○ | ✕ |
比較器 | ✕ | ○ | ✕ | ✕ | ✅ | ✕ | ✕ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ |
數位類比轉換器 | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✕ | ✕ | ✕ | ○ | ✕ |
DMA | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✕ | ✅ | ✕ | ✕ | ✕ |
乙太網路 | ✕ | ✕ | ○ | ○ | ✕ | ✅ | ✅ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
外部中斷 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ |
外部記憶體 | ✕ | ✕ | ✅ | ✅ | ✕ | ✅ | ○ | ✕ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
通用輸入輸出介面 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
我2C | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ✅ | ✅ |
內部快閃記憶體 | ○ | ○ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ✕ | ✕ |
IWDG | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
隨機發生器 | ✕ | ✕ | ✕ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
SPI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
系統時鐘 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ |
定時器 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ |
串口 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ |
唯一ID | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
USB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✕ | ✕ | ✕ |
我們只是一小群開發人員,並且我們可以在硬體中支援和測試的設備數量有限。展開討論,詢問您的特定裝置是否受開箱即用支援以及如何添加它。
我們為許多開發板提供開箱即用的支持,包括文件。
阿爾-阿夫雷布-坎 | Arduino 奈米 | Arduino UNO | 黑丸F103 |
黑丸F401 | 黑丸F411 | 藍丸F103 | DEVEBOX-STM32F4XX |
DEVEBOX-STM32H750VB | 迪斯科-F051R8 | 迪斯可-F072RB | 迪斯可-F100RB |
DISCO-F303VC | 迪斯可-F401VC | 迪斯可-F407VG | 迪斯可-F411VE |
迪斯可-F429ZI | 迪斯可-F469NI | 迪斯可-F746NG | 迪斯可-F769NI |
迪斯科-L152RC | 迪斯可-L476VG | 羽毛-M0 | 羽毛-M4 |
羽毛-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 |
核仁-L152RE | NUCLEO-L432KC | 核仁-L452RE | NUCLEO-L476RG |
NUCLEO-L496ZG-P | NUCLEO-L552ZE-Q | NUCLEO-U575ZI-Q | 奧利美西諾-STM32 |
樹莓派 Pico | SAMD21-MINI | SAMD21-XPLAINED-PRO | SAME54-XPLAINED-PRO |
SAME70-X解釋 | SAMG55-XPLAINED-PRO | SAMV71-XPLAINED-ULTRA | 智慧型響應XE |
STM32-F4VE | STM32F030-演示 | THINGPLUS-RP2040 |
我們還有許多完全獨立於目標的驅動程序,用於透過 I 2 C、SPI、UART、BitBang 等連接的外部設備。輕鬆配置它們。
AD7280A | AD7928 | ADIS16470 | ADNS9800 | ADS101X | ADS7828 |
ADS7843 | ADS816x | AMS5915 | APA102 | AS5047 | AS5600 |
AT24MAC402 | SPI快閃記憶體 | BME280 | BMI088 | BMP085 | BNO055 |
CAT24AA | 自行車計數器 | DRV832X | DS1302 | DS1631 | DS18B20 |
DW3110 | EA狗 | 編碼器輸入 | 編碼器輸入 BitBang | 編碼器輸出 BitBang | FT245 |
FT6x06 | GPIO 採樣器 | HCLAx | HD44780 | HMC58x | HMC6343 |
HX711 | I2C-EEPROM | ILI9341 | IS31FL3733 | ITG3200 | IXM42XXX |
L3GD20 | 區域網路8720A | 洛維賽爾 | LIS302DL | LIS3DSH | LIS3MDL |
LM75 | LP503x | LSM303A | LSM6DS33 | LSM6DSO | LTC2984 |
MAX31855 | MAX31865 | MAX6966 | MAX7219 | MCP23x17 | MCP2515 |
MCP3008 | MCP7941x | MCP990X | MMC5603 | MS5611 | MS5837 |
諾基亞5110 | NRF24 | TFT顯示幕 | PAT9125EL | PCA8574 | PCA9535 |
PCA9548A | PCA9685 | QMC5883L | SH1106 | 西門子-S65 | 西門子-S75 |
SK6812 | SK9822 | SSD1306 | ST7586S | ST7789 | STTS22H |
STUSB4500 | SX1276 | SX128X | TCS3414 | TCS3472 | TLC594x |
TMP102 | TMP12x | TMP175 | 觸摸2046 | VL53L0 | VL6180 |
WS2812 |
請參閱我們的範例以取得已測試目標和驅動程式的完整清單。
對於您和我們來說,查看是否有不清楚或丟失的內容的最簡單方法是,您是否使用該庫並通過提交錯誤報告向我們提供一些反饋,或者您是否已經修復了打開拉取請求的問題。
請參閱 CONTRIBUTING.md 以了解我們的貢獻指南。
modm 專案由 Niklas Hauser (@salkinium)、Raphael Lehmann (@rleh) 和 Christopher Durand (@chris-durand) 維護,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) )以及更多貢獻者。