Interfaz de una pantalla táctil resistiva de cuatro hilos con STM32F429DISCOVERY

Estoy tratando de conectar una pantalla táctil resistiva de 4 hilos a una placa Discovery STM32F429, pero no puedo entender cómo funciona. Quiero que la MCU detecte un toque, así que configuré los 4 pines así:

X+ --> input w/pullup connected to EXTI external interrupt 
X- --> input floating (tristated)
Y+ --> input floating (tristated)
Y- --> output to GND

en esta configuración, debería poder detectar un toque y activar una interrupción en la línea EXTI para poder ingresar un ISR y muestrear los valores x e y con el ADC. Pero cuando conecto el pin X-, el pin X+ se acerca a GND. Parece que la corriente fluye entre X+ y X- (¿así que X- no está triestablecido?). Aquí está el código que uso para configurar los pines GPIO:

GPIO_InitTypeDef gpio;
gpio.Pin = GPIO_PIN_2 | GPIO_PIN_1;
gpio.Mode = GPIO_MODE_INPUT;
gpio.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &gpio);

gpio.Pin = GPIO_PIN_0;
gpio.Mode = GPIO_MODE_INPUT;
gpio.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA, &gpio);

gpio.Pin = GPIO_PIN_5;
gpio.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(GPIOA, &gpio);

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);

/* initialization using registers, works the same as above */

//  /* Xr and Yu open (input floating) */
//  GPIOA->MODER &= ~(GPIO_MODER_MODE2 | GPIO_MODER_MODE1);
//  GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPD2 | GPIO_PUPDR_PUPD1);
//
//  /* Xl input with pull-up */
//  GPIOA->MODER &= ~GPIO_MODER_MODE0;
//  GPIOA->PUPDR |= GPIO_PUPDR_PUPD0_0;
//
//  /* Yd to GND (output set to 0) */
//  GPIOA->MODER |= GPIO_MODER_MODE5_0;
//  GPIOA->ODR &= ~GPIO_ODR_OD5;

No puedo entender qué estoy haciendo mal o cómo configurar correctamente los pines triestablecidos para que no tiren hacia abajo del pin X+.

Respuestas (1)

En la placa Discovery STM32F429, PA1 y PA2 están conectados directamente a las salidas de interrupción del chip del sensor de movimiento L3GD20, que por defecto están activas en alto. Eso significa que deberían emitir una señal lógica baja hasta que ocurra algún evento (programable). Lo cual, como presumiblemente la parte no está inicializada, nunca sucede.

Los pines X+ y X- de una pantalla táctil resistiva están conectados con una resistencia, normalmente con un valor inferior a 1kΩ. Conectar X+ a PA0 y X- a una salida de bajo nivel creó efectivamente un pulldown de 1kΩ en PA0.

PA0 también está conectado a tierra a través de una resistencia desplegable de 220k (parte del circuito antirrebote del botón azul) en la placa de descubrimiento, por lo que tampoco es una buena opción para una conexión analógica.

Puede liberar PA0 cortando un puente de soldadura en algún lugar, pero aparentemente PA1 y PA2 están conectados directamente al sensor de movimiento.

Debes consultar el Manual de Usuario de tu placa y encontrar 4 pines sin usar, dos de ellos deben ser utilizables como canales ADC. Desafortunadamente, la pantalla LCD integrada ocupa la mayoría de los pines ADC, pero quedan algunos, a saber, PA5, PC3 y PF6. Elija dos de ellos para la conversión analógico-digital y encuentre dos pines sin usar para los otros dos terminales. Abrir el proyecto STM32F429-Discovery predefinido en STM32CubeMX es quizás la forma más sencilla de encontrar los pines utilizables.

gracias, ahora los pines se comportan como deben. Nunca verifiqué si esos alfileres estaban conectados a otra cosa (incluso si ese pensamiento cruzó por mi mente). Me he estado golpeando la cabeza durante dos días, gracias señor, ¡me salvó!