STM32触摸按键

发布者:和谐共处最新更新时间:2020-12-24 来源: eefocus关键字:STM32  触摸按键 手机看文章 扫描二维码
随时随地手机看文章

01、触摸按键原理

触摸使用RC充放电原理:

RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用的电路。

充电过程:

电源通过电阻给电容充电,由于一开始电容两端的电压为0,所以电压的电压都在电阻上,这时电流大,充电速度快。随着电容两端电压的上升,电阻两端的电压下降,电流也随之减小,充电速度小。充电的速度与电阻和电容的大小有关。电阻R越大,充电越慢,电容C越大,充电越慢。衡量充电速度的常数t(tao)=RC。

 

放电过程:

电容C通过电阻R放电,由于电容刚开始放电时电压为E,放电电流I=E/R,该电流很大,所以放电速度很快。随着电容不断的放电,电容的电压也随着下降。电流也很快减小。电容的放电速度与RC有关,R的阻值越大,放电速度越慢。电容越大,放电速度越慢。

 

RC电路充放电公式:

 

Vt = V0+(V1-V0)*[1-exp(-t/RC)]

V0 为电容上的初始电压值;

V1 为电容最终可充到或放到的电压值;

Vt 为t时刻电容上的电压值。

如果V0为0,也就是从0V开始充电。那么公式简化为:

Vt=  V1* [1-exp(-t/RC)]

结论:同样的条件下,电容值C跟时间值t成正比关系,电容越大,充电到达某个临界值的时间越长。

 

02、电路设计

电路设计时其实就是个上拉电阻

PCB设计,直接一个圆形,和底层接地覆铜形成杂散电容。

电容触摸按键原理

R:外接电容充放电电阻。

Cs:TPAD和PCB间的杂散电容。

Cx:手指按下时,手指和TPAD之间的电容。

开关:电容放电开关,由STM32IO口代替。

 

03、代码设计

检测电容触摸按键过程

①TPAD引脚设置为推挽输出,输出0,实现电容放电到0。

②TPAD引脚设置为浮空输入(IO复位后的状态),电容开始充电。

③同时开启TPAD引脚的输入捕获开始捕获。

④等待充电完成(充电到底Vx,检测到上升沿)。

⑤计算充电时间。

触摸按键初始化


uint8_t Touchpad_Init(void)

{

  uint16_t buf[10];

 uint16_t temp;

  uint8_t j,i;  

  

 TIM_ICInitTypeDef  TIM_ICInitStructure;

  

  /* TIM12Configuration */

  TIM_Config();

 

 TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;

 TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

 TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

 TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;

 TIM_ICInitStructure.TIM_ICFilter = 0x0;

 

 TIM_ICInit(TIM12, &TIM_ICInitStructure);

  

  /* Enablethe CC1 Interrupt Request */

  TIM_ITConfig(TIM12,TIM_IT_CC1|TIM_IT_Update, ENABLE);

  

  /* TIM enablecounter */

  TIM_Cmd(TIM12, ENABLE);

  

 for(i=0;i<10;i++)//连续读取10次

 {

    buf[i]=Touchpad_Get_Val();

   SysCtlDelay(10*(SystemCoreClock/3000));    

  }

  

 for(i=0;i<9;i++)//排序

 {

    for(j=i+1;j<10;j++)

    {

     if(buf[i]>buf[j])//升序排列

     {

  temp=buf[i];

  buf[i]=buf[j];

  buf[j]=temp;

     }

   }

 }

 

  temp=0;

  for(i=2;i<8;i++){

    temp+=buf[i];//取中间的8个数据进行平均

  }

  Touchpad_default_val=temp/6;  

  if(Touchpad_default_val>0XFFFF/2)

     return1;//初始化遇到超过Touchpad_ARR_MAX_VAL/2的数值,不正常!

  return 0;  

}

按键复位代码


 

void Touchpad_Reset()

{

  GPIO_InitTypeDefGPIO_InitStructure;

  

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

 GPIO_Init(GPIOB, &GPIO_InitStructure);

  

 GPIO_ResetBits(GPIOB,GPIO_Pin_14);

  

 SysCtlDelay(5*(SystemCoreClock/3000));

  

 TIM_ClearITPendingBit(TIM12, TIM_IT_Update|TIM_IT_CC1);

 TIM_SetCounter(TIM12,0);

  

  

  /* Connect TIM pinsto AF9 */

  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_TIM12);

  

  /* TIM12 channel 1 pin (PB14)configuration */

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

}

下载代码测试验证:

关键字:STM32  触摸按键 引用地址:STM32触摸按键

上一篇:STM32 ADC详解
下一篇:STM32 输入捕获功能

推荐阅读最新更新时间:2024-11-07 10:53

STM32 IAP(对flash进行读写)
/************************************************************ **实验名称: **功能: **注意事项: **作者: *************************************************************/ #include STM32Lib\\\\\\\\\\\\\\\\stm32f10x.h #include hal.h #define FLASH_ADR 0x08008000 //要写入数据的地址 #define FLASH_DATA 0x5a5a5a5a //要写入的数据 int main(void) { u32 tmp;
[单片机]
基于STM32片内信号的ADC应用演示案例
很多STM32芯片里往往内置了专用的ADC通道,比方用来测量Vrefint,VBAT的分压或温度传感器的输出电压信号。不同系列所内置的模拟信号通道可能有差异。这里以STM32G4系列为例,它内置了对应于Vrefint,VBAT的三分之一分压和温度传感器的输出电压的专用模拟通道。 下面的示例就是针对上述3个通道进行AD,并测量相关电压和片内温度,最终得到3个结果,分别是VRefint电压,VBAT的电压,片内温度。 实现过程是这样的,大体分四步:【有点点麻雀虽小五脏俱全的味道】 1、TIMER1 更新事件触发ADC的转换; 2、CPU基于EOC中断获取ADC结果; 3、对ADC结果进行换算,得到电压值和温度值存放在特定内存
[单片机]
基于<font color='red'>STM32</font>片内信号的ADC应用演示案例
基于STM32的FreeRTOS应用问题解答
1、如何将 FreeRTOS 移植 到不同的Cortex-M 内核? 答:如果要将 FreeRTOS 移植到正确的Cortex-M 产品,你必须从正确的目录导入 port.c 文件。例如,若微控制器是带有IAR 工具的 Cortex-M0 内核,则您必须从 FreeRTOS\Source\portable\IAR\ARM_CM0 获取 port.c。 2、 FreeRTOS 使用需要ROM/RAM? 答:这取决于您的编译器、代码架构,以及RTOS 内核配置。一般来说, RTOS 内核本身需要大约 5到 10 K 字节 ROM 空间。 如果创建的线程或队列数增加,RAM 使用量就会上升。 3、怎样设置 CPU 时钟? 答:C
[单片机]
基于<font color='red'>STM32</font>的FreeRTOS应用问题解答
关于STM32的裸机多任务多线程心得
多任务 并行处理 首先我们来理解一下并行处理,初学者写程序通常是顺序执行,当我们逐渐想成为“专业”人士的时候顺序执行 的程序已经不能满足我们了,所以就需要多任务多线程系统,市面上标准的一些操作系统比如ucos,freeRTOS这些操作系统需要的学习周期长,范围广。在网上看到了一本书 单片机编程魔法师之高级裸编思想 在没学会ucos的阶段学习用这种思想过度感觉非常nice! 单片机是支持多任务同时并行地运行在一个系统中,在具体介绍之前先看一看单片机的硬件结构 这个图中我们可以看出,单片机的运行是在ALU的主导下进行的;而定时器指是一个定时装置,它在定时计数期间是无需ALU干预的,完全独立运行;串口的通讯单元对数据的接收与发
[单片机]
关于<font color='red'>STM32</font>的裸机多任务多线程心得
STM32-NVIC中断管理实现[直接操作寄存器]
cortex-m3支持256个中端,其中包含了16个内核中断,240个外部中断。stm32只有84个中断,包括16个内核中断和68个可屏蔽中断。stm32f103上只有60个中断,f107上才有68个中断。 中断是stm32很基础的一个功能,学会使用中断,才可以更好的使用其他的外设。理解stm32的中断,必须要先从stm32的中断优先级分组是怎么回事。要理解优先级分组,就要先理解什么是先占优先级,和次占优先级。 先占优先级的概念等同于51单片机中的中断。假设有两中断先后触发,已经在执行的中断先占优先级如果没有后触发的中断 先占优先级更高,就会先处理先占优先级高的中断。也就是说又有较高的先占优先级的中断可以打断
[单片机]
STM32自带硬件编码器接口的设置
在这里使用TIM3的通道1和通道2做为A B项的电平捕捉。 由于STM32自带硬件编码器接口,因此只要设置好就可使用,非常强大,下面程序测试通过。 void TIM3_Mode_Config(void) { //u16 CCR1_Val = 2500; //u16 CCR2_Val = 1000; GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; //TIM_OCInitTypeDef TIM
[单片机]
STM32 UART(接收 ,发送数据)
UART接收发送数据: 平台:STM32F401 discovery版 此代码用的UART6,TX,RX对应的PIN脚是PC6,PC7 如图: 代码如下: 步骤一:初始化串口的GPIO,USART,并且配置上UART的RX中断 void USART6_Config(void) { USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIO clock */ RCC_AHB1Per
[单片机]
<font color='red'>STM32</font> UART(接收 ,发送数据)
STM32基础入门(三)——Keil的使用
1. Keil概述 Keil MDK,也称MDK-ARM、Realview MDK、I-MDK、uVision4 等。 MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。 MDK-ARM有四个可用版本,分别是MDK-Lite、MDK-Basic、MDK-Standard、MDK-Professional。所有版本均提供一个完善的C / C++开发环境,其中MDK-Professional还包含大量的中间库。 完美支持Cortex-M、Cortex-R4、A
[单片机]
<font color='red'>STM32</font>基础入门(三)——Keil的使用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved