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); // Читати буфер клавіатури

Приклад використання:

//--------------------------------------------------------------
// Файл     : main.c
// Дата     : 02.04.2013
// Версія   : 1.0
// Автор     : UB
// Електронна пошта : mc-4u(@)t-online.de
// Веб      : www.mikrocontroller-4u.de
// ЦП       : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Модуль   : CMSIS_BOOT, M4_CMSIS_CORE
// Функція  : Демонстрація бібліотеки PS2-клавіатури
// Порада   : Ці два файли повинні бути на 8MHz
//              "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 і окрема бібліотека для використання в інших проектах. Автор оригіналу статті просить задавати питання на його сайті німецькою або англійською мовами.

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

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

Top