Определение высокого / низкого сигнала на ядре STM32

Я только начал учиться программировать на плате Nucleo и решил выполнить простую задачу. Когда я нажимаю кнопку "Пользователь", я хочу, чтобы мой светодиод включался (в начале выключен). У меня есть следующие вопросы, и я не совсем уверен, что ответ. Мне интересно, специфично ли это для STM32 или это тонкость, которую я не понимаю.

Я запускаю следующий код. Мой опрос состоит в том, что в настоящее время мой светодиод всегда включен, и только когда я нажимаю кнопку пользователя, он гаснет. Мне не имеет смысла, что когда я нажимаю кнопку, значение моего PinState = 0. Я подумал, что оно должно быть одним.

заранее спасибо

    #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);
         }
      }
  }

1 ответ

В электронике сигнал известен как "активный минимум" и представлен полосой __ над символом.

Если вы посмотрите на стр. 64 документации f401re (см. Изображение ниже), то увидите, что кнопка B1 (синяя) имеет подтягивающий резистор. Для программиста это означает, что цифровой сигнал всегда будет 1 до тех пор, пока кнопка не нажата, и 0 когда она нажата.

введите описание изображения здесь

Другие вопросы по тегам