
Pantalla
jbmata/stm32h743-touchgfx-display
STM32H743 firmware for a TouchGFX display with CAN telemetry, SD logging, and project documentation

MainLite: minimal STM32H733ZG module (AMS / ECU / uDV on a backplane) — KiCad design + machine-readable pin model
MAIN LITE is an open-source printed circuit board by isc-fs, from the isc-fs/IFS08-ES-MainLite repository on GitHub. It is a 2-layer board of 40 × 60 mm with 80 parts on 159 nets, routed with 1,034 tracks and 174 vias.
It is built around the TCAN330D, BMI088 and LD39200PU33R, with the ESD9B5.0ST5G among its other parts. Its parts include 29 resistors, 26 capacitors, 6 ICs, 6 diodes and 5 connectors. It belongs with the STM32 boards of this library.
Hardware design, KiCad schematic and PCB layout of the MainLite, the minimal STM32H733ZG control module of the IFS08, developed for the ISC Formula Student Racing Team (Season 2025/2026). Mounted on a backplane, the same module becomes the AMS, the ECU or the uDV.
[blocked]
[blocked]
[blocked]
[blocked]
Create a GitHub account if you don't have one yet.
Download and install GitHub Desktop (beginner) or Git CLI (advanced).
Clone this repository to your machine:
git@github.com:isc-fs/IFS08-ES-MainLite.githttps://github.com/isc-fs/IFS08-ES-MainLite.gitOpen IFS08-MainLite/MAIN_LITE.kicad_pro with KiCad 9.x.
The repository follows standard ISC branching rules:
main is the production branch. It contains only validated hardware releases, schematics, and documentation ready for track operations. Never work directly on it.dev (or active feature branches) is the development and integration point. Never commit directly to main — all changes arrive through a reviewed Pull Request.main ──────────────────●──────────────────────●──▶ (validated releases only)
↑ ↑
dev ──────●───●───●───●───●───●───●───●───●──●──▶ (continuous integration)
↑ ↑ ↑ ↑ ↑ ↑ ↑
feat/1 fix/1 feat/2 fix/2 feat/3 fix/3All work — whether a new hardware revision, firmware update, or bug fix — is done on a feature branch created from dev (or main). When the work is ready, a Pull Request is opened, reviewed, merged, and the branch is deleted.
feat/<n> → new functionality / hardware addition (feat/1, feat/2, feat/3 ...)
fix/<n> → bug fix / schematic correction (fix/1, fix/2, fix/3 ...)git checkout dev
git pull origin dev
git checkout -b feat/your-feature-namegit add .
git commit -m "feat(hw): add reverse polarity protection to 5V input"git push origin feat/your-feature-namedev, verify 0 KiCad DRC/ERC errors, provide test evidence, and request review from the Electronics Subsystem Technical Director.The MainLite is a small, self-contained STM32H733ZG module: MCU, 3.3 V regulation, three CAN transceivers, IMU, microSD, USB-C and SWD. Everything that changes between car subsystems lives on the backplane it plugs into through two 1×18 2.54 mm headers (J3 and J4):
| Role | Node id (CAN bootloader) | Flash bus |
|---|---|---|
| ECU — vehicle control unit | 0x1 | FDCAN2 |
| AMS — accumulator management system | 0x2 | FDCAN1 |
| uDV — driverless interface | 0x3 | FDCAN2 |
Every MainLite carries the ISC CAN bootloader in flash sector 0.
+--------------------------------------------------------------+
USB-C (J5) ---+ ESD (D3/D4) +5V <- VBUS (D11) SWD (J2: GND/CLK/DIO/VDD)
| |
+5V (J4.17/18)+--> LD39200 (U1) --> VDD 3.3 V --> J4.15/16 |
| |
| +--------------------------------------------+ |
| | STM32H733ZGTx (U5, LQFP-144) | |
| | HSE 24 MHz (Y1) | |
| +--+---------+---------+---------+------+----+ |
| |FDCAN1 |FDCAN2 |FDCAN3 |I2C2 |SDMMC1 |
| TCAN330 TCAN330 TCAN330 BMI088 microSD (J1) |
| (U2) (U3) (U4) (IC1) 4-bit, CD PE3 |
| 120R R1 120R R5 120R R9 |
+--------+---------+---------+-----------------------------+---+
| | | |
J4.3/4 CAN1 J4.5/6 CAN2 J4.7/8 CAN3 J3: 13 GPIO, USART10, 1-Wire
J4: SPI1 + nRF24 CS/CE/IRQ| Block | Part | Notes |
|---|---|---|
| MCU | STM32H733ZGTx (U5) | Cortex-M7 @ 550 MHz, 1 MB flash, LQFP-144 |
| Clock | 24 MHz crystal (Y1) | HSE on PH0/PH1, 10 pF load caps (C5/C6) |
| 3.3 V rail | ST LD39200PU33R (U1) | From +5V (backplane J4.17/18 or USB VBUS through D11) |
| CAN | 3× TI TCAN330 (U2/U3/U4) | FDCAN1 PD0/PD1, FDCAN2 PB12/PB13, FDCAN3 PG10/PG9; fixed 120 Ω terminations R1/R5/R9 |
| IMU | Bosch BMI088 (IC1) | I2C2 PF0/PF1, accel 0x18, gyro 0x68, no external pull-ups |
| Storage | microSD (J1, Molex 104031-0811) | SDMMC1 4-bit PC8–PC12/PD2, 33 Ω series, 47 kΩ pull-ups, card detect PE3 |
| USB | USB-C (J5, GCT USB4085) | USB_OTG_HS FS PHY PA11/PA12, VBUS sense PA9 (100k/47k) |
| Debug | 1×4 header (J2) | GND, SWCLK (PA14), SWDIO (PA13), VDD |
| Status | 2× LED | OK_STATUS PD14, ERR_STATUS PD15 |
| Buttons | SW1 / SW2 | BOOT0, NRST |
| VBAT | — | Not connected (no backup battery) |
| Pin | J3 net | J3 MCU | J4 net | J4 MCU / part |
|---|---|---|---|---|
| 1 | GND | — | GND | — |
| 2 | GND | — | GND | — |
| 3 | DS18B20_REFRI | PD5 (pin 119) | CANL1 | R1.2, U2.6 |
| 4 | USART10_RX | PG11 (pin 126) | CANH1 | R1.1, U2.7 |
| 5 | USART10_TX | PG12 (pin 127) | CANH2 | R5.1, U3.7 |
| 6 | GPIO1 | PB4 (pin 134) | CANL2 | R5.2, U3.6 |
| 7 | GPIO2 | PB5 (pin 135) | CANH3 | R9.1, U4.7 |
| 8 | GPIO3 | PB6 (pin 136) | CANL3 | R9.2, U4.6 |
| 9 | GPIO4 | PB7 (pin 137) | NRF24_CS | PB0 (pin 46) |
| 10 | GPIO5 | PB8 (pin 139) | NRF24_CE | PC5 (pin 45) |
| 11 | GPIO6 | PB9 (pin 140) | NRF24_IRQ | PC4 (pin 44) |
| 12 | GPIO7 | PF7 (pin 19) | SPI1_MOSI | PA7 (pin 43) |
| 13 | GPIO8 | PF8 (pin 20) | SPI1_MISO | PA6 (pin 42) |
| 14 | GPIO9 | PF9 (pin 21) | SPI1_SCK | PA5 (pin 41) |
| 15 | GPIO10 | PF10 (pin 22) | VDD | — |
| 16 | GPIO11 | PC0 (pin 26) | VDD | — |
| 17 | GPIO12 | PC1 (pin 27) | +5V | — |
| 18 | GPIO13 | PC2_C (pin 28) | +5V | — |
Per-role use of these pins (which GPIO is which signal on the AMS, ECU or uDV backplane) is defined by each backplane design.
model/mainlite.pins.yaml (JSON twin: mainlite.pins.json) lists all 144 pins of U5: net, alternate function, whether and where each one leaves the module on J3/J4, and what it connects to on the board. It also describes the CAN, SDMMC, I2C, HSE, VBAT, SWD and USB interfaces. tools/gen_pins.py generates it from the schematic; CI fails a PR whose committed model is stale or whose schematic has KiCad ERC errors. Each change that reaches main is published as a pin-model-vX.Y release, so other repos (e.g. the virtual HIL) can check their pin definitions against a pinned version.
python3 tools/gen_pins.py # after any schematic change; commit model/Format, versioning and how to consume it: docs/pin-model.md.
| Document | File Link | Description | Status |
|---|---|---|---|
| Work Order (PDF) | 📄 WO_ES-IFS08-MainLite.pdf | Formal Work Order (WO-IFS08-MLITE-001): requirements, interfaces, verification protocol and QA sign-off sheet. | Rev 1.0 |
| Work Order (DOCX) | 📄 WO_ES-IFS08-MainLite.docx | Word source of the Work Order, on the ISC base template styles. | Rev 1.0 |
| Markdown Specification | 📄 WORK_ORDER_MAIN_LITE.md | Synchronized Markdown version of the Work Order for Git version control and quick online reference. | Rev 1.0 |
| Schematic (PDF) | 📄 MAIN_LITE_schematic.pdf | Eeschema PDF export of the schematic. | v1.1 |
| Interactive BOM | 📄 MAIN_LITE_v1-1_BOM.html | InteractiveHtmlBom export for assembly. | v1.1 |
| Pin model | 📄 pin-model.md | Format and use of the generated pin model. | Schema v1 |
| Fabrication outputs | 📁 production/ | Gerbers/drill (MAIN_LITE.zip), BOM, CPL and IPC netlist as sent to fab. | v1.1 |
IFS08-ES-MainLite/
├── .github/workflows/ # CI: pin-model check + ERC, model release on main
├── docs/ # Documentation
│ ├── bom/
│ │ └── MAIN_LITE_v1-1_BOM.html # Interactive BOM
│ ├── MAIN_LITE_schematic.pdf # Schematic PDF export
│ ├── pin-model.md # Pin model format & usage
│ └── WORK_ORDER_MAIN_LITE.md # Synchronized Markdown Work Order
├── IFS08-MainLite/ # KiCad Project Files (KiCad 9.x)
│ ├── Libraries/ # Local symbols & footprints (BMI088, LD39200, LSM115J, switch, ISC logo, MainLite module)
│ ├── production/ # Fabrication outputs (Gerbers, BOM, CPL)
│ ├── fp-lib-table # Footprint Library Table
│ ├── sym-lib-table # Symbol Library Table
│ ├── MAIN_LITE.kicad_pro # KiCad Project File
│ ├── MAIN_LITE.kicad_sch # Schematic
│ └── MAIN_LITE.kicad_pcb # PCB Layout
├── model/ # GENERATED pin model (mainlite.pins.yaml / .json)
├── tests/ # Pin model invariants (unittest)
├── tools/ # gen_pins.py, kicad_export.sh, erc_summary.py, ST pin data
├── WO_ES-IFS08-MainLite.pdf # Official Work Order (PDF)
├── WO_ES-IFS08-MainLite.docx # Official Work Order (Word)
├── .gitignore # KiCad and OS Ignore Rules
└── README.md # Repository DocumentationLibraries/MAIN_LITE/ holds the MainLite module symbol and footprint that backplane designs place to mate with J3/J4.
ISC Racing Team — IFS08 Electronics Subsystem
| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 100nF | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C8, C9, C10, C11, C12, C13, C14, C15, C16, C17, C18, C28 |
| 9 | 33R | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R3, R6, R8, R26, R29, R30, R31, R32, R33 |
| 7 | 47k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R14, R16, R17, R18, R19, R20, R21 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_DIN965_Pad | H1, H2, H3, H4 |
| 3 | 120R | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R1, R5, R9 |
| 3 | TCAN330 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2, U3, U4 |
| 2 | 100n | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C4, C20 |
| 2 | 100nF | Capacitor_SMD:C_0402_1005Metric | C21, C22 |
| 2 | 10k | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R4, R40 |
| 2 | 10p | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C5, C6 |
| 2 | 10u | Capacitor_SMD:C_0603_1608Metric | C1, C2 |
| 2 | 1k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R11, R12 |
| 2 | 1u | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C3, C19 |
| 2 | 2.2uF | Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder | C29, C30 |
| 2 | 2u2 | Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder | C7, C27 |
| 2 | 5k1 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R50, R51 |
| 2 | Conn_01x18_Pin | Connector_PinHeader_2.54mm:PinHeader_1x18_P2.54mm_Vertical | J3, J4 |
| 2 | ESD9B5.0ST5G | Diode_SMD:D_SOD-923 | D3, D4 |
| 2 | LED | LED_SMD:LED_0805_2012Metric | D1, D2 |
| 2 | SW_Push | Button_Switch_SMD:SW_SPST_B3U-1000P-B | SW1, SW2 |
| 1 | 100k | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R13 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric | R2 |
| 1 | 24MHz | Crystal:Crystal_SMD_2520-4Pin_2.5x2.0mm | Y1 |
| 1 | 47R | Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolder | R7 |
| 1 | 4k7 | Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder | R10 |
| 1 | BMI088 | BMI088:BMI088 | IC1 |
| 1 | Conn_01x04_Socket | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J2 |
| 1 | G | LED_SMD:LED_0805_2012Metric | LED1 |
| 1 | LD39200PU33R | LD39200:SON95P300X300X100-7N-D | U1 |
| 1 | LOGO | Logo_ISC:LogoISC | G3 |
| 1 | LSM115JE3_TR13 | LSM115JE3_TR13:DIOM5436X330N | D11 |
| 1 | Micro_SD_Card_Det1 | Connector_Card:microSD_HC_Molex_104031-0811 | J1 |
| 1 | STM32H733ZGTx | Package_QFP:LQFP-144_20x20mm_P0.5mm | U5 |
| 1 | USB_C_Receptacle_USB2.0_14P | Connector_USB:USB_C_Receptacle_GCT_USB4085 | J5 |

jbmata/stm32h743-touchgfx-display
STM32H743 firmware for a TouchGFX display with CAN telemetry, SD logging, and project documentation

pms67/HadesFCS
Complete flight control system designed from scratch. Hardware designed with KiCad.

oresat/oresat-adcs-hardware
Controller PCB for OreSat reaction wheels, magnetorquers, IMU, and magnetometers


sandgum/Triangulate-ES_01-Watch
A 5mm thick smartwatch which uses an E-ink display and two OLEDs to display information while consuming very little power

RocketryVT/active-drag-system
Eigen Library, cmake, and arm-none-eabi-gcc tooling required for successful build.


It measures 40 × 60 mm and has 2 copper layers, 1.2 mm thick.
80 parts, built around the TCAN330D, BMI088, LD39200PU33R and ESD9B5.0ST5G. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the isc-fs/IFS08-ES-MainLite repository on GitHub, at the commit this page was made from: the board is IFS08-MainLite/MAIN_LITE.kicad_pcb and its schematic IFS08-MainLite/MAIN_LITE.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask isc-fs before reusing the design.