小型教育网站的开发与建设,福永网站建设公司,揭阳网页制作公司,网站改版灵感库前言
本文章旨在记录博主STM32的学习经验#xff0c;我自身也在不断的学习当中#xff0c;如果文章有写的不对的地方#xff0c;欢迎各位大佬批评指正。
准备工作
今天这篇文章介绍的是触摸开关这一外围硬件。
ST-link调试器STM32最小系统板单路TTP223B触摸传感器模块LE…前言
本文章旨在记录博主STM32的学习经验我自身也在不断的学习当中如果文章有写的不对的地方欢迎各位大佬批评指正。
准备工作
今天这篇文章介绍的是触摸开关这一外围硬件。
ST-link调试器STM32最小系统板单路TTP223B触摸传感器模块LED灯珠
开始
1.理清思路
通过查找网络资料我们了解到该传感器特点如图所示 博主也是第一次尝试自己查阅资料来写一个模块的驱动代码在此之前是跟着B站UP主江协科技学习如何编写驱动代码的。
第一次独立编写驱动代码我是怎么做的呢我首先想到既然都是开关那么是不是可以修改先前学习的按钮驱动代码在其基础上来实现驱动触摸开关呢答案是可以
这里贴上按钮驱动代码 Key.c来供大家参考注意这里是按钮驱动不是我们本次介绍的触摸驱动
#include stm32f10x.h // Device header
#include Delay.hvoid Key_Init(void)
{//初始化按钮端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIOInitStructure;GPIOInitStructure.GPIO_Mode GPIO_Mode_IPU;GPIOInitStructure.GPIO_Pin GPIO_Pin_1;GPIOInitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIOInitStructure);}uint8_t Key_GetNum(void)
{uint8_t KeyNum 0;//判断1号端口按钮按下情况if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 0){Delay_ms(20);//规避按下按钮的抖动while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 0); //一直按住按钮则卡住Delay_ms(20);//规避松开按钮的抖动KeyNum 1;}return KeyNum;
}
2.编写代码
有了以上思路我们开始编写触摸模块的驱动代码
连接电路
这里我将触摸传感器的SIG口接到了STM32最小系统板的PB1接口上。LED灯珠接到PA1接口上采用高电平触发接法。
连接完电路通电后效果如图所示传感器的VCC还有GND引脚别接反了亮绿灯代表没接错 编写驱动
和按键驱动一样我们首先在Hardware目录新建触摸模块的c和h文件取名Touch 在新建的Touch.c文件当中新建一个Touch_Init函数代码如下
首先初始化RCC时钟然后选择上拉输入模式接着巴拉巴拉(相信你们都会了我这里就不多说)
#include stm32f10x.h // Device header
#include Delay.hvoid Touch_Init(void)
{//初始化按钮端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIOInitStructure;GPIOInitStructure.GPIO_Mode GPIO_Mode_IPU;GPIOInitStructure.GPIO_Pin GPIO_Pin_1;GPIOInitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIOInitStructure);
}有了触摸模块的初始化函数后我们还需要一个函数用于获取按钮状态即按钮是否被触摸这里我们新建函数 Touch_GetNum
注意这个函数是有返回数值的这里返回类型为uint8_t还有就是和按键一样我们为了避免外界因素对我们产生的影响还是要进行一个消抖动的过程代码如下
uint8_t Touch_GetNum(void)
{uint8_t TouchNum 0;//判断1号端口按钮按下情况if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 1){Delay_ms(20);//消去抖动while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 1); //一直按住按钮则卡住Delay_ms(20);//消去抖动TouchNum 1;}return TouchNum;
}完成这两个函数后我们的触摸模块驱动基本已经完成了完整代码如下
#include stm32f10x.h // Device header
#include Delay.hvoid Touch_Init(void)
{//初始化按钮端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIOInitStructure;GPIOInitStructure.GPIO_Mode GPIO_Mode_IPU;GPIOInitStructure.GPIO_Pin GPIO_Pin_1;GPIOInitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIOInitStructure);
}uint8_t Touch_GetNum(void)
{uint8_t TouchNum 0;//判断1号端口按钮按下情况if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 1){Delay_ms(20);//消去抖动while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) 1); //一直按住按钮则卡住Delay_ms(20);//消去抖动TouchNum 1;}return TouchNum;
}
写完Touch.c后别忘了在头文件touch.h当中添加这两个函数代码如下
#ifndef __TOUCH_H
#define __TOUCH_Hvoid Touch_Init(void);
uint8_t Touch_GetNum(void);#endif到这里我们驱动代码已经编写完成了接下来就是到main.c当中完善一下逻辑代码了
这里直接贴上完整代码
#include stm32f10x.h // Device header
#include LED.h
#include Touch.huint8_t TouchNum;int main(void)
{ LED_Init(); //LED灯珠初始化Touch_Init(); //触摸模块初始化while (1){TouchNum Touch_GetNum();if(TouchNum 1){LED1_Turn();}}
}
还有LED灯珠驱动这里也一并贴上(同样的也是放在Hardware文件夹内)
LED.c
#include stm32f10x.h // Device headervoid LED_Init(void)
{//初始化LED端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIOInitStructure;GPIOInitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIOInitStructure.GPIO_Pin GPIO_Pin_1;GPIOInitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIOInitStructure);
}void LED1_ON(void)
{//开启LEDGPIO_ResetBits(GPIOA, GPIO_Pin_1);
}void LED1_OFF(void)
{//关闭LEDGPIO_SetBits(GPIOA, GPIO_Pin_1);
}void LED1_Turn(void)
{if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1) 0){GPIO_SetBits(GPIOA, GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA, GPIO_Pin_1);}
}
LED.h
#ifndef __LED_H
#define __LED_Hvoid LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED1_Turn(void);#endif
以上代码全部写好后我们就可以编译并下载到系统板上查看效果了
结尾
感谢你能阅读到这里相信你已经掌握了触摸模块的驱动编写了吧在这里我希望各位大佬跟我一起共进步后续我也会多分享一些我自己的学习经验以及像这篇文章一样的模块分享最后还是感谢你的阅读我们下篇文章再见吧