我正在尝试将4线电阻式触摸屏连接到STM32F429 Discovery板,但我无法弄清楚它是如何工作的。我希望MCU能够检测到触摸,因此我按照以下方式配置了4个引脚:
X+ --> input w/pullup connected to EXTI external interrupt
X- --> input floating (tristated)
Y+ --> input floating (tristated)
Y- --> output to GND
在这种配置中,我应该能够检测触摸并在EXTI线上触发中断,这样我就可以进入ISR并用ADC对x和y值进行采样。但是当我连接X-引脚时,X +引脚接近GND。看起来电流在X +和X-之间流动(所以X-不是三态?)。 这是我用来配置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;
我无法理解我做错了什么或如何正确配置三态引脚,因此它们不会拉低X +引脚。
答案 0 :(得分:4)
在选择触摸事件和读取触摸位置之间,必须重新配置引脚。以下内容来自恩智浦应用笔记(AN10675),但适用于任何微控制器,可以适应STM32:
输出设置为触摸位置形成的有效分压器的模拟测量提供电压源:
在STM32上,当然不要在这些引脚上使用GPIO配置锁定功能,因为您需要三种不同的配置来读取单个触摸位置事件。