modm (ออกเสียงว่า "โมเด็ม") คือกล่องเครื่องมือสำหรับสร้างไลบรารี C++23 แบบกำหนดเองที่ปรับให้เหมาะกับอุปกรณ์ฝังตัวของคุณ modm สร้างโค้ดเริ่มต้น, HAL และการใช้งาน, โปรโตคอลการสื่อสาร, ไดรเวอร์สำหรับอุปกรณ์ภายนอก และ BSP ในกระบวนการแบบโมดูลาร์ที่ปรับแต่งได้ ซึ่งคุณสามารถปรับแต่งตามความต้องการของคุณได้
โปรเจ็กต์นี้ยังมีฟอรัมสำหรับการอภิปรายและบล็อกทางเทคนิคเพื่อบันทึกแนวคิดการออกแบบที่ใหญ่ขึ้น
modm ได้รับการปรับให้เหมาะกับข้อกำหนดที่รุนแรงของการแข่งขัน Eurobot ซึ่งหุ่นยนต์ของเราต้องทำงานอย่างน่าเชื่อถือและเป็นอิสระอย่างสมบูรณ์ตลอดระยะเวลา 100 วินาทีของเกม หุ่นยนต์ของเรามีไมโครคอนโทรลเลอร์ที่แตกต่างกันจำนวนมาก บางตัวไม่มีทรัพยากรมากนัก ดังนั้น modm จำเป็นต้องบรรลุวัตถุประสงค์ที่หลากหลาย เช่น รหัสขนาดเล็กแต่ใช้หน่วยความจำน้อย การไหลของโปรแกรมที่คาดเดาได้ ความสะดวกในการพกพาขั้นสุดยอด
ซอร์สโค้ดของไลบรารีได้รับอนุญาตเป็น MPLv2 พร้อมซอร์สโค้ดภายนอกใด ๆ ภายใต้ใบอนุญาตที่เข้ากันได้ (BSD, Apache2, MIT) ดังนั้นอย่าลังเลที่จะแยกโครงการนี้และปรับให้เข้ากับความต้องการของคุณ สิ่งเดียวที่เราขอจากคุณคือสนับสนุนการเปลี่ยนแปลงของคุณกลับคืนมาเพื่อให้ทุกคนได้รับประโยชน์
กรุณาโคลน modm ซ้ำ ๆ คุณต้องการโมดูลย่อยทั้งหมด:
git clone --recurse-submodules --jobs 8 https://github.com/modm-io/modm.git
modm สามารถสร้าง HAL สำหรับอุปกรณ์ 3839 ของผู้จำหน่ายเหล่านี้:
นี่คือตารางที่มีตระกูลอุปกรณ์ทั้งหมดและไดรเวอร์อุปกรณ์ต่อพ่วงที่รองรับ:
โปรดทราบว่านี่เป็นภาพรวมโดยสรุป และอุปกรณ์ต่อพ่วงของคุณอาจมีอุปกรณ์ต่อพ่วงไม่ครบถ้วนในตารางนี้ โปรดค้นหาไดรเวอร์ต่อพ่วงของ modm สำหรับอุปกรณ์เฉพาะของคุณ
เอสทีเอ็ม32 | แซม | รป | ที่ | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
อุปกรณ์ต่อพ่วง | ค0 | F0 | F1 | F2 | F3 | F4 | F7 | G0 | G4 | H7 | L0 | L1 | L4 | L5 | ยู5 | D1x D2x ดีเอ็กซ์ | D5x E5x | E7x S7x V7x | G5x | 20 | 90 | เมก้า | ขนาดเล็ก |
เอดีซี | |||||||||||||||||||||||
สามารถ | |||||||||||||||||||||||
เครื่องเปรียบเทียบ | |||||||||||||||||||||||
ดีเอซี | |||||||||||||||||||||||
ดีเอ็มเอ | |||||||||||||||||||||||
อีเทอร์เน็ต | |||||||||||||||||||||||
การขัดจังหวะภายนอก | |||||||||||||||||||||||
หน่วยความจำภายนอก | |||||||||||||||||||||||
จีพีโอ | |||||||||||||||||||||||
ฉัน 2 ซี | |||||||||||||||||||||||
แฟลชภายใน | |||||||||||||||||||||||
IWDG | |||||||||||||||||||||||
เครื่องกำเนิดแบบสุ่ม | |||||||||||||||||||||||
เอสพีไอ | |||||||||||||||||||||||
นาฬิการะบบ | |||||||||||||||||||||||
ตัวจับเวลา | |||||||||||||||||||||||
ยูอาร์ที | |||||||||||||||||||||||
รหัสที่ไม่ซ้ำ | |||||||||||||||||||||||
ยูเอสบี |
เราเป็นเพียงทีมนักพัฒนากลุ่มเล็กๆ และมีจำนวนอุปกรณ์ที่จำกัดที่เราสามารถรองรับและทดสอบในฮาร์ดแวร์ได้ เปิดการสนทนาเพื่อถามว่าอุปกรณ์เฉพาะของคุณได้รับการสนับสนุนแบบสำเร็จรูปหรือไม่ และคุณจะเพิ่มอุปกรณ์ดังกล่าวได้อย่างไร
เรามีการสนับสนุนแบบสำเร็จรูปสำหรับบอร์ดพัฒนาจำนวนมากรวมถึงเอกสารประกอบ
อัล-อาฟเรบ-สามารถ | อาร์ดูโน่ นาโน | Arduino UNO | ยาเม็ดดำ F103 |
ยาเม็ดดำ F401 | ยาเม็ดดำ F411 | ยาเม็ดสีฟ้า F103 | ดีเวบ็อกซ์-STM32F4XX |
ดีเวบ็อกซ์-STM32H750VB | ดิสโก้-F051R8 | ดิสโก้-F072RB | ดิสโก้-F100RB |
ดิสโก้-F303VC | ดิสโก้-F401VC | ดิสโก้-F407VG | ดิสโก้-F411VE |
ดิสโก้-F429ZI | ดิสโก้-F469NI | ดิสโก้-F746NG | ดิสโก้-F769NI |
ดิสโก้-L152RC | ดิสโก้-L476VG | ขนนก-M0 | ขนนก-M4 |
ขนนก-RP2040 | เมก้า-2560-โปร | นิวคลีโอ-C031C6 | นิวคลีโอ-F031K6 |
นิวคลีโอ-F042K6 | นิวคลีโอ-F072RB | นิวคลีโอ-F091RC | นิวคลีโอ-F103RB |
นิวคลีโอ-F303K8 | นิวคลีโอ-F303RE | นิวคลีโอ-F334R8 | นิวคลีโอ-F401RE |
นิวคลีโอ-F411RE | นิวคลีโอ-F429ZI | นิวคลีโอ-F439ZI | นิวคลีโอ-F446RE |
นิวคลีโอ-F446ZE | นิวคลีโอ-F746ZG | นิวคลีโอ-F767ZI | นิวคลีโอ-G070RB |
นิวคลีโอ-G071RB | นิวคลีโอ-G431KB | นิวคลีโอ-G431RB | นิวคลีโอ-G474RE |
นิวคลีโอ-H723ZG | นิวคลีโอ-H743ZI | นิวคลีโอ-L031K6 | นิวคลีโอ-L053R8 |
นิวคลีโอ-L152RE | นิวคลีโอ-L432KC | นิวคลีโอ-L452RE | นิวคลีโอ-L476RG |
นิวคลีโอ-L496ZG-P | นิวคลีโอ-L552ZE-Q | นิวคลีโอ-U575ZI-Q | โอลิมซิโน-STM32 |
ราสเบอร์รี่ Pi Pico | SAMD21-มินิ | SAMD21-XPLAINED-PRO | SAME54-XPLAINED-PRO |
SAME70-อธิบายแล้ว | 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 | เอพีเอ102 | AS5047 | AS5600 |
AT24MAC402 | เอสพีไอ แฟลช | BME280 | BMI088 | BMP085 | BNO055 |
CAT24AA | ไซเคิลเคาน์เตอร์ | DRV832X | DS1302 | DS1631 | DS18B20 |
DW3110 | EA-สุนัข | อินพุตตัวเข้ารหัส | ตัวเข้ารหัสอินพุต BitBang | ตัวเข้ารหัสเอาต์พุต BitBang | ฟุต245 |
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 | แม็กซ์6966 | MAX7219 | เอ็มซีพี23x17 | เอ็มซีพี2515 |
MCP3008 | MCP7941x | MCP990X | MMC5603 | MS5611 | MS5837 |
โนเกีย5110 | NRF24 | จอแสดงผล TFT | PAT9125EL | PCA8574 | PCA9535 |
PCA9548A | PCA9685 | คิวเอ็มซี5883L | SH1106 | ซีเมนส์-S65 | ซีเมนส์-S75 |
เอสเค6812 | เอสเค9822 | SSD1306 | ST7586S | ST7789 | STTS22H |
STUSB4500 | SX1276 | SX128X | ทีซีเอส3414 | ทีซีเอส3472 | TLC594x |
ทีเอ็มพี102 | TMP12x | ทีเอ็มพี175 | ทัช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) และผู้มีส่วนร่วมอีกมากมาย