kuhi
kuhi

Reputation: 699

LED not turning on on Nucleo-L031K6 with direct GPIO register access (bare-metal)

I am trying to turn on the LD3 LED (connected to PB3) on the NUCLEO-L031K6 board using direct register access without libraries, but it is not working. The LED does not turn on in the wokwi simulator. I have configured the pin control register, enabled the GPIOB clock, and set pin PB3 as output, but the LED still does not light up.

Here is the code I am using:

// NUCLEO-L031K6
#define   PERIPH_BASE         (0x40000000UL)

#define   AHB_OFFSET          (0x00020000UL)
#define   AHB_BASE            (PERIPH_BASE + AHB_OFFSET)

#define   IO_OFFSET           (0x10000000UL)
#define   IOPORT_BASE         (PERIPH_BASE + IO_OFFSET)

#define   GPIOB_OFFSET        (0x0400UL)
#define   GPIOB_BASE          (IOPORT_BASE + GPIOB_OFFSET)

#define   RCC_OFFSET          (0x00021000UL)
#define   RCC_BASE            (AHB_BASE + RCC_OFFSET)

#define   RCC_IOPENR_OFFSET   (0x2CUL)
#define   RCC_IOPENR          (*(volatile unsigned int *)(RCC_BASE + RCC_IOPENR_OFFSET))

#define   GPIOPBEN            (1U << 1)

#define   GPIOBMODER_OFFSET   (0x00UL)
#define   GPIO_MODER          (*(volatile unsigned int *)(GPIOB_BASE + GPIOBMODER_OFFSET))

#define   GPIO_ODR_OFFSET     (0x14UL)
#define   GPIO_ODR            (*(volatile unsigned int *)(GPIOB_BASE + GPIO_ODR_OFFSET))

#define   GPIOB_PIN3          (1U << 3)    // LD3 user LED

int main() {
    // Enable GPIOB clock
    RCC_IOPENR |= GPIOPBEN;

    // Set GPIOB pin 3 as output
    GPIO_MODER |= (1U << 6);
    GPIO_MODER &=~ (1U << 7);
    GPIO_ODR |= GPIOB_PIN3;  // Turn on LED (set PB3 to HIGH)

    while (1) {
    }
}

Details:

However, the LED is not turning on in the simulator. Is there something I'm missing in the configuration?

What I've tried:

What else can I check or correct to turn on the LED on this board?

Upvotes: 0

Views: 22

Answers (0)

Related Questions