Данная библиотека позволяет подключать клавиатуру PS2 к микроконтроллеру STM32F4.
Для работы необходима линия внешнего прерывания и обычный GPIO вывод. Автор использует PB7 и PA8 на плате Discovery.
Клавиатура после инициализации опрашивается и возвращает ASCII-код клавиши назад. Все ключи, которые будут использоваться, должны быть введены в таблицу в C-файле (сдвиг реализован лишь для SHIFT).
Примечание: клавиатуре необходимо около 500мс после включения, прежде чем она начнет работать. Клавиатура на самом деле работает с уровнем 5В и возможно потребуется преобразователь на 3.3В (Автор просто подключил к 3.3В и все заработало).
Для работы с прерываниями необходима библиотека «STM32_UB_EXT_INT5TO9».
Схема подключения PS2:
Используемые выводы:
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 и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_ps2_key_v100_rus.rar (8 Кб)
- Demo_29_PS2_KEY_rus.rar (192 Кб)