#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);
}
При этом светодиод будет гореть при нажатии кнопки и выключаться в противном случае.