modm (pronunciado como "módem" de acceso telefónico) es una caja de herramientas para crear bibliotecas C++23 personalizadas adaptadas a su dispositivo integrado. modm genera código de inicio, HAL y sus implementaciones, protocolos de comunicación, controladores para dispositivos externos y BSP en un proceso modular y personalizable que puede ajustar según sus necesidades.
Este proyecto también cuenta con un foro de debates y un blog técnico para documentar conceptos de diseño más amplios.
modm está optimizado para los duros requisitos de la competencia Eurobot, donde nuestros robots deben funcionar de manera confiable y completamente autónoma durante los 100 segundos que dura el juego. Nuestros robots contienen muchos microcontroladores diferentes, algunos sin muchos recursos, por lo que modm necesita cumplir un conjunto diverso de objetivos, como código de tamaño pequeño con pequeño consumo de memoria, flujo de programa predecible y portabilidad extrema.
El código fuente de la biblioteca tiene licencia como MPLv2 con cualquier código fuente externo bajo licencias compatibles (BSD, Apache2, MIT). Así que siéntete libre de bifurcar este proyecto y adaptarlo a tus necesidades. Lo único que le pedimos es que contribuya con sus cambios para que todos puedan beneficiarse.
Clone modm de forma recursiva, necesita todos los submódulos:
git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git
modm puede crear un HAL para 3839 dispositivos de estos proveedores:
Aquí hay una tabla con todas las familias de dispositivos y los controladores de periféricos que admiten:
Tenga en cuenta que este es un resumen general y es posible que su dispositivo específico no tenga todos los periféricos en esta tabla. Descubra los controladores periféricos de modm para su dispositivo específico.
STM32 | Sam | PR | EN | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Periférico | 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 | Diminuto |
CAD | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ |
PODER | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ✅ | ✕ | ✕ | ○ | ○ | ✕ |
Comparador | ✕ | ○ | ✕ | ✕ | ✅ | ✕ | ✕ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ |
CAD | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✕ | ✕ | ✕ | ○ | ✕ |
DMA | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✕ | ✅ | ✕ | ✕ | ✕ |
Ethernet | ✕ | ✕ | ○ | ○ | ✕ | ✅ | ✅ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
Interrupción externa | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ |
Memoria externa | ✕ | ✕ | ✅ | ✅ | ✕ | ✅ | ○ | ✕ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
GPIO | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Yo 2C | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ✅ | ✅ |
Flash interno | ○ | ○ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ✕ | ✕ |
IWDG | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
Generador aleatorio | ✕ | ✕ | ✕ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
SPI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Reloj del sistema | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ |
Minutero | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ |
UART | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ |
Identificación única | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
USB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✕ | ✕ | ✕ |
Somos solo un pequeño equipo de desarrolladores y estamos limitados en la cantidad de dispositivos que podemos admitir y probar en hardware. Abra una discusión para preguntar si su dispositivo específico es compatible de fábrica y cómo puede agregarlo de otra manera.
Contamos con soporte listo para usar para muchas placas de desarrollo, incluida la documentación.
AL-AVREB-CAN | arduino nano | Arduino UNO | Pastilla Negra F103 |
Pastilla Negra F401 | Pastilla Negra F411 | Pastilla azul 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 | PLUMA-M0 | PLUMA-M4 |
PLUMA-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 |
Frambuesa Pi Pico | SAMD21-MINI | SAMD21-XPLAINED-PRO | SAME54-XPLAINED-PRO |
MISMO70-XEXPLICADO | SAMG55-XPLAINED-PRO | SAMV71-XPLAINED-ULTRA | Respuesta inteligente XE |
STM32-F4VE | STM32F030-DEMOSTRACIÓN | COSAPLUS-RP2040 |
También tenemos una serie de controladores completamente independientes del objetivo para dispositivos externos conectados a través de I 2 C, SPI, UART, BitBang, etc. La mayoría de ellos también le brindan acceso a todo el dispositivo para que pueda configurarlos fácilmente según sus necesidades específicas.
AD7280A | AD7928 | ADIS16470 | ADNS9800 | ADS101X | ADS7828 |
ADS7843 | ADS816x | AMS5915 | APA102 | AS5047 | AS5600 |
AT24MAC402 | Flash SPI | BME280 | IMC088 | BMP085 | BNO055 |
CAT24AA | CONTADOR DE CICLOS | DRV832X | DS1302 | DS1631 | DS18B20 |
DW3110 | EA-DOG | Entrada del codificador | Entrada del codificador BitBang | BitBang de salida del codificador | FT245 |
FT6x06 | Muestra Gpio | 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 | PANTALLA 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 | TOQUE2046 | VL53L0 | VL6180 |
WS2812 |
Consulte nuestros ejemplos para obtener una lista completa de objetivos y controladores probados.
La forma más fácil para usted y la mejor manera para nosotros de ver si algo no está claro o falta es si usa la biblioteca y nos brinda su opinión presentando un informe de error o si ya tiene una solución abriendo una solicitud de extracción.
Consulte CONTRIBUTING.md para conocer nuestras pautas de contribución.
El proyecto modm está mantenido por Niklas Hauser (@salkinium), Raphael Lehmann (@rleh) y Christopher Durand (@chris-durand) con importantes contribuciones de 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) y muchos más colaboradores.