OpenMV Cam H7 Plus¶
تجمع OpenMV Cam H7 Plus بين معالج STMicroelectronics STM32H743 (Cortex‑M7 بتردد 480 MHz) وذاكرة SDRAM خارجية بسعة 32 ميجابايت، وذاكرة فلاش QSPI بسعة 32 ميجابايت، ومرمّز JPEG عتادي، ووحدة الكاميرا OV5640 بدقة 5 ميجابكسل على حامل قابل للإزالة. تناسب الذاكرة الإضافية بشكل جيد الالتقاط عالي الدقة ومخازن الصور الكبيرة.
للاطلاع على ورقة البيانات الكاملة والصور والأبعاد، راجع صفحة منتج OpenMV Cam H7 Plus.
أبرز الميزات¶
STMicroelectronics STM32H743 معالج Cortex‑M7 بتردد 480 MHz (1027 DMIPS).
مرمّز/مفكّك ترميز JPEG عتادي.
ذاكرة SDRAM خارجية بسعة 32 ميجابايت (32 بت بتردد 100 MHz، بسرعة 400 ميجابايت/ث) بالإضافة إلى ذاكرة SRAM داخلية بسعة 1 ميجابايت.
ذاكرة فلاش داخلية بسعة 2 ميجابايت + ذاكرة فلاش QSPI خارجية بسعة 32 ميجابايت (قراءة بسرعة ~100 ميجابايت/ث).
OV5640 مستشعر بمصراع متدحرج بدقة 5 ميجابكسل.
USB بالسرعة الكاملة (12 ميجابت/ث) — يظهر كـ VCP ووحدة تخزين USB كبيرة الحجم لدى المضيف.
مقبس microSD — بطاقات SD حتى 2 جيجابايت، وSDHC حتى 32 جيجابايت، وSDXC حتى 2 تيرابايت.
موصّل بطارية LiPo (لا يوجد شاحن مدمج — استخدم خلية مشحونة أو شغّل اللوحة من VIN/USB).
10 دبابيس I/O، تتحمل 5 فولت بخرج 3.3 فولت، 25 مللي أمبير لكل دبوس (120 مللي أمبير إجمالاً عبر الترويسة)، قادرة على المقاطعة. الدبوس P6 لا يتحمل 5 فولت عند استخدامه في وضع ADC أو DAC.
RGB LED للمستخدم واثنان من مصابيح LED بالأشعة تحت الحمراء عالية الطاقة بطول موجي 850 نانومتر للإضاءة النشطة في الرؤية بالإضاءة المنخفضة.
ملاحظة
لا تحتوي H7 Plus على شريحة إدارة طاقة مدمجة: فلا يوجد شاحن بطارية، ولا ADC لقياس جهد البطارية، ولا مصابيح LED لحالة الشحن/الطاقة، ولا زر طاقة عتادي. وصّل بطارية LiPo مشحونة مسبقاً بموصّل JST الخاص بالبطارية أو شغّل اللوحة من USB / VIN.
مخطط الدبابيس¶
مرجع الدبابيس¶
اسم الدبوس |
الوظيفة |
|---|---|
P0 |
UART1 RX / SPI2 MOSI |
P1 |
UART1 TX / SPI2 MISO |
P2 |
SPI2 SCK / FDCAN2 TX |
P3 |
SPI2 NSS (CS) / FDCAN2 RX |
P4 |
I2C2 SCL / UART3 TX / TIM2 CH3 |
P5 |
I2C2 SDA / UART3 RX / TIM2 CH4 |
P6 |
ADC / DAC / TIM2 CH1 |
P7 |
I2C4 SCL / TIM4 CH1 |
P8 |
I2C4 SDA / TIM4 CH2 |
P9 |
I/O رقمي |
RESET |
اسحبه إلى GND لإعادة ضبط اللوحة |
SYN |
لوحة مزامنة الإطارات — موصّلة بمستشعر الكاميرا فقط |
BOOT0 |
اسحبه إلى 3.3 فولت عند التشغيل للدخول إلى DFU / محمّل إقلاع ROM |
LED_RED |
القناة الحمراء لـ RGB LED (نشطة عند المنخفض) |
LED_GREEN |
القناة الخضراء لـ RGB LED (نشطة عند المنخفض) |
LED_BLUE |
القناة الزرقاء لـ RGB LED (نشطة عند المنخفض) |
LED_IR |
مصابيح LED بالأشعة تحت الحمراء عالية الطاقة (تُشغّل القناتان معاً) |
ملاحظة
لوحة SYN على الترويسة موصّلة مباشرة بخط التشغيل / التعريض لمستشعر الكاميرا — وهي لا تتصل بالمعالج على H7 Plus. شغّلها أو اقرأها خارجياً؛ لا يمكنك تبديل حالتها من MicroPython.
دبابيس الطاقة¶
3.3V — قضيب 3.3 فولت منظّم. يتوفر حتى 250 مللي أمبير للدروع (أقل إذا كانت بطاقة microSD قيد الاستخدام). على عكس الكاميرات الأحدث، هذا الدبوس ثنائي الاتجاه — راجع التحذير أدناه.
VIN — دخل من 3.6 إلى 5 فولت. يغذّي اللوحة عبر المنظّم المدمج.
GND — الأرضي المشترك.
يوجد أيضاً موصّل بطارية LiPo بجهد 3.7 فولت، لكن H7 Plus لا تحتوي على شاحن بطارية — وصّل خلية مشحونة مسبقاً، أو استخدم VIN / USB بدلاً من ذلك.
ملاحظة
عند توفر كل من USB وVIN/LiPo، يفوز دخل VIN/LiPo — يختاره مفتاح الطاقة المدمج بدلاً من USB لتغذية اللوحة.
تحذير
موصّل البطارية وVIN موصّلان معاً على H7 Plus. لا توصّل بطارية LiPo وتطبّق VIN في الوقت نفسه — فسيتصارع المصدران ويمكن أن يتلفا البطارية أو اللوحة أو كليهما.
تحذير
يمكنك تشغيل H7 Plus بتغذية 3.3 فولت مباشرة إلى الدبوس 3.3V إذا لم ترغب في المرور عبر المنظّم المدمج. في تلك الحالة، لا تطبّق أيضاً طاقة VIN أو USB في الوقت نفسه — فإن دفع المنظّم عكسياً بينما يكون مصدر آخر نشطاً قد يتلف الكاميرا ويدمّرها بشكل دائم.
نصيحة
استخدم مقدّر عمر البطارية لنمذجة المدة التي ستعمل فيها H7 Plus على البطارية لدورة عمل معيّنة بين النشاط والنوم العميق.
دبابيس الاسترداد والتصحيح¶
RESET — اسحبه إلى GND لإعادة ضبط اللوحة. تحريره يتيح للمعالج بدء التشغيل بشكل طبيعي.
BOOT0 — اسحبه إلى 3.3 فولت أثناء تشغيل اللوحة للدخول إلى محمّل إقلاع ROM الخاص بـ STM32 (وضع DFU). يستخدم OpenMV IDE هذا الوضع لإعادة تحميل برنامج المحمّل المدمج.
تعرض اللوحة ترويسة تصحيح SWD (RST / SWCLK / SWDIO / SWO) بجوار ترويسة GPIO، متوافقة مع محولات ST‑LINK وSEGGER J‑Link.
ملاحظة
يُشارك دبوس التتبع SWO خط ساعة SPI لترويسة الكاميرا. لا يمكن استخدام SWO في الوقت نفسه مع أي وحدة كاميرا تتواصل مع المعالج عبر SPI — على سبيل المثال وحدة محول FLIR® Lepton® — اختر أحدهما.
الطرفيات المدمجة¶
مصابيح LED¶
تحتوي H7 Plus على RGB LED واحد للمستخدم بالإضافة إلى زوج من مصابيح LED بالأشعة تحت الحمراء عالية الطاقة بطول موجي 850 نانومتر:
RGB LED للمستخدم — قابل للتحكم برمجياً، معروض كـ
LED_REDوLED_GREENوLED_BLUEfrom machine import LED LED("LED_RED").on() LED("LED_GREEN").on() LED("LED_BLUE").on()
مصابيح LED بالأشعة تحت الحمراء — يُشغّل المصباحان معاً عبر الدبوس
LED_IR. الدبوسLED_IRموصّل نشطاً عند المرتفع في العتاد بينما يتعامل البرنامج الثابت مع كل مصباح LED مدمج آخر على أنه نشط عند المنخفض، لذا استخدمlow()/high()بدلاً منon()/off()(التي ستعكس المعنى):from machine import LED ir = LED("LED_IR") ir.low() # turn IR illumination ON ir.high() # turn IR illumination OFF
مستشعر الكاميرا¶
يُشغّل مستشعر OV5640 عبر وحدة csi --- مستشعرات الكاميرا
import csi
cam = csi.CSI()
cam.reset()
cam.pixformat(csi.RGB565)
cam.framesize(csi.QVGA)
cam.snapshot(time=2000) # let auto‑exposure settle
while True:
img = cam.snapshot()
يحتوي مستشعر OV5640 على ضاغط JPEG مدمج. اضبط csi.CSI.pixformat على csi.JPEG ويُسلّم المستشعر إطارات مضغوطة مباشرة إلى الكاميرا عبر ناقل الكاميرا، مما يجعل الالتقاط عالي الدقة عملياً: حيث تُبث كل من csi.HD (1280×720) وcsi.FHD (1920×1080) ودقة 5 ميجابكسل الكاملة csi.WQXGA2 (2592×1944) بصيغة JPEG. اضبط الضغط باستخدام csi.CSI.quality (0-100، أعلى = إطارات أكبر وتفاصيل أكثر):
cam.pixformat(csi.JPEG)
cam.framesize(csi.WQXGA2)
cam.quality(90)
يقع المستشعر على وحدة قابلة للإزالة — استبدله بأي من وحدات كاميرا OpenMV الأخرى (مصراع شامل، حراري، دقة أعلى، إلخ) دون تغيير بقية اللوحة.
تعلّم الآلة¶
تشغّل ml --- التعلم الآلي نماذج TFLite المكمّمة على معالج Cortex‑M7 باستخدام نوى CMSIS‑NN — وهي سريعة بما يكفي للكواشف المدمجة بمعدل بضعة إطارات في الثانية. تُحمَّل النماذج الموجودة على نظام الملفات للقراءة فقط /rom مباشرة من ذاكرة الفلاش دون نسخها إلى RAM. إليك كاشف BlazeFace بدقة 128×128 يضع وجهاً مكتشفاً ونقاطه المعلمية الست فوق كل إطار:
import csi
import time
import ml
from ml.postprocessing.mediapipe import BlazeFace
# Initialize the sensor.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.VGA)
csi0.window((400, 400))
# Load built-in face detection model
model = ml.Model("/rom/blazeface_front_128.tflite", postprocess=BlazeFace(threshold=0.4))
print(model)
clock = time.clock()
while True:
clock.tick()
img = csi0.snapshot()
# faces is a list of ((x, y, w, h), score, keypoints) tuples
for r, score, keypoints in model.predict([img]):
ml.utils.draw_predictions(img, [r], ("face",), ((0, 0, 255),), format=None)
# keypoints is a ndarray of shape (6, 2)
# 0 - right eye (x, y)
# 1 - left eye (x, y)
# 2 - nose (x, y)
# 3 - mouth (x, y)
# 4 - right ear (x, y)
# 5 - left ear (x, y)
ml.utils.draw_keypoints(img, keypoints, color=(255, 0, 0))
print(clock.fps(), "fps")
بطاقة microSD¶
عند إدخال بطاقة يتم تركيبها تلقائياً عند /sdcard وتصبح قابلة للاستخدام عبر نظام الملفات العادي:
import os
for entry in os.listdir("/sdcard"):
print(entry)
مرجع النواقل¶
GPIO¶
استخدم machine.Pin لقراءة أو تشغيل أي من الدبابيس المطبوعة على الطباعة الحريرية. المخارج بنظام 3.3 فولت CMOS، تتحمل 5 فولت على جانب الدخل، ويمكنها امتصاص/مصدرة حتى 25 مللي أمبير لكل دبوس (120 مللي أمبير إجمالاً عبر الترويسة بأكملها).
from machine import Pin
out = Pin("P0", Pin.OUT)
out.on()
out.off()
out.value(1)
inp = Pin("P1", Pin.IN, Pin.PULL_UP)
print(inp.value())
يمكن لأي دبوس دخل أيضاً إطلاق مقاطعة عند انتقالات الحافة:
def handler(pin):
print("triggered:", pin)
Pin("P1", Pin.IN, Pin.PULL_UP).irq(
handler, Pin.IRQ_FALLING | Pin.IRQ_RISING,
)
UART¶
الناقل |
TX |
RX |
|---|---|---|
UART1 |
P1 |
P0 |
UART3 |
P4 |
P5 |
from machine import UART
uart = UART(3, baudrate=115200)
uart.write("hello")
uart.read(5)
I²C¶
الناقل |
SCL |
SDA |
|---|---|---|
I2C2 |
P4 |
P5 |
I2C4 |
P7 |
P8 |
from machine import I2C
i2c = I2C(2, freq=400_000)
i2c.scan()
i2c.writeto(0x76, b"hi")
يمكن أيضاً استخدام العتاد نفسه في الوضع الهدف (التابع) عبر machine.I2CTarget لعرض منطقة ذاكرة لمتحكم I²C آخر:
from machine import I2CTarget
buf = bytearray(32)
target = I2CTarget(2, addr=0x42, mem=buf)
SPI¶
الناقل |
MOSI |
MISO |
SCK |
CS |
|---|---|---|---|---|
SPI2 |
P0 |
P1 |
P2 |
P3 |
from machine import SPI
from machine import Pin
spi = SPI(2, baudrate=10_000_000)
cs = Pin("P3", Pin.OUT, value=1) # CS is not driven by the SPI peripheral
cs.value(0)
spi.write(b"hello")
cs.value(1)
CAN (FDCAN)¶
الناقل |
TX |
RX |
|---|---|---|
FDCAN2 |
P2 |
P3 |
from machine import CAN
can = CAN(2, 500_000)
can.set_filters(None)
can.send(0x123, b"\xDE\xAD\xBE\xEF")
print(can.recv())
ADC وDAC¶
الدبوس P6 هو الدبوس التناظري الوحيد المتاح للمستخدم. يمكن استخدامه إما كدخل ADC بدقة 12 بت أو كخرج DAC.
ADC — النطاق الكامل عند 3.3 فولت على الدبوس:
from machine import ADC import time adc = ADC("P6") while True: voltage = adc.read_u16() * 3.3 / 65535 print(voltage) time.sleep_ms(100)
DAC — عبر
pyb.DAC. تغطي القيمة ذات 8 بت النطاق 0–3.3 فولت:from pyb import DAC dac = DAC("P6") voltage = 1.65 dac.write(int(voltage / 3.3 * 255))
في وضع ADC أو DAC، الدبوس P6 يتحمل 3.3 فولت فقط — لا تغذّه بـ 5 فولت.
PWM¶
الدبوس |
المؤقت / القناة |
|---|---|
P4 |
TIM2 CH3 |
P5 |
TIM2 CH4 |
P6 |
TIM2 CH1 |
P7 |
TIM4 CH1 |
P8 |
TIM4 CH2 |
ملاحظة
المؤقت TIM1 محجوز من قبل البرنامج الثابت لتوليد ساعة بكسل مستشعر الكاميرا، لذا لا يمكن استخدام قنوات TIM1 الموجودة فيزيائياً على P0/P1/P2 لـ PWM الخاص بالمستخدم دون تعطيل الكاميرا.
المؤقت TIM4 مشترك مع pyb.Servo — فإنشاء مثيل سيرفو يعيد ضبط المؤقت بأكمله للعمل بتردد 50 Hz، لذا لا تخلط machine.PWM على P7/P8 مع pyb.Servo في البرنامج النصي نفسه.
شغّل أياً منها عبر machine.PWM
from machine import Pin, PWM
pwm = PWM(Pin("P7"), freq=1_000, duty_u16=32768)
النواقل البرمجية المنبضة بالبت¶
تعمل machine.SoftI2C وmachine.SoftSPI على أي GPIO إذا احتجت إلى ناقل إضافي.
المستشعر الحراري (خارج اللوحة)¶
يتضمن البرنامج الثابت برنامج التشغيل fir --- مشغّل المستشعر الحراري (fir == far infrared) لأجهزة التصوير الحراري الموصّلة خارجياً:
MLX90621 — مصفوفة أشعة تحت حمراء 16 × 4
MLX90640 — مصفوفة أشعة تحت حمراء 32 × 24
MLX90641 — مصفوفة أشعة تحت حمراء 16 × 12
AMG8833 — مصفوفة أشعة تحت حمراء 8 × 8
وصّل الوحدة بناقل I²C الخاص باللوحة واقرأ الإطارات باستخدام fir.init() + fir.snapshot()
import time
import image
import fir
fir.init() # auto‑detects the sensor
clock = time.clock()
while True:
clock.tick()
try:
img = fir.snapshot(x_scale=5, y_scale=5,
color_palette=image.PALETTE_IRONBOW,
hint=image.BICUBIC,
copy_to_fb=True)
except OSError:
continue
print(clock.fps())
يتواصل برنامج التشغيل fir مع المستشعر عبر I²C 2 فقط — وصّل الوحدة بـ P4 (SCL) وP5 (SDA).
التوقيت¶
time¶
تغطي وحدة time التأخيرات الحاجبة والنبضات الرتيبة وقياس الزمن المنقضي:
import time
time.sleep(1) # seconds
time.sleep_ms(500)
time.sleep_us(10)
start = time.ticks_ms()
# ...do work...
elapsed = time.ticks_diff(time.ticks_ms(), start)
المؤقتات الافتراضية¶
تجدول machine.Timer دوال رد النداء الدورية أو ذات اللقطة الواحدة دون استهلاك فتحة مؤقت عتادي. مرّر -1 كمعرّف لاستخدام مؤقت افتراضي (برمجي):
from machine import Timer
one_shot = Timer(-1)
one_shot.init(period=5_000, mode=Timer.ONE_SHOT,
callback=lambda t: print("once"))
periodic = Timer(-1)
periodic.init(period=2_000, mode=Timer.PERIODIC,
callback=lambda t: print("tick"))
قيم الفترة بالمللي ثانية. استدعِ deinit() لإيقاف الفتحة وتحريرها.
ساعة الوقت الحقيقي¶
تحافظ machine.RTC على وقت ساعة الحائط عبر عمليات إعادة الضبط:
from machine import RTC
rtc = RTC()
rtc.datetime((2026, 4, 30, 4, 12, 0, 0, 0)) # Y, M, D, weekday, h, m, s, subsec
print(rtc.datetime())
مراقب البرنامج¶
تعيد machine.WDT ضبط اللوحة إذا تعلّق التطبيق. بمجرد بدئه لا يمكن إيقافه أو إعادة تهيئته — أطعمه دورياً داخل حلقتك الرئيسية:
from machine import WDT
wdt = WDT(timeout=5_000) # 5 second window
while True:
# ...do work...
wdt.feed()
معلومات الإقلاع ووقت التشغيل¶
نافذة محمّل إقلاع USB¶
عند كل تشغيل، تشغّل الكاميرا محمّل إقلاع قصيراً (بضع ثوانٍ) يتيح لـ OpenMV IDE تحديث البرنامج الثابت دون اضطرار المستخدم للدخول إلى وضع DFU. بعد انتهاء النافذة، يسلّم محمّل الإقلاع التحكم إلى boot.py ثم main.py.
يمكن لبرنامج نصي قيد التشغيل إعادة الدخول إلى محمّل الإقلاع عند الطلب باستدعاء machine.bootloader()
import machine
machine.bootloader()
نظام الملفات وترتيب الإقلاع¶
يركّب برنامج H7 Plus الثابت ما يصل إلى ثلاثة أنظمة ملفات عند الإقلاع:
الفلاش الداخلي — يُركّب دائماً عند
/flash. يحتوي علىmain.pyوREADME.txtافتراضياً؛ يُنشأ عند أول إقلاع على الإطلاق.بطاقة microSD — إذا أُدخلت بطاقة فإنها تُركّب عند
/sdcard.ROMFS — نظام ملفات للقراءة فقط معيّن في الذاكرة عند
/romيُستخدم لشحن أصول البيانات الكبيرة (مثل نماذج الذكاء الاصطناعي) التي تستفيد من الوصول بدون نسخ. يُركّب تلقائياً بواسطة MicroPython عند بدء التشغيل، قبل تشغيل أي كود Python خاص بالمستخدم.
بعد التركيب، يُضبط دليل العمل على /sdcard عند وجود البطاقة، وإلا /flash. ثم يشغّل المفسّر البرامج النصية من ذلك الدليل:
يُنفَّذ
boot.pyعند كل إعادة ضبط ناعمة (الإقلاع البارد، أوCtrl‑Dمن REPL، أو كلما عاد البرنامج النصي قيد التشغيل).يُنفَّذ
main.pyفقط عند الإقلاع البارد، مباشرة بعدboot.py. عمليات إعادة الضبط الناعمة اللاحقة تعيد تشغيلboot.pyلكنها تنتقل مباشرة إلى REPL — لإعادة تشغيلmain.pyعليك إعادة ضبط اللوحة بالكامل.
إسقاط ملف boot.py أو main.py على بطاقة SD يتجاوز النسخة الموجودة في الفلاش دون المساس بها — يُبحث عن كلا الملفين في دليل الإقلاع (/sdcard عند تركيب البطاقة، وإلا /flash).
ملف main.py الافتراضي المشحون على لوحة حديثة التحميل يومض فقط بالقناة الزرقاء لـ RGB LED الخاص بالمستخدم كنبضة قلب (نبضتان قصيرتان، فجوة قصيرة)، لتتمكن من معرفة أن البرنامج الثابت أقلع بنجاح دون توصيل أي مضيف.
يُمدَّد sys.path ليشمل أنظمة الملفات الثلاثة جميعها وأدلتها الفرعية lib/، بحيث يمكن أن تتواجد الوحدات القابلة للاستيراد في /flash/lib أو /sdcard/lib أو /rom/lib.
لإجبار النظام على تجاهل بطاقة SD مُدخلة (على سبيل المثال لتشغيل main.py الموجود في الفلاش حتى مع وجود بطاقة)، أنشئ ملفاً فارغاً باسم SKIPSD في جذر /flash.
عند الاتصال عبر USB، يُعدّ نظام ملفات الإقلاع (/sdcard عند وجود بطاقة، وإلا /flash) أيضاً كمحرك تخزين USB كبير الحجم على المضيف، مما يتيح لك تحرير boot.py وmain.py وأي ملفات أخرى مباشرة. أخرج المحرك قبل إعادة ضبط الكاميرا حتى يفرّغ المضيف كتاباته المخزنة مؤقتاً.
ملاحظة
نظراً لأن نظام التشغيل يتعامل مع المحرك كجهاز كتلي سلبي، فإن الملفات التي أنشأها أو عدّلها الكود الذي يعمل على OpenMV Cam لن تظهر حتى يعيد المضيف تركيب المحرك. وإذا كتب كل من نظام التشغيل وOpenMV Cam على نظام الملفات نفسه في الوقت نفسه، فسيفوز نظام التشغيل ويستبدل التغييرات التي أجرتها الكاميرا. استخدم بطاقة SD لأي بيانات يكتبها البرنامج النصي، وأعد التركيب قبل قراءة تلك الملفات من المضيف.
ملاحظة
قد تضيء القناة الحمراء لـ RGB LED الخاص بالمستخدم لفترة وجيزة أثناء قراءة المضيف من محرك تخزين USB كبير الحجم أو الكتابة إليه — هذا مؤشر نشاط مدفوع بالبرنامج الثابت، وليس عطلاً.
أحجام التخزين¶
تأتي H7 Plus بـ:
/flash— نظام ملفات FAT بسعة 24 ميجابايت، للقراءة/الكتابة./rom— نظام ملفات ROMFS للقراءة فقط معيّن في الذاكرة بسعة 8 ميجابايت، يُستخدم لشحن البرامج النصية ونماذج تعلّم الآلة التي تستفيد من الوصول عبر mmap بدون نسخ./sdcard— الحجم الكامل لأي بطاقة microSD مُدخلة (عند وجودها)، للقراءة/الكتابة.
مؤشر العطل الجسيم¶
إذا كان RGB LED الخاص بالمستخدم يتنقل بسرعة عبر جميع الألوان — بسرعة كافية بحيث يبدو وكأنه مصباح LED أبيض متلألئ بدلاً من ألوان متمايزة — فهذا يعني أن البرنامج الثابت اصطدم بعطل جسيم غير قابل للاسترداد. أعد تحميل البرنامج الثابت للاسترداد؛ وإذا لم تساعد إعادة التحميل، فقد تكون اللوحة تالفة فيزيائياً.
المكتبات البرمجية¶
راجع فهرس المكتبة للاطلاع على القائمة الكاملة للوحدات — بما في ذلك الوحدات الفريدة لبناء H7 Plus.