STM32F4. Урок 9 - Тачскрин ADS7843
Ця бібліотека використовується для зчитування дотиків по шині 4-wire з контролером ADS7843 (також ця бібліотека працює з контролерами Zilltek UH7843 або XPTEK XPT2046). Контролер може управлятися через шину SPI, але в цьому прикладі використовувані виводи не пов'язані з шиною SPI процесора. Робота була реалізована на GPIO процесора, оскільки "красивий" спосіб не був найзручнішим. Сам тачскрін працює не дуже добре, при слабкому натисканні дає неточні результати. Для калібрування є функція, з послідовним торканням трьох точок на екрані, після цього тачскрін працює максимально точно (формула для цього була взята з специфікації ATMEL). Калібрування можна виконати тільки один раз, отримавши калібрувальні значення через відладчик і записавши їх безпосередньо в C-File.
Таймер 5 використовується для циклічного зчитування дотиків (кожні 50 мс) і зберігає отримані дані в структурі "Touch_Data". Ця структура може бути легко запитана в основній програмі (в H-файл може бути налаштований окремий таймер для автоматичного опитування структури).
Бібліотека має 4 функції для опитування подій дисплея:
- “OnPressed” - true, поки дотик не закінчиться
- “OnClick” - true, тільки в момент натискання на тачскрін
- “OnRelease” - true, після закінчення дотику
- "OnDoubleClick" - true, при подвійно кліку
Приклад роботи:
Використовувані виводи:
PA15 -> ADS7843_ChipSelect
PB1 -> ADS7843_DIN
PB4 -> ADS7843_Clk
PB5 -> ADS7843_DOUT
PB15 -> ADS7843_PEN
PC2 -> ADS7843_BUSY (в цьому коді не використовується)
Вимоги:
Підключені модулі CooCox-IDE: GPIO, TIM, MISC.
Підтримувані бібліотеки: STM32_UB_LCD_ST7783.
Функції:
ErrorStatus UB_Touch_Init(void); // Ініціалізація тачскріну ErrorStatus UB_Toch_Calibrate(void); // Калібрування тачскріну bool UB_Touch_OnPressed(void); // Подія "OnPressed" bool UB_Touch_OnClick(void); // Подія "OnClick" bool UB_Touch_OnRelease(void); // Подія "OnReleased" bool UB_Touch_OnDoubleClick(void); // Подія "OnDoubleClick"
Приклад використання:
//-------------------------------------------------------------- // Файл : main.c // Дата : 15.08.2013 // Версія : 1.1 // Автор : UB // EMail : mc-4u(@)t-online.de // Веб : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Модуль : CMSIS_BOOT, M4_CMSIS_CORE // Функція : Демонстрація Touch-Library // Примітка : Ці два файли повинні бути на 8MHz // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_lcd_st7783.h" #include "stm32_ub_touch_ads7843.h" int main(void) { SystemInit(); // Ініціалізація налаштувань кварца UB_LCD_Init(); // Ініціалізація дисплея UB_Touch_Init(); // Ініціалізація тачскріну // Колір екрану - синій UB_LCD_FillScreen(RGB_COL_BLACK); while(1) { // Дотик до тачскріну if(Touch_Data.status==TOUCH_PRESSED) { // Коли відбувається дотик, // намалювати піксель за координатами дотику UB_LCD_SetCursor2Draw(Touch_Data.pos.xp,Touch_Data.pos.yp); LCD_RAM=RGB_COL_RED; } } }
В додатку проект CooCox і окрема бібліотека для використання в інших проектах. Автор оригіналу статті просить задавати питання на його сайті німецькою або англійською мовами.
Прикріплені файли:
- ub_stm32f4_touch_ads7843_v107_rus.rar (12 Кб)
- Demo_09_Touch_rus.rar (245 Кб)