Библиотека для работы с резистивным тачскрином на контроллере XPT2046 по SPI через HAL для STM32
Библиотека написана для дисплея 240х320 TFT 2.2 от WaveShare с контроллером тачскрина XPT2046. Язык - Си, среда разработки - Keil uVision 5, генератор кода - STM32 CubeMX. В качестве железа была использована отладочная плата STM32 NUCLEO-F446RE с микроконтроллером STM32F446RET6. Обмен данными организован по SPI.
void XPT2046_init(SPI_HandleTypeDef *spi, touchOrienation o, const uint16_t width, const uint16_t height)
- инициализация тачскрина. Здесь необходимо указать интерфейс SPI, по которму будет происходить передача данных, ориентацию дисплея, длину и ширину дисплея.touchStates XPT2046_getTouchState(void)
- получить текущее состояние тачскрина. Возвращает объект, в котором указано текущее состояния нажатия - "Нет нажатия", "Нажат (передний фронт /)", "Короткое удерживание (-)", "Длинное удерживание (-)", "Отпущено (задний фронт )".touch_t XPT2046_getTouch(void)
- получить координаты и состояние нажатия. Можно предварительно не вызыватьXPT2046_getTouchState
, а сразу получать координаты и проверять состояние нажатия.
Для подключения используются 5 проводов:
- MOSI - линия отправки данных SPI
- MISO - линия приёма данных SPI
- SCK - линия тактирования SPI
- T_CS - chip select, указание контроллеру тачскрина что работаем именно с ним
- T_IRQ - линия прерывания по нажатию на тачскрин, активно в низком уровне.
После подключения к микроконроллеру, настройте T_CS на выход, а T_IRQ - на вход (можно настроить прерывание). По необходимости, подправьте в XPT2046.h
макросы работы с пинами.
#include "XPT2046.h"
...
int main(void) {
...
// Инициализация тачскрина
XPT2046_init(&hspi1, XPT2046_LANDSCAPE,320,240);
...
while (1) {
//Получение координат и состояния нажатия
touch_t t = XPT2046_getTouch();
//Если тачскрин удерживается, то рисование круга
if(t.state == T_shortHoldDown || t.state == T_longHoldDown) {
TFT_fillCircle(t.x,t.y,penSize,TFT_COLOR_CURRENT);
}
}
}
Параметры стандартные, старайтесь не превышать скорость более 1.5 МГц. Если у вас на шине несколько устройств с разными параметрами SPI, раскомментируйте строчку #define XPT2046_SPI_PARAM_CONTROL
в XPT2046.h
. Библиотка перед получением данных выставит правильные параметры SPI, а после - вернёт старые.