Нет реакции на нажатие кнопки в stm32vldiscovery(ответ найден)

Программирую на плате stm32vldiscovery. Кнопка соединена с микроконтроллером через пин A0, светодиод - через пин С9 (кнопка и светодиод встроены в плату). Все нужные библиотеки подключены. Написал следующий код на Си:

#include "stm32f10x.h"
#include "stm32f10x_conf.h"

void main(void)
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  
  GPIO_InitTypeDef GPIO_Init_struct;
  GPIO_StructInit(&GPIO_Init_struct);
  GPIO_Init_struct.GPIO_Pin=GPIO_Pin_0;
  GPIO_Init_struct.GPIO_Speed= GPIO_Speed_2MHz;
  GPIO_Init_struct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_Init_struct);
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  GPIO_InitTypeDef GPIO_Init_struct2;
  GPIO_StructInit(&GPIO_Init_struct2);
 GPIO_Init_struct2.GPIO_Pin = GPIO_Pin_9;
 GPIO_Init_struct2.GPIO_Speed= GPIO_Speed_2MHz;
 GPIO_Init_struct2.GPIO_Mode = GPIO_Mode_Out_PP;
 GPIO_Init(GPIOC, &GPIO_Init_struct2);
  
  int state;

  while (1){
    state = GPIO_ReadInputDataBit(GPIOA, 0);
    if (state){
      GPIO_SetBits(GPIOC, GPIO_Pin_9);
  }
    else{
      GPIO_ResetBits(GPIOC, GPIO_Pin_9);
}
  }}

Ошибки нет, программа компилируется. Только светодиод не горит, когда нажимаю на кнопку, просто всё время находится в выключенном состоянии. Значение GPIO_Mode менять пробовал, ничего не изменилось. Дело именно в кнопке, так как я пробовал инвертировать условие:

if (!state){
      GPIO_SetBits(GPIOC, GPIO_Pin_9);
  }
    else{
      GPIO_ResetBits(GPIOC, GPIO_Pin_9);
}

Светодиод теперь всё время горит, несмотря на нажатие кнопки. Судя по всему, проблема в том, что GPIO_ReadInputDataBit(GPIOA, 0) возвращает всё время только 0.

Решение нашлось. Вместо

state = GPIO_ReadInputDataBit(GPIOA, 0);

надо было писать

state = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);

Ответы (0 шт):