Gagik Navasardyan

Electrical Engineering, UCLA
g.navasardyan@outlook.com · github · linkedin · résumé (pdf)


I'm an EE student at UCLA with a desire to work on hardware. My interests include embedded systems, PCB design, semiconductors, and more. I care about the layer where software stops being an abstraction and starts being a voltage.

Most of what I do right now is bare-metal firmware on an STM32F411RE. There's no RTOS, no HAL, no Arduino. Just the reference manual, the datasheet, and the registers.

Now

Working through the peripherals of an ARM Cortex-M4 one at a time, from the bottom up: GPIO, UART, SPI, I2C, ADC, DMA, timers, NVIC and EXTI. Every driver written against the register map, compiled with arm-none-eabi-gcc, flashed over SWD, and stepped through in GDB when it inevitably does not work.

A good half of bare metal is clocks. Nothing on the chip exists until RCC says it does. Every baud rate, every sample interval, every millisecond of delay is something you derive from the tree rather than assume, and a peripheral that looks broken is usually just a peripheral nobody turned on. An example below to illustrate.

/* PA5 push-pull output. No library, no wrapper. */
RCC->AHB1ENR  |=  (1U << 0);    /* GPIOA clock on   */
GPIOA->MODER  &= ~(3U << 10);   /* clear PA5 mode   */
GPIOA->MODER  |=  (1U << 10);   /* 01 = output      */
GPIOA->BSRR    =  (1U << 5);    /* atomic set PA5   */

The point is not to make an LED blink. The point is to know exactly which bits made it blink.

Direction

Embedded systems, and the boards underneath them: PCB design in KiCad, power, signal integrity. I want to write firmware for hardware where the failure mode is not a 500 error. Defense, aerospace, nuclear instrumentation. Things that have to work the first time, in the field, with no one around to restart them.

Bench

Silicon
STM32F411RE (Cortex-M4), BME280, MPU6050, W25Q64, SSD1306
Buses
UART, SPI, I2C, DMA, ADC, timers, interrupts
Toolchain
arm-none-eabi-gcc, GDB, OpenOCD over SWD, Make, Neovim, Linux
Instruments
oscilloscope, multimeter, logic analyzer, soldering iron
Languages
C, C++, Python

Message

This is a modal editor. It behaves like the one you are thinking of. Press i to insert, Esc to return to normal mode, and :w to send. :help lists the bindings.


  

Hand-written HTML and CSS. One page, one stylesheet, one script. No frameworks, no trackers, no cookies, no fonts loaded from someone else's server. Last updated August 2026.