Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C STM32和4线电阻触摸屏_C_Embedded_Microcontroller_Stm32_Touchscreen - Fatal编程技术网

C STM32和4线电阻触摸屏

C STM32和4线电阻触摸屏,c,embedded,microcontroller,stm32,touchscreen,C,Embedded,Microcontroller,Stm32,Touchscreen,我正在尝试将4线电阻触摸屏连接到STM32F429发现板,但我不知道它是如何工作的。我希望MCU检测到触摸,因此我将4个引脚配置为: X+ --> input w/pullup connected to EXTI external interrupt X- --> input floating (tristated) Y+ --> input floating (tristated) Y- --> output to GND 在这种配置中,我应该能够检测到触摸并触发E

我正在尝试将4线电阻触摸屏连接到STM32F429发现板,但我不知道它是如何工作的。我希望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+管脚。

在选择触摸事件和读取触摸位置之间,必须重新配置管脚。以下内容摘自NXP应用说明,但适用于任何微控制器,并可适用于STM32:

输出设置为提供一个电压源,用于对触摸位置形成的有效分压器进行模拟测量:


在STM32上,当然重要的是不要在这些引脚上使用GPIO配置锁定功能,因为您需要三种不同的配置来读取单个触摸位置事件。

在选择触摸事件和读取触摸位置之间,您必须重新配置引脚。以下内容摘自NXP应用说明,但适用于任何微控制器,并可适用于STM32:

输出设置为提供一个电压源,用于对触摸位置形成的有效分压器进行模拟测量:


在STM32上,当然重要的是不要在这些引脚上使用GPIO配置锁定功能,因为您需要三种不同的配置来读取单触位置事件。

是的,我也阅读了该应用说明。但我的问题不同。我需要检测触摸优先配置,当我配置管脚时,我提供的代码管脚行为不是我期望的。当X和Y+引脚配置为无上拉三态输入时,X+上的信号接近零。请仔细阅读这个问题。@Luca:所以它是一个浮动高阻抗输入;你希望读什么?那么你的问题是关于电子学原理的,而不是关于软件的,因此也不是关于软件的。如果您的触摸驱动程序实际上不工作,那么您可能是在问XY问题,而不是您需要问的问题。它是一个高阻抗浮动引脚,连接到输入引脚,带有上拉电阻到Vcc。在您链接的应用程序中,它说要检测触摸,我必须将X+配置为具有上拉功能的输入,并将X-配置为浮动高阻抗三态输入。但是当我像这样配置管脚时,X+管脚会被X-自动拉到GND。所以我想知道如何正确配置PIN。@Luca抱歉,我误读了你的评论。我会考虑的。是触摸屏把它拉下来的吗?触摸屏未连接的级别是多少?请参阅我的答案是的,我也阅读了应用说明。但我的问题不同。我需要检测触摸优先配置,当我配置管脚时,我提供的代码管脚行为不是我期望的。当X和Y+引脚配置为无上拉三态输入时,X+上的信号接近零。请仔细阅读这个问题。@Luca:所以它是一个浮动高阻抗输入;你希望读什么?那么你的问题是关于电子学原理的,而不是关于软件的,因此也不是关于软件的。如果您的触摸驱动程序实际上不工作,那么您可能是在问XY问题,而不是您需要问的问题。它是一个高阻抗浮动引脚,连接到输入引脚,带有上拉电阻到Vcc。在您链接的应用程序中,它说要检测触摸,我必须将X+配置为具有上拉功能的输入,并将X-配置为浮动高阻抗三态输入。但是当我像这样配置管脚时,X+管脚会被X-自动拉到GND。所以我想知道如何正确配置PIN。@Luca抱歉,我误读了你的评论。我会考虑的。是触摸屏把它拉下来的吗?触摸屏未连接时的级别是多少?请参阅我的答案