SPL: работа с пользовательской кнопкой

     Краткое описание: Для того что бы узнать нажата кнопка или нет мы будем использовать функцию: GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin). Опрос кнопки происходит в бесконечном цикле. Там же выполняется условие: Если кнопка отпущена то светодиод не горит, если нажата то загорается. 

     Задача: Требуется написать с использованием библиотеки StdPeriph код. В основном цикле программы опрашивать пользовательскую кнопку и зажигать пользовательский светодиод при ее нажатии.

#include "stm32f30x.h"
#include "stm32f30x_gpio.h"
#include "stm32f30x_rcc.h"
#include "stm32f30x_syscfg.h"

GPIO_InitTypeDef gpio; //Объявляем переменную gpio типа GPIO_InitTypeDef

int i; //Переменная для цикла задержки

void initAll() //Функция инициализации
{

    RCC_HSICmd(ENABLE); //Включаем тактирование от внутреннего источника
    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); //Подаем тактовый сигнал на системную шину
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE); //Включаем тактирование соответствующих портов

    gpio.GPIO_Mode = GPIO_Mode_OUT; //Выбираем режим работы пинов
    gpio.GPIO_Pin = GPIO_Pin_7; //Выбираем нужны пин
    GPIO_Init(GPIOC, &gpio); //Инициализируем структуру с настройками

    gpio.GPIO_Mode = GPIO_Mode_IN; //Выбираем режим работы пинов
    gpio.GPIO_Pin = GPIO_Pin_0; //Выбираем нужны пин
    GPIO_Init(GPIOC, &gpio); //Инициализируем структуру с настройками
}

int main()
{
    initAll(); //Вызываем функцию инициализации

    while (1) {
        if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_0) == 1) //Узнаем состояние входа PIN0
        {
            GPIO_SetBits(GPIOC, GPIO_Pin_7); //Включаем зеленый светодиод если нажата кнопка
        }
        else {
            GPIO_ResetBits(GPIOC, GPIO_Pin_7); //Если кнопка не нажата выключаем светодиод
        }
    }
}

     Скомпилируйте программу нажав кнопку Build, прошейте микроконтроллер, нажмите RESET. Нажмите пользовательскую кнопку, если все сделано правильно то загорится зеленый светодиод. 

     ВНИМАНИЕ: Приведенный листинг кода не является единственной и оптимальной реализацией поставленной задачи. Пример опубликован с демонстрационной целью. Также автор во избежание переписывания чужих статей, пропускает теоретические основы необходимые для понимания примера, связывая это с тем что всю необходимую информацию можно найти в интернете.

Комментариев (0)

Написать комментарий

Имя *
E-mail
Введите комментарий *
Капча
11 + ? = 18