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

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

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

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

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

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

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

  1. Линия данных (DATA)
  2. Не используется
  3. Земля (GND)
  4. Питание (+5В)
  5. Линия тактирования (CLK)
  6. Не используется

Используемые выводы:

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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.