Переключатель светодиода на плате обнаружения STM с внешней кнопкой

#stm32 #microcontroller

#stm32 #микроконтроллер

Вопрос:

Я новичок в программировании микроконтроллеров. У меня есть плата обнаружения STM32F072, и я хочу использовать с ней внешнюю кнопку. Я использую Visual Studio Code. Я подключил кнопку к выходу 3 В, а другую сторону — к контакту A10, который настроен следующим образом:

   /*Configure GPIO pin : PA10 */
  GPIO_InitStruct.Pin = GPIO_PIN_10;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, amp;GPIO_InitStruct);
 

Затем я написал функцию для считывания состояния кнопки

 uint8_t read_button(void)
{
    uint8_t button_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_10);

    return button_state;
}
 

Я вызываю функцию в бесконечном цикле while в main.c, где моя идея была довольно простой:

 button_state = read_button();
if (button_state == 1)
{
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
} 
 

(Вывод C6 соединен с красным светодиодом) После сборки и загрузки красный светодиод всегда горит. Кнопка ничего не делает.
Кто-нибудь может дать мне подсказку, что я делаю не так?
Большое вам спасибо!

Комментарии:

1. Как вы думаете, будет ли уровень на PA10 восприниматься как «низкий»? У вас есть внешний выдвижной резистор?

Ответ №1:

это нормально, что светодиод всегда горит, вы никогда не отключаете его в своем коде.

 button_state = read_button();
if (button_state == 1)
{
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
} 
else
{
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
}
 

При этом светодиод будет гореть при нажатии кнопки и выключаться в противном случае.