modm(전화 접속 "모뎀"으로 발음)은 임베디드 장치에 맞는 사용자 정의 C++23 라이브러리를 구축하기 위한 도구 상자입니다. modm은 필요에 맞게 세부 조정할 수 있는 모듈식 사용자 정의 프로세스에서 시작 코드, HAL 및 해당 구현, 통신 프로토콜, 외부 장치용 드라이버 및 BSP를 생성합니다.
이 프로젝트에는 토론을 위한 포럼과 더 큰 설계 개념을 문서화하는 기술 블로그도 있습니다.
modm은 로봇이 게임의 100초 동안 안정적이고 완전하게 자율적으로 실행되어야 하는 Eurobot 경쟁의 가혹한 요구 사항에 맞게 최적화되었습니다. 우리 로봇에는 다양한 마이크로컨트롤러가 포함되어 있으며 일부는 리소스가 부족하므로 modm은 작은 메모리 소비, 예측 가능한 프로그램 흐름, 뛰어난 이식성과 같은 작은 코드 크기와 같은 다양한 목표를 충족해야 합니다.
라이브러리 소스 코드는 호환 라이선스(BSD, Apache2, MIT)에 따라 외부 소스 코드와 함께 MPLv2로 라이선스가 부여됩니다. 따라서 이 프로젝트를 자유롭게 포크하고 필요에 맞게 조정하세요. 우리가 여러분에게 요청하는 유일한 것은 모든 사람이 혜택을 받을 수 있도록 변경 사항을 다시 제공하는 것입니다.
modm을 재귀적으로 복제하세요. 모든 하위 모듈이 필요합니다.
git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git
modm은 다음 공급업체의 3839 장치에 대한 HAL을 생성할 수 있습니다.
다음은 지원하는 모든 장치 제품군과 주변 장치 드라이버가 포함된 표입니다.
이는 요약 개요이며 특정 장치에는 이 표에 있는 모든 주변 장치가 포함되어 있지 않을 수도 있습니다. 특정 장치에 대한 Modm의 주변 장치 드라이버를 찾아보십시오.
STM32 | 샘 | RP | 에 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
주변기기 | 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 | 메가 | 매우 작은 |
ADC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ |
할 수 있다 | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ✅ | ✕ | ✕ | ○ | ○ | ✕ |
비교기 | ✕ | ○ | ✕ | ✕ | ✅ | ✕ | ✕ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ |
DAC | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✕ | ✕ | ✕ | ○ | ✕ |
DMA | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✕ | ✅ | ✕ | ✕ | ✕ |
이더넷 | ✕ | ✕ | ○ | ○ | ✕ | ✅ | ✅ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
외부 인터럽트 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ |
외부 메모리 | ✕ | ✕ | ✅ | ✅ | ✕ | ✅ | ○ | ✕ | ○ | ○ | ✕ | ✕ | ○ | ○ | ○ | ✕ | ✕ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
GPIO | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
나는 2C | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ✅ | ✅ |
내부 플래시 | ○ | ○ | ✅ | ○ | ○ | ✅ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ✕ | ✕ | ✕ | ✕ |
IWDG | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
무작위 생성기 | ✕ | ✕ | ✕ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✕ | ○ | ○ | ✕ | ✕ | ✕ | ✕ | ✕ |
SPI | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ○ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
시스템 시계 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ |
시간제 노동자 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ○ | ✅ | ✅ | ○ | ○ | ○ | ○ |
UART | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ |
고유 ID | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ |
USB | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✕ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ○ | ✅ | ✅ | ✕ | ✕ | ✕ |
우리는 소규모 개발자 팀일 뿐이며 하드웨어에서 지원하고 테스트할 수 있는 장치의 수가 제한되어 있습니다. 토론을 열어 특정 장치가 기본적으로 지원되는지, 그렇지 않으면 추가할 수 있는 방법을 물어보세요.
우리는 문서를 포함하여 많은 개발 보드에 대한 기본 지원을 제공합니다.
알-아브레브-칸 | 아두이노 나노 | 아두이노 우노 | 블랙필 F103 |
블랙필 F401 | 블랙필 F411 | 블루필 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 | 깃털-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 |
NUCLEO-L152RE | NUCLEO-L432KC | NUCLEO-L452RE | NUCLEO-L476RG |
NUCLEO-L496ZG-P | NUCLEO-L552ZE-Q | NUCLEO-U575ZI-Q | 올리멕시노-STM32 |
라즈베리파이 피코 | SAMD21-MINI | SAMD21-XPLAINED-PRO | SAME54-XPLAINED-PRO |
SAME70-XPLAINED | SAMG55-XPLAINED-PRO | SAMV71-XPLAINED-ULTRA | 스마트 리스폰스 XE |
STM32-F4VE | STM32F030-DEMO | 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-DOG | 인코더 입력 | 인코더 입력 BitBang | 인코더 출력 BitBang | FT245 |
FT6x06 | 지피오 샘플러 | HCLAx | HD44780 | HMC58x | HMC6343 |
HX711 | I2C-EEPROM | ILI9341 | IS31FL3733 | ITG3200 | IXM42XXX |
L3GD20 | LAN8720A | 로위셀 | 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) 외 다수의 기여자.