STM32F4. Урок 29 — Работа с PS2-клавиатурой

Данная библиотека позволяет подключать клавиатуру PS2 к микроконтроллеру STM32F4.

Для работы необходима линия внешнего прерывания и обычный GPIO вывод. Автор использует PB7 и PA8 на плате Discovery.

Клавиатура после инициализации опрашивается и возвращает ASCII-код клавиши назад. Все ключи, которые будут использоваться, должны быть введены в таблицу в C-файле (сдвиг реализован лишь для SHIFT).

Примечание: клавиатуре необходимо около 500мс после включения, прежде чем она начнет работать. Клавиатура на самом деле работает с уровнем 5В и возможно потребуется преобразователь на 3.3В (Автор просто подключил к 3.3В и все заработало).

Для работы с прерываниями необходима библиотека «STM32_UB_EXT_INT5TO9».

Схема подключения PS2:

  • Линия данных (DATA)
  • Не используется
  • Земля (GND)
  • Питание (+5В)
  • Линия тактирования (CLK)
  • Не используется
  • Используемые выводы:

    CLK к PB7 (через прерывание 7)
    DATA к PA8

    Требуемые библиотеки:

    Подключаемые модули CooCox-IDE: GPIO
    Поддерживаемые библиотеки: STM32_UB_EXT_INT5TO9

    Функции:

    void UB_PS2_Key_Init(void); // Инициализация клавиатуры
    uint8_t UB_PS2_Key_GetAscii(void); // Читать буфер клавиатуры

    Пример использования:

    //—————————————————————
    // File : main.c
    // Datum : 02.04.2013
    // Version : 1.0
    // Autor : UB
    // EMail : mc-4u(@)t-online.de
    // Web : www.mikrocontroller-4u.de
    // CPU : STM32F4
    // IDE : CooCox CoIDE 1.7.0
    // Module : CMSIS_BOOT, M4_CMSIS_CORE
    // Funktion : Demo der PS2-Keyboard-Library
    // Hinweis : Diese zwei Files muessen auf 8MHz stehen
    // «cmsis_boot/stm32f4xx.h»
    // «cmsis_boot/system_stm32f4xx.c»
    //—————————————————————

    #include «main.h»
    #include «stm32_ub_ps2_key.h»
    #include «stm32_ub_led.h»

    int main(void)
    {
    uint8_t ascii_wert;

    SystemInit(); // Инициализация настроек кварца

    // Инициализация светодиодов
    UB_Led_Init();

    // Инициализация PS2-клавиатуры
    UB_PS2_Key_Init();

    while(1)
    {
    // Проверка PS2-клавиатуры
    ascii_wert=UB_PS2_Key_GetAscii();
    // Переключить зеленый светодиод при нажатии «а»
    if(ascii_wert==’a’) UB_Led_Toggle(LED_GREEN);

    // Переключить красный светодиод при нажатии «A»
    if(ascii_wert==’A’) UB_Led_Toggle(LED_RED);

    // Переключить синий светодиод при нажатии «F1»
    if(ascii_wert==0x81) UB_Led_Toggle(LED_BLUE);

    // Переключить оранжевый светодиод при нажатии любой кнопки
    if(ascii_wert!=0) UB_Led_Toggle(LED_ORANGE);
    }
    }

    В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

    Оригинал статьи

    Прикрепленные файлы:

    Добавить комментарий

    Ваш адрес email не будет опубликован.