GPIO_触摸按键
下图所示就是一个触摸按键
U1 器件是将触摸按键的模拟量转换成高低电平的作用
C1 的作用是调整触摸按键的灵敏度,电容值越大灵敏度越低,
一般范围为:1 ≦ C ≦ 50pF
1. 硬件连接
其中的PA0 是检测模块输出的高低电平即可
触摸模块 | ST芯片 |
---|---|
SIG | PA0 |
VCC | 3.3V |
GND | GND |
2. CubeMX生成代码
可以看到,配置了3个部分
- 外部时钟
- SWD 接口
- GPIO 配置成输入模式
外部晶振配置
SWD接口配置
如果不配置,会导致之后无法下载代码,请一定注意!!
GPIO 配置
串口的代码配置
时钟配置
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 */
下面是检测触摸按键的功能实现
- 读取输入GPIO电压的高低
- 将电压的值判断后通过串口打印出去
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,来试试。