Skip to content
View MuskaanJain2021's full-sized avatar

Block or report MuskaanJain2021

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don't include any personal information such as legal names or email addresses. Markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
MuskaanJain2021/README.md

typing

Muskaan Jain — Embedded Firmware Engineer — STM32F4 • Bare‑Metal C • SPI • I²C • USART • DMA • SysTick — Open to Work & Freelance — IST (Asia/Kolkata) ✨


🚀 About Me

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.”

✨ Quick Facts & CTA

  • 🟡 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.


🛠 Tech Focus

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


📌 Drivers & Building Blocks

  • 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


📂 Featured Projects

🔹 W25Q64FV SPI Flash Data Logger

Modular driver + logger (globals‑first API by design). Sector‑aware erasing and busy/WEL guards.

🔹 FlexiStack (Generic Stack in C)

Multi‑type stack; Doxygen docs; modular API; test harness.

🔹 STM32F407 Driver Suite

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

🔹 Sensor Drivers (I2C/SPI)

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

🔹 TrackMaster (WIP)

GPS + IMU + SPI Flash + OLED; scalable logging and visualization.

🔹 Multitasking on STM32F407 (SysTick)

Cooperative tasking demo using SysTick; NVIC priorities; DMA interactions.

🔹 TCP/IP Chat (Linux)

Client/server chat with sockets (TCP, IPv4); select() loop; graceful shutdown.

🔹 Automatic Temperature Detector (ATmega2560 + MLX90614)

Access control logic; HC‑05; LCD display; basic anomaly filter; website logging.

🔹 Memory Utilities

Memory Leak Detector — track alloc/free pairs; report leaks
Stack‑Based Memory Allocator (LIFO) — fixed‑pool, O(1) alloc/free; RTOS‑friendly

🔹 Inverted Search

High‑performance text search using inverted index; hashing; test corpus.

🔹 C Interview Guide (190+ days)

Bitwise, pointers, DSA, and output‑based questions with runnable answers.

🔹 Wireless Air Mouse (Upcoming)

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

📌 Pinned Cards

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)

🔧 Hardware Lab

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
}

🧪 What I’m Exploring Now

  • 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

🗺️ Roadmap & Milestones

  • 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

🏆 Trophies

🧭 Profile Summary

📊 GitHub Statistics

🔥 Contribution Graph

C              00 hrs 00 mins

-->


🧰 Skills (Badges)

C ARM Cortex-M4 STM32 ESP32 GCC GDB Git OpenOCD Valgrind VSCode Linux
📋 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

🤝 Work With Me

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

📬 Connect

“I believe in making complex technology simpler for the next generation of inventors.”

Pinned Loading

  1. C-Shell C-Shell Public

    v1.0

    C 1 1

  2. WQ25X_FLASH WQ25X_FLASH Public

    STM32F07VGT6 DRIVER FOR FLASH W25QX_FLASH

    C

  3. ESP-WROOM-32-Modbus-Demo ESP-WROOM-32-Modbus-Demo Public

    Understanding Modbus protocol

    C 1

  4. INVERTED_SEARCH INVERTED_SEARCH Public

    CONCEPT USED IS LINKED LIST AND HASHING

    C

  5. Mastering_STM32 Mastering_STM32 Public

    C

  6. C_INTERVIEW_GUIDE C_INTERVIEW_GUIDE Public

    C 17 4