Coder Social home page Coder Social logo

vadrov / stm32-xpt2046-ili9341-dma-irq-spi-temperature-voltage Goto Github PK

View Code? Open in Web Editor NEW
5.0 2.0 2.0 2.08 MB

XPT2046 controller driver (HR2046 and other compatible). Supports all the functionality of the controller: work with the touchscreen, temperature measurement by an internal sensor, voltage measurement at the VBAT and AUX inputs.

License: MIT License

C 98.15% Assembly 0.55% Makefile 1.31%
dma ili9341 irq stm32 temperature touch voltage xpt2046

stm32-xpt2046-ili9341-dma-irq-spi-temperature-voltage's Introduction

Copyright (C) 2019, VadRov, all right reserved / www.youtube.com/@VadRov / www.dzen.ru/vadrov

XPT2046 controller driver (stm32f4, ili9341, xpt2046, dma, irq, temperature, voltage)

XPT2046 controller driver (HR2046 and other compatible). Supports all the functionality of the controller: work with the touchscreen, temperature measurement by an internal sensor, voltage measurement at the VBAT and AUX inputs.

Functions and features:

  • Touch screen polling (in and out of the interrupt) with information about the coordinates and duration of the touch;
  • Determination of the status of the current touch of the touchscreen: no touch, click, hold;
  • Temperature measurement by built-in sensor;
  • Measurement of battery voltage at the input of the VBAT controller (7 pin m/s in the TSSOP-16 housing);
  • Measurement of the voltage at the AUX input of the controller (8 pin m/s in the TSSOP-16 housing).
  • Allows operation on one spi of several devices.

Драйвер контроллера XPT2046 (HR2046 и других совместимых). Поддерживает весь функционал контроллера: работа с тачскрином, измерение температуры внутренним датчиком, измерение напряжений на входах VBAT и AUX.

Проект собран для МК stm32f401ccu6. Этот же проект, но для МК stm32f401cdu6: Скачать с гугле диска

Функции и возможности:

  • Опрос тачскрина (в прерывании и вне прерывания) с получением информации о координатах и длительности касания;
  • Определение статуса текущего касания тачскрина: нет касания, клик, удержание;
  • Измерение температуры встроенным датчиком;
  • Измерение напряжения батареи на входе VBAT контроллера (7 вывод м/с в корпусе TSSOP-16);
  • Измерение напряжения на входе AUX контроллера (8 вывод м/с в корпусе TSSOP-16).
  • Допускает работу на одном spi нескольких устройств.

Схема подключения дисплея с тачскрином (к плате stm32f401ccu6, stm32f411ceu6): stm32 + ili9341+xpt2046 схема подключения

Использование:

  • В среде STM32CubeIDE создайте новый проект для своего МК stm32f4xx. Выполните общую настройку проекта (тактирование, отладка и т.п.). Определите spi для работы с контроллером. Если к этому spi будет подключено еще одно устройство, например, дисплей, то настройте spi (задайте параметры spi) под используемый дисплей. При этом помните, что XPT2046 требует 4-проводного spi (полнодуплексный режим). Определите выводы МК T_CS (выход, GPIO mode -> Output Push Pull) и T_IRQ (вход с внешним прерыванием по спадающему фронту, GPIO mode -> External Interrupt Mode with Falling edge trigger detection). Подтяните вывод T_CS к питанию внутренней подтяжкой (GPIO Pull-up/Pull-down -> Pull-up). Если к одному spi будет подключено несколько устройств, то CS выводы других устройств также притяните к питанию. Кроме того, задайте высокий уровень на всех выходах CS (GPIO output level -> High). Подтяните вывод T_IRQ к питанию внутренней подтяжкой (GPIO Pull-up/Pull-down -> Pull-up), если на вашей плате не распаян резистор, подтягивающий к питанию вывод PENIRQ контроллера XPT2046. Скорость выводов определите в High, скорость линий spi в Very High.
  • В файле stm32f4xx_it.c
  1. Подключить заголовочный файл драйвера
#include "xpt2046.h"
  1. В обработчик SysTick_Handler добавить вызов:
 XPT2046_TIMCallback(touch);
  1. В обработчик внешнего прерывания EXTIxx_IRQHandler (xx определяет линию прерывания) добавить вызов:
 XPT2046_EXTICallback(touch);
  • Определить параметры подключения МК к контроллеру XPT2046:
 XPT2046_ConnectionData cnt_touch = {	.spi 	  = SPI1, //Используемый spi
					.speed 	  = 4, //Скорость spi 0...7 (0 - clk/2, 1 - clk/4, ..., 7 - clk/256)
					.cs_port  = T_CS_GPIO_Port, //Порт для управления T_CS
					.cs_pin	  = T_CS_Pin, //Вывод порта для управления T_CS
					.irq_port = T_IRQ_GPIO_Port, //Порт для управления T_IRQ
					.irq_pin  = T_IRQ_Pin, //Вывод порта для управления T_IRQ
					.exti_irq = T_IRQ_EXTI_IRQn //Канал внешнего прерывания
};
  • Объявить переменную обработчика XPT2046:
 XPT2046_Handler touch1;
  • Инициализировать обработчик XPT2046:
 XPT2046_InitTouch(&touch1, 20, &cnt_touch);

Параметр 20 определяет период счета внутреннего таймера обработчика. Таймер обработчика привязан к системному таймеру, который должен быть настроен на генерацию прерываний 1000 раз в секунду. Таким образом, опрос тачскрина в прерывании будет происходить 1000/20 = 50 раз в секунду.

  • Произвести калибровку тачскрина:
  XPT2046_CalibrateTouch(&touch1, lcd); //Запускаем процедуру калибровки

Опрос тачскрина может осуществляться в прерывании драйвера (touch1.fl_interrupt = 1) либо в программе пользователя (touch1.fl_interrupt = 0). Если опрос осуществляется вне прерывания драйвера, то необходимо вызывать в программе пользователя перед получением статуса и координат касания:

uint8_t res = XPT2046_GetTouch(&touch1); //res = 0 - опрос успешный, res = 1 - нет касания, res = 2 - spi занято
  • Для получения координат касания:
tPoint point_d; //координаты касания на дисплее: x соответствует point_d.x, а у - point_d.y
XPT2046_ConvertPoint(&point_d, &touch1.point, &touch1.coef); //Преобразуем координаты тачскрина в дисплейные

Текущий статус касания определяет параметр touch1.status. Если touch1.status = XPT2046_STATUS_NOCLICK, то нет клика; touch1.status = XPT2046_STATUS_CLICK - есть клик, touch1.status = XPT2046_STATUS_HOLD - есть удержание. Время перехода касания из статуса "клик" в статус "удержание" определяет параметр XPT2046_TOUCH_HOLD_TIME (файл xpt2046.h).

Автор: VadRov

Контакты: Youtube Дзен VK Telegram

Поддержать автора: donate.yoomoney

stm32-xpt2046-ili9341-dma-irq-spi-temperature-voltage's People

Contributors

vadrov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

koson des-808

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.