modm (pronuncia-se "modem" dial-up) é uma caixa de ferramentas para construir bibliotecas C++23 personalizadas, adaptadas ao seu dispositivo incorporado. modm gera código de inicialização, HALs e suas implementações, protocolos de comunicação, drivers para dispositivos externos e BSPs em um processo modular e personalizável que você pode ajustar de acordo com suas necessidades.
Este projeto também possui um fórum para discussões e um blog técnico para documentar conceitos de design maiores.
O modm é otimizado para os rigorosos requisitos da competição Eurobot, onde nossos robôs precisam funcionar de forma confiável e totalmente autônoma durante os 100 segundos de duração do jogo. Nossos robôs contêm muitos microcontroladores diferentes, alguns sem muitos recursos, então o modm precisa cumprir um conjunto diversificado de objetivos, como tamanho de código pequeno com pequeno consumo de memória, fluxo de programa previsível e portabilidade extrema.
O código-fonte da biblioteca é licenciado como MPLv2 com qualquer código-fonte externo sob licenças compatíveis (BSD, Apache2, MIT). Portanto, fique à vontade para fazer um fork deste projeto e adaptá-lo às suas necessidades. A única coisa que pedimos a você é que contribua com suas alterações para que todos possam se beneficiar.
Clone o modm recursivamente, você precisa de todos os submódulos:
git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git
modm pode criar um HAL para 3839 dispositivos destes fornecedores:
Aqui está uma tabela com todas as famílias de dispositivos e os drivers de periféricos que eles suportam:
Observe que esta é uma visão geral resumida e seu dispositivo específico pode não ter todos os periféricos nesta tabela. Descubra os drivers periféricos do modm para o seu dispositivo específico.
STM32 | SAM | PR | NO | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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 | Pequeno |
ADC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ |
PODE | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ✅ | ✕ | ✕ | ○ | ○ | ✕ |
Comparador | ✕ | ○ | ✕ | ✕ | ✅ | ✕ | ✕ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ |
DAC | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✕ | ✕ | ✕ | ○ | ✕ |
DMA | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✕ | ✅ | ✕ | ✕ | ✕ |
Ethernet | ✕ | ✕ | ○ | ○ | ✕ | ✅ | ✅ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
Interrupção Externa | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ |
Memória Externa | ✕ | ✕ | ✅ | ✅ | ✕ | ✅ | ○ | ✕ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
GPIO | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Eu 2 C | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ✅ | ✅ |
Flash Interno | ○ | ○ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ✕ | ✕ |
IWDG | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
Gerador Aleatório | ✕ | ✕ | ✕ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
IPS | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Relógio do sistema | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ |
Temporizador | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ |
UART | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ |
ID exclusivo | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
USB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✕ | ✕ | ✕ |
Somos apenas uma pequena equipe de desenvolvedores e estamos limitados na quantidade de dispositivos que podemos suportar e testar em hardware. Abra uma discussão para perguntar se o seu dispositivo específico é compatível imediatamente e como você pode adicioná-lo de outra forma.
Temos suporte imediato para muitas placas de desenvolvimento, incluindo documentação.
AL-AVREB-CAN | Arduino NANO | Arduino UNO | Pílula Preta F103 |
Pílula Preta F401 | Pílula Preta F411 | Pílula 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 | PENA-M0 | PENA-M4 |
PENA-RP2040 | MEGA-2560-PRO | NÚCLEO-C031C6 | NÚCLEO-F031K6 |
NÚCLEO-F042K6 | NÚCLEO-F072RB | NÚCLEO-F091RC | NÚCLEO-F103RB |
NÚCLEO-F303K8 | NÚCLEO-F303RE | NÚCLEO-F334R8 | NÚCLEO-F401RE |
NÚCLEO-F411RE | NÚCLEO-F429ZI | NÚCLEO-F439ZI | NÚCLEO-F446RE |
NÚCLEO-F446ZE | NÚCLEO-F746ZG | NÚCLEO-F767ZI | NÚCLEO-G070RB |
NÚCLEO-G071RB | NÚCLEO-G431KB | NÚCLEO-G431RB | NÚCLEO-G474RE |
NÚCLEO-H723ZG | NÚCLEO-H743ZI | NÚCLEO-L031K6 | NÚCLEO-L053R8 |
NÚCLEO-L152RE | NÚCLEO-L432KC | NÚCLEO-L452RE | NÚCLEO-L476RG |
NÚCLEO-L496ZG-P | NÚCLEO-L552ZE-Q | NÚCLEO-U575ZI-Q | OLIMEXINO-STM32 |
Framboesa Pi Pico | SAMD21-MINI | SAMD21-XPLAINED-PRO | SAME54-XPLAINED-PRO |
MESMO70-XPLICADO | SAMG55-XPLAINED-PRO | SAMV71-XPLAINED-ULTRA | Resposta Inteligente XE |
STM32-F4VE | STM32F030-DEMO | THINGPLUS-RP2040 |
Também temos vários drivers totalmente independentes de destino para dispositivos externos conectados via I 2 C, SPI, UART, BitBang, etc. A maioria deles também fornece acesso a todo o dispositivo para que você possa configurá-los facilmente para suas necessidades 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 do codificador | Entrada do codificador BitBang | Saída do codificador BitBang | FT245 |
FT6x06 | Amostrador 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 | DISPLAY 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 | TOUCH2046 | VL53L0 | VL6180 |
WS2812 |
Consulte nossos exemplos para obter uma lista completa de alvos e drivers testados.
A maneira mais fácil para você e a melhor maneira de vermos se algo não está claro ou está faltando é usar a biblioteca e nos dar algum feedback preenchendo um relatório de bug ou se você já tem uma correção abrindo uma solicitação pull.
Consulte CONTRIBUTING.md para nossas diretrizes de contribuição.
O projeto modm é mantido por Niklas Hauser (@salkinium), Raphael Lehmann (@rleh) e Christopher Durand (@chris-durand) com contribuições significativas 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) e muitos outros colaboradores.