- Лоботрясы

Поиск
Перейти к контенту

Главное меню:

Библиотеки для STM32

Читать в Яндекс.Подписках



     Библиотека матричной клавиатуры 3x4 и 4x4 для микроконтроллеров STM32
Просмотров: 2296
     Очередное портирование одной из своих библиотек. Подключение клавиатуры 3х4 или 4х4 к выводам микроконтроллера STM32 аналогично рисункам из статьи по подключению клавиатуры для AVR. Там же смотрите и возможные варианты возвращаемых кодов кнопок. 
     Библиотека позволяет подключить строки и столбцы клавиатуры как к одному так и к разным портам микроконтроллера, главное условие  чтобы подключены они были к смежным выводам каждого порта (например: строки клавиатуры подключены к выводам 2…5 порта GPIOD, а столбцы – к выводам 4…6 порта GPIOB).
     Библиотека рассчитана на то, что выводы микроконтроллера, подключённые к строкам клавиатуры, будут сконфигурированы на выход, а выводы микроконтроллера, подключённые к столбцам клавиатуры, будут сконфигурированы на вход. 
     Библиотека оформлена в виде одного файла keyboard.hВ начале библиотеки необходимо выбрать тип клавиатуры (3х4 или 4х4), тип микроконтроллера (Cortex-M0, Cortex-M3 или Cortex-M4).  Для работы данной библиотеки ОБЯЗАТЕЛЬНО выбрать в Репозитории CooCoxа библиотеку GPIO! Частоту работы портов клавиатуры установил минимальную в 2 МГц. Главное, чтобы частота опроса клавиатуры (вызовом функции KeypadScan() в функции-обработчике прерывания любого выбранного вами таймера) была ниже скорости работы этих портов.
     Итак, возможные настройки в начале библиотеки:

#define KEYBOARD_3x4  //Если закомментировано, тогда применяется клавиатура 4x4
#define MAX_VALUE    20 //Антидребезговая выдержка времени - можете поэкспериментировать с этим значением :-)

#define CORTEX_M     0 //0 для Cortex-M0, 3 для Cortex-M3 и 4 для Cortex-M4
#define GPIOSPEED     GPIO_Speed_2MHz //Частота работы портов 

//Подключение столбцов (вход микроконтроллера) 
#define KEYPAD_COLUMN    GPIOA //Порт, подключённый к столбцам (ко входу)
#if CORTEX_M==0
#define RCC_COLUMN    RCC_AHBPeriph_GPIOA // RCC_AHBPeriph_GPIOB, RCC_AHBPeriph_GPIOC... - включение тактирования
#elif CORTEX_M==3
#define RCC_COLUMN    RCC_APB2Periph_GPIOA //RCC_APB2Periph_GPIOB, RCC_APB2Periph_GPIOC... - включение тактирования
#elif CORTEX_M==4
#define RCC_COLUMN    RCC_AHB1Periph_GPIOA // RCC_AHB1Periph_GPIOB, RCC_AHB1Periph_GPIOC... - включение тактирования
#endif
#define NUM_COLUMN    3 //Количество столбцов клавиатуры
#define FIRST_BIT_COLUMN    1 //С какого бита подключены столбцы

//Подключение строк (выход микроконтроллера)
#define KEYPAD_ROW    GPIOA //Порт, подключённый к строкам (к выходу)
#if CORTEX_M==0
#define RCC_ROW    RCC_AHBPeriph_GPIOA // RCC_AHBPeriph_GPIOB, RCC_AHBPeriph_GPIOC...
#elif CORTEX_M==3
#define RCC_ROW    RCC_APB2Periph_GPIOA //RCC_APB2Periph_GPIOB, RCC_APB2Periph_GPIOC... - включение тактирования
#elif CORTEX_M==4
#define RCC_ROW    RCC_AHB1Periph_GPIOA // RCC_AHB1Periph_GPIOB, RCC_AHB1Periph_GPIOC...
#endif
#define NUM_ROW     4 //Количество строк клавиатуры
#define FIRST_BIT_ROW     4 //С какого бита подключены строки

//****************************************************************
//                                ПРОТОТИПЫ ФУНКЦИЙ
//****************************************************************

//Инициализация клавиатуры
void KeypadInit(void);

//Проверка нажатия хотя бы одной кнопки
char KeypadCheck(void);

//Получение кода нажатой кнопки. Запускать функцию в основном цикле
char KeypadRead(void);

//Функция сканирования клавиатуры (запускается в прерывании таймера). Функция работает в прерывании таймера!
void KeypadScan(void);

     Пользовательскими являются только функции KeypadInit()KeypadRead() и KeypadScan(). Причём функцию KeypadScan() нужно установить в функцию обработчик прерывания по переполнению (или совпадению – как вашей душе угодно) таймера, а с помощью функции KeypadRead() в основном цикле программы уже получаете результат (код) нажатой кнопки клавиатуры.
     В железе данный код ещё не проверял, но должно работать, если нет - пинайте :-)

     Скачать:

Опубликовано 21.02.2015
© Igoryosha, 2015
 
 
Назад к содержимому | Назад к главному меню