STM32 (LL)
Work with STM32 closer to the metal using LL (Low-Layer) drivers. Implement GPIO, timers, USART, ADC, and PWM by handling what HAL hides, and compare against the HAL version to see the real cost of abstraction.
Projects
Control GPIO directly with LL drivers
~100 minSubscription neededControl GPIO with register-level functions like LL_GPIO_SetOutputPin, closer to the metal than HAL. Compare real HAL and LL code side by side to see what the abstraction layer actually hides.
Handle interrupts with LL timers
~110 minSubscription neededConfigure timer interrupts directly with LL_TIM functions and NVIC settings. Handle the interrupt vector wiring and priority setup that HAL used to do automatically.
Implement USART communication with LL
~110 minSubscription neededImplement communication by checking register flags directly with LL_USART_TransmitData8/IsActiveFlag_RXNE. Build the instinct for controlling polling/interrupt flow yourself, without HAL's callback structure.
Work with LL ADC conversions
~100 minSubscription neededRead analog values by directly polling LL_ADC_REG_StartConversion and the conversion-complete flag. Actually compare how much latency drops versus HAL.
Control a motor with LL PWM output
~120 minSubscription neededControl a motor by writing duty cycle straight to a register with LL_TIM_OC_SetCompareCH1. Combine GPIO, timers, and ADC into the LL version of the 'control motor speed with a potentiometer' capstone.