Hawk_08
Hawk_08

Reputation: 89

Definition of High/Low Signal on STM32 Nucleo

I just started to learn how to program with Nucleo board and decided to do a simple task. When I press my User button I want my LED to turn on (Off at the start). I have the following issues and I am not quite sure of what is the answer. I am wondering if it is specific to STM32 or it is a subtlety that I do not understand.

I am running the following code. My interrogation is that currently my LED is always turned on and Only when I press the user button does it go off. It does not make sense to me that When I press my button the value of my PinState = 0. I thought it should be one.

Thank you in advance

    #include "stm32f4xx.h"
    #include "stm32f4xx_nucleo.h"
    #include "system_stm32f4xx.h"
    #include "stm32f4xx_hal_gpio.h"
    #include "stm32f4xx_hal_rcc.h"

    GPIO_InitTypeDef GPIO_InitStructure; 

    int main(void) {

        HAL_Init(); 

        __GPIOA_CLK_ENABLE();
        GPIO_InitStructure.Pin   = GPIO_PIN_5;
        GPIO_InitStructure.Mode  = GPIO_MODE_OUTPUT_PP;    
        GPIO_InitStructure.Pull  = GPIO_PULLUP;
        GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;  
        HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);    

        __GPIOC_CLK_ENABLE();
        GPIO_InitStructure.Pin   = GPIO_PIN_13;
        GPIO_InitStructure.Mode  = GPIO_MODE_INPUT;
        GPIO_InitStructure.Pull  = GPIO_PULLDOWN;
        GPIO_InitStructure.Speed = GPIO_SPEED_FAST;
        HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
        int PinState;
       while (1)
       {
         PinState = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13);

         if(PinState == 1){
              HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_SET);
         }
         else {
             HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5, GPIO_PIN_RESET);
         }
      }
  }

Upvotes: 0

Views: 2316

Answers (2)

Richard at ImageCraft
Richard at ImageCraft

Reputation: 665

In electronic, the signal is known as "active low", and represented by a __ bar over the symbol.

Upvotes: 0

mikelsr
mikelsr

Reputation: 457

If you take a look at page 64 of the documentation of the f401re (see image bellow) you can see the B1 button (the blue one) has a pull-up resistor. For the programmer this means that the digital signal will allways be 1 as long as the button is unpressed, and 0 when it is pressed.

enter image description here

Upvotes: 0

Related Questions