Skip to content

GPIO_触摸按键

下图所示就是一个触摸按键
U1 器件是将触摸按键的模拟量转换成高低电平的作用
C1 的作用是调整触摸按键的灵敏度,电容值越大灵敏度越低,
一般范围为:1 ≦ C ≦ 50pF

alt text

1. 硬件连接

其中的PA0 是检测模块输出的高低电平即可

触摸模块ST芯片
SIGPA0
VCC3.3V
GNDGND

2. CubeMX生成代码

可以看到,配置了3个部分

  1. 外部时钟
  2. SWD 接口
  3. GPIO 配置成输入模式

外部晶振配置

alt text

SWD接口配置

如果不配置,会导致之后无法下载代码,请一定注意!! alt text

GPIO 配置

alt text

串口的代码配置

alt text

时钟配置

alt text

3. 编写代码

编写串口重定向的代码

C
/* USER CODE BEGIN 0 */
#include "stdio.h"
 //重定向c库函数printf到串口USARTx,重定向后可使用printf函数
 int fputc(int ch, FILE *f)
 {
     /* 发送一个字节数据到串口USARTx */
     HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
     return (ch);
 } 
/* USER CODE END 0 */

下面是检测触摸按键的功能实现

  1. 读取输入GPIO电压的高低
  2. 将电压的值判断后通过串口打印出去
C
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */
	uint8_t data = 0;
    
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  data = HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_14);
	  if(data == 1)
	  {
		printf("data == 1");
	  }
	  else{
		printf("data == 0");
	  }
	  
	  HAL_Delay(300);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

4. 后记

触摸按键也可以通过ADC采集电压的方式来实现,想尝试的可以自己做个PCB,来试试。