This project toggles an onboard LED connected to GPIOA Pin 5 of an STM32 microcontroller by directly accessing memory-mapped registers using macros. It avoids using HAL or CMSIS libraries and focuses purely on register-level embedded C.
- LED Connection:
- Port: GPIOA(Port A)
- Pin: 5
- Purpose: Starting base address for peripheral registers in STM32.
- UL: Stands for Unsigned Long to ensure it's treated as a 32-bit constant.
- Purpose: Offset to AHB1 peripheral block from
PERIPH_BASE
.
- Usage: Base address for AHB1 peripherals like GPIO, RCC, etc.
- GPIOA offset from AHB1 base.
- Usage: Base address for GPIOA registers.
- RCC (Reset and Clock Control) offset from AHB1 base.
- Base address for RCC control registers.
- Offset of the AHB1 peripheral clock enable register.
- Points to RCC register enabling AHB1 clocks (like GPIOA).
- Points to GPIOA’s mode register (MODER).
- Offset of Output Data Register (ODR) in GPIO.
- Used to set or clear GPIO output pins like PA5.
- Enables GPIOA clock in RCC register.
- Bitmask for setting Pin 5 of GPIOA.
- Bitmask for clearing Pin 5 of GPIOA.
void delay(volatile unsigned int time)
- A simple software delay using nested loops.
- Not accurate for real-time use.
This project demonstrates:
- Enabling GPIOA via RCC.
- Setting PA5 as output.
- Writing
1
and0
to PA5 using ODR for LED on/off. - Using only low-level register macros without any libraries.