Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

modm: a C++23 library generator for AVR and ARM Cortex-M devices

License

NotificationsYou must be signed in to change notification settings

modm-io/modm

Repository files navigation

modm (pronounced like dial-up "modem") is a toolbox forbuilding custom C++23 libraries tailored to your embedded device.modm generates startup code, HALs and their implementations, communicationprotocols, drivers for external devices, and BSPs in a modular, customizableprocess that you can fine-tune to your needs.

This project also has aforum for discussions and atechnical blog to document larger design concepts.

modm is optimized for the harsh requirements of theEurobot competition,where our robots need to run reliably and completely autonomously for the game's100 second duration. Our robots contain a lot of different microcontrollers, somewithout a lot of resources, so modm needs to fulfill a diverse set of objectives,like small code size with small memory consumption, predictable program flow,extreme portability.

The library source code is licensed as MPLv2 with any external source code undercompatible licenses (BSD, Apache2, MIT). So feel free to fork this project andadapt it to your needs. The only thing we ask of you is to contribute your changesback so everyone can benefit.

Please clone modm recursively, you need all the submodules:

git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git

Features

  • Efficient and fast object-oriented C++23 API.
  • Support for thousands of AVR and ARM Cortex-M microcontrollers from Microchip, STMicroelectronics and Raspberry Pi.
  • Build system agnostic: Choose SCons, CMake, Makefile or use your own.
  • Modular, data-driven, target-specific HAL generation using the lbuild code generator.
  • No memory allocations in HAL with very low overall RAM consumption.
  • Highly configurable modules with sensible defaults and lots of documentation.
  • Cross-platform peripheral interfaces incl. bit banging:
    • GPIO, External Interrupt and IO expanders.
    • ADC, DAC and Comparators.
    • UART, I2C, SPI, CAN and Ethernet.
  • Interfaces and drivers for many external I2C and SPI sensors and devices.
  • Debug/logging system with IOStream and printf interface.
  • Cooperative, stackful fibers and scheduler.
  • Functional (partial) libstdc++ implementation for AVRs.
  • Useful filter, interpolation and geometric algorithms.
  • Lightweight unit testing system (suitable for AVRs).
  • Hundreds of tests to ensure correct functionality.
  • Integration of useful third-party software:

Microcontrollers

modm can create a HAL for 3984 devices of these vendors:

  • STMicroelectronics STM32: 3240 devices.
  • Microchip SAM: 355 devices.
  • Microchip AVR: 388 devices.
  • Raspberry Pi: 1 device.

Here is a table with all device families and the peripheral drivers they support:

  • ✅ Implemented as a software driver in modm.
  • ○ Available in hardware but missing a software driver in modm.
  • ✕ Unavailable in hardware or device with that peripheral not supported by modm.

Note that this is a summary overview and your specific device may not have allthe peripherals in this table.Pleasediscover modm's peripheral drivers for your specific device.

STM32SAMRPAT
PeripheralC0F0F1F2F3F4F7G0G4H5H7L0L1L4L5U0U3U5D1x
D2x
DAx
D5x
E5x
E7x
S7x
V7x
G5x2090MegaTiny
ADC
CAN
Comparator
DAC
DMA
Ethernet
External Interrupt
External Memory
GPIO
I2C
Internal Flash
IWDG
Random Generator
RTC
SPI
System Clock
Timer
UART
Unique ID
USB

We are only a small team of developers and are limited in the amount of deviceswe can support and test in hardware.Open a discussion to ask ifyour specific device is supported out-of-the-box and how you can add it otherwise.

Boards

We have out-of-box support for many development boards including documentation.

AL-AVREB-CANArduino NANOArduino UNOBlack Pill F103
Black Pill F401Black Pill F411Blue Pill F103DEVEBOX-STM32F4XX
DEVEBOX-STM32H750VBDISCO-F051R8DISCO-F072RBDISCO-F100RB
DISCO-F303VCDISCO-F401VCDISCO-F407VGDISCO-F411VE
DISCO-F429ZIDISCO-F469NIDISCO-F723IEDISCO-F746NG
DISCO-F769NIDISCO-L152RCDISCO-L476VGFEATHER-M0
FEATHER-M4FEATHER-RP2040MEGA-2560-PRONUCLEO-C031C6
NUCLEO-F031K6NUCLEO-F042K6NUCLEO-F072RBNUCLEO-F091RC
NUCLEO-F103RBNUCLEO-F207ZGNUCLEO-F303K8NUCLEO-F303RE
NUCLEO-F334R8NUCLEO-F401RENUCLEO-F411RENUCLEO-F429ZI
NUCLEO-F439ZINUCLEO-F446RENUCLEO-F446ZENUCLEO-F722ZE
NUCLEO-F746ZGNUCLEO-F767ZINUCLEO-G070RBNUCLEO-G071RB
NUCLEO-G0B1RENUCLEO-G431KBNUCLEO-G431RBNUCLEO-G474RE
NUCLEO-H503RBNUCLEO-H723ZGNUCLEO-H743ZINUCLEO-L031K6
NUCLEO-L053R8NUCLEO-L152RENUCLEO-L432KCNUCLEO-L452RE
NUCLEO-L476RGNUCLEO-L496ZG-PNUCLEO-L552ZE-QNUCLEO-U083RC
NUCLEO-U385RG-QNUCLEO-U575ZI-QOLIMEXINO-STM32Raspberry Pi Pico
SAMD21-MINISAMD21-XPLAINED-PROSAME54-XPLAINED-PROSAME70-XPLAINED
SAMG55-XPLAINED-PROSAMV71-XPLAINED-ULTRASmart Response XESTM32-F4VE
STM32F030-DEMOTHINGPLUS-RP2040WEACT-C011F6WEACT-G0B1CB
WEACT-H503CBWEACT-H523CEWEACT-H562RGWEACT-U585CI

Drivers

We also have a number of completely target-independent drivers for externaldevices connected via I2C, SPI, UART, BitBang, etc. Most of thesealso give you access to the entire device so you can easily configure them foryour specific needs.

AD7280AAD7928ADIS16470ADNS9800ADS101XADS7828
ADS7843ADS816xADS868XAMS5915APA102AS5047
AS5600AT24MAC402SPI FlashBME280BMI088BMP085
BNO055CAT24AACYCLE-COUNTERDRV832XDS1302DS1631
DS18B20DW3110EA-DOGEncoder InputEncoder Input BitBangEncoder Output BitBang
FT245FT6x06Gpio SamplerHCLAxHD44780HMC58x
HMC6343HX711I2C-EEPROMILI9341IS31FL3733ITG3200
IXM42XXXL3GD20LAN8720ALAWICELLIS302DLLIS3DSH
LIS3MDLLM75LP503xLSM303ALSM6DS33LSM6DSO
LTC2984MAX31855MAX31865MAX6966MAX7219MCP23x17
MCP2515MCP3008MCP7941xMCP990XMMC5603MS5611
MS5837NOKIA5110NRF24TFT-DISPLAYPAT9125ELPCA8574
PCA9535PCA9548APCA9685QMC5883LSH1106SIEMENS-S65
SIEMENS-S75SK6812SK9822SSD1306ST7586SST7789
STTS22HSTUSB4500SX1276SX128XTCS3414TCS3472
TLC594xTMP102TMP12xTMP175TOUCH2046VL53L0
VL6180WS2812

Please seeour examples for a complete list of tested targets and drivers.

How can I contribute?

The easiest way for you and the best way for us to see if something is unclearor missing, is if you use the library and give us some feedback byfiling a bugreport or if you have a fix alreadyopening a pull request.

SeeCONTRIBUTING.md for our contribution guidelines.

The modm project is maintained byNiklas Hauser (@salkinium),Raphael Lehmann (@rleh), andChristopher Durand (@chris-durand) with significant contributions fromSascha 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),andmany more contributors.

Folder structure

examples
Example projects that show the usage of parts of the modm library. These projects are always up to date and are tested to compile by our CI.
src
This folder contains the actual source code of modm grouped into several modules.
test
Contains hundreds of tests for making sure modm works the way we expect it to.
docs
General documentation about this library and how to use it.
ext
Third-party code used in this library.
tools
Support tools, scripts and files.

[8]ページ先頭

©2009-2026 Movatter.jp