✨ Muskaan Jain — Embedded Firmware Engineer — STM32F4 • Bare‑Metal C • SPI • I²C • USART • DMA • SysTick — Open to Work & Freelance — IST (Asia/Kolkata) ✨
Hi! I turn datasheets into reliable firmware. I design modular, register‑level drivers on STM32F4 and ESP32, with clean APIs, Doxygen docs, and testable examples.
- 🧠 Focus: C (pointers/memory/bitwise) · SPI/I2C/USART/DMA/SysTick · NVIC/EXTI
- 🔬 Philosophy: volatile/const‑correctness, timeouts & error codes, zero hidden magic
- 🧰 Tools: GCC/ARM‑GCC · GDB · ST‑LINK · OpenOCD · VSCode · Valgrind · Git
- ✍️ Building in public: GitHub & LinkedIn posts (#cwithmuskaan)
✨ “I like turning datasheets into reliable firmware.”
- 🟡 Open to: Firmware Engineer · Embedded C Developer · Freelance driver development
- 🌍 Timezone: Asia/Kolkata (IST) · Remote‑friendly
- 🧪 Style: Bare‑metal, register‑level, HAL‑free, MISRA‑aware
- 📫 Best way to reach me: LinkedIn DM (see Contact)
If you need SPI Flash logging, STM32 drivers, or a bring‑up partner, I’m your person.
Languages: C (Embedded), Bash/Make, a bit of C++ for patterns
MCUs & Boards: STM32F407VGT6 (Discovery), ESP32 (ESP‑IDF), ATmega2560, PIC16F877A
Peripherals: UART/USART, SPI, I2C, DMA, SysTick, NVIC/EXTI
Modules/Sensors: Winbond W25Q64FV, GY‑91 MPU9250 + BMP280, ADS7830, u‑blox NEO‑M8N, OLED, LoRa
- ✅ W25Q64FV SPI Flash — JEDEC ID; page/sector/block ops; WEL/Busy checks; sector‑aware erase; page‑aligned R/W; logger layer
- ✅ GPIO/NVIC/EXTI — modular init, edge config, priority, ISR templates
- ✅ USART/UART — blocking + interrupt‑driven TX/RX; shell hooks (planned)
- ✅ SysTick — ms/µs delays; cooperative task hooks; precise reload calc
- ✅ SPI/I2C — register‑level APIs; DMA‑ready
Quality: MISRA‑aware style · bounds checks · HAL‑free · Doxygen comments
Modular driver + logger (globals‑first API by design). Sector‑aware erasing and busy/WEL guards.
Multi‑type stack; Doxygen docs; modular API; test harness.
USART Driver — blocking + IRQ; ring buffer; printf‑style hooks
SPI Driver — 8/16‑bit frames; CPOL/CPHA; DMA‑ready
I2C Minimal Master — start/stop/addr; repeated start; ACK/NACK
BMP280 — compensated temp/pressure (int math)
MPU9250 (GY‑91) — accel/gyro/mag; clean register map
ADS7830 (8‑ch, 8‑bit ADC) — channel select; read API
GPS + IMU + SPI Flash + OLED; scalable logging and visualization.
Cooperative tasking demo using SysTick; NVIC priorities; DMA interactions.
Client/server chat with sockets (TCP, IPv4); select() loop; graceful shutdown.
Access control logic; HC‑05; LCD display; basic anomaly filter; website logging.
Memory Leak Detector — track alloc/free pairs; report leaks
Stack‑Based Memory Allocator (LIFO) — fixed‑pool, O(1) alloc/free; RTOS‑friendly
High‑performance text search using inverted index; hashing; test corpus.
Bitwise, pointers, DSA, and output‑based questions with runnable answers.
Handheld transmitter controls PC pointer via IMU. Two buttons map to L/R click.
- Transmitter: STM32F407VGT6 + MPU9250 (I²C) + nRF24L01+ (2.4 GHz) or ESP‑01 (ESP‑NOW)
- Receiver: STM32F407VGT6 as USB HID Mouse (OTG‑FS) or ESP32 (BLE HID)
- Firmware: Bare‑metal drivers (I²C/SPI/SysTick/DMA); optional W25Q64FV for calibration/logs
More Projects (quick list)
- LED patterns with EXTI button (PD12–PD15); debounced ISR
- UART shell hooks for Flash logger (planned)
- OLED HUD status view (I2C/SPI frame buffer)
- ESP‑IDF FreeRTOS task demos (queues, semaphores, timers)
- Bitwise cheat‑sheet utilities (rotate, masks, parity)
What I build and test with:
- 🧩 STM32F407VGT6 Discovery — GPIOs, EXTI, USART, SPI/I2C, DMA
- 💾 W25Q64FV SPI Flash — page/sector/block; BP bits; QE/WEL checks
- 🛰 NEO‑M8N GPS — UART NMEA parsing; time/location stamps in logs
- 🧭 GY‑91 (MPU9250 + BMP280) — I2C; sensor fusion hooks
- 🖥 OLED — I2C/SPI frame buffer; status HUD
Mini Snippet: precise SysTick delay (µs)
// 168 MHz core -> 168 cycles/us
static inline void delay_us(uint32_t us) {
SysTick->LOAD = (SystemCoreClock / 1000000u) * us - 1u; // exact cycles
SysTick->VAL = 0u;
SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk;
while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0u) { /* wait */ }
SysTick->CTRL = 0u; // stop
}- FreeRTOS on ESP32 (task design & synchronization)
- Shell commands for Flash logger (read/erase/dump/status)
- State/Factory patterns in C to replace switch‑cases in drivers
- W25Q64FV driver: JEDEC, page/sector/block, WEL/Busy guards
- Stable SPI/I2C/USART drivers (STM32F407)
- Flash Logger shell (read/erase/dump/status)
- TrackMaster v0.1: GPS+IMU+Flash+OLED
- Wireless Air Mouse MVP (Tx/Rx, smoothing, click mapping)
- BLE HID receiver variant
- Calibration storage on W25Q64FV; export CSV over UART
C 00 hrs 00 mins-->
📋 Detailed Skills
- Programming: C (pointers, memory mgmt, bitwise), Bash/Make, basic C++ templates for patterns
- Data & DSA: arrays, linked lists (singly/doubly), stacks/queues, trees, hashing; output‑based Qs
- Peripherals: SPI, I2C, USART, DMA, SysTick, EXTI/NVIC; page/sector/block storage concepts
- Debugging: ST‑LINK, SWD, GDB, logic analyzers; timeouts & error codes
- Quality: MISRA‑aware style, modular headers, Doxygen, test harnesses
I’m happy to chat about embedded firmware roles, consulting for driver bring‑up, and project collaborations (STM32/ESP32, SPI/I2C/USART/DMA, storage logging, sensor integration).
- 🔧 Short engagements: debug sessions, driver reviews, optimization passes
- 📦 Medium: feature additions, logging layers, board bring‑up
- 🚀 Long: end‑to‑end firmware for PoCs
✨ “I believe in making complex technology simpler for the next generation of inventors.” ✨
