OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11497|回复: 20

电容触摸按键实验-ALIENTEK战舰开发板实验

[复制链接]

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-1-3 11:26:05 | 显示全部楼层 |阅读模式
 

第十五章 电容触摸按键实验fficeffice" />

上一章,我们介绍了STM32的输入捕获功能及其使用。这一章,我们将向大家介绍如何通过输入捕获功能,来做一个电容触摸按键。在本章中,我们将用TIM5的通道2PA1)来做输入捕获,并实现一个简单的电容触摸按键,通过该按键控制DS1的亮灭。

 

15.1 电容触摸按键简介

触摸按键相对于传统的机械按键有寿命长、占用空间少、易于操作等诸多优点。大家看看如今的手机,触摸屏、触摸按键大行其道,而传统的机械按键,正在逐步从手机上面消失。本章,我们将给大家介绍一种简单的触摸按键:电容式触摸按键。

我们将利用战舰STM32开发板上的触摸按键(TPAD),来实现对DS1的亮灭控制。这里TPAD其实就是战舰STM32开发板上的一小块覆铜区域,实现原理如图15.1.1所示:



15.1.1 电容触摸按键原理

       这里我们使用的是检测电容充放电时间的方法来判断是否有触摸,图中R是外接的电容充电电阻,Cs是没有触摸按下时TPADPCB之间的杂散电容。而Cx则是有手指按下的时候,手指与TPAD之间形成的电容。图中的开关是电容放电开关(由实际使用时,由STM32IO代替)。

       先用开关将Cs(或Cs+Cx)上的电放尽,然后断开开关,让RCs(或Cs+Cx)充电,当没有手指触摸的时候,Cs的充电曲线如图中的A曲线。而当有手指触摸的时候,手指和TPAD之间引入了新的电容Cx,此时Cs+Cx的充电曲线如图中的B曲线。从上图可以看出,AB两种情况下,Vc达到Vth的时间分别为TcsTcs+Tcx

       其中,除了CsCx我们需要计算,其他都是已知的,根据电容充放电公式:

Vc=V0*(1-e^(-t/RC))

       其中Vc为电容电压,V0为充电电压,R为充电电阻,C为电容容值,e为自然底数,t为充电时间。根据这个公式,我们就可以计算出CsCx。利用这个公式,我们还可以把战舰开发板作为一个简单的电容计,直接可以测电容容量了,有兴趣的朋友可以捣鼓下。

       在本章中,其实我们只要能够区分TcsTcs+Tcx,就已经可以实现触摸检测了,当充电时间在Tcs附近,就可以认为没有触摸,而当充电时间大于Tcs+Tx时,就认为有触摸按下(Tx为检测阀值)。

       本章,我们使用PA1(TIM5_CH2)来检测TPAD是否有触摸,在每次检测之前,我们先配置PA1为推挽输出,将电容Cs(或Cs+Cx)放电,然后配置PA1为浮空输入,利用外部上拉电阻给电容Cs(Cs+Cx)充电,同时开启TIM5_CH2的输入捕获,检测上升沿,当检测到上升沿的时候,就认为电容充电完成了,完成一次捕获检测。

MCU每次复位重启的时候,我们执行一次捕获检测(可以认为没触摸),记录此时的值,记为tpad_default_val,作为判断的依据。在后续的捕获检测,我们就通过与tpad_default_val的对比,来判断是不是有触摸发生。

关于输入捕获的配置,在上一章我们已经有详细介绍了,这里我们就不再介绍。至此,电容触摸按键的原理介绍完毕。

15.2 硬件设计

本实验用到的硬件资源有:

1)  指示灯DS0DS1

2)  定时器TIM5

3)  触摸按键TPAD

前面两个之前均有介绍,我们需要通过TIM5_CH2PA1)采集TPAD的信号,所以本实验需要用跳线帽短接多功能端口(P14)的TPADADC,以实现TPAD连接到PA1。如图15.2.1所示。



15.2.1 TPADSTM32连接原理图

硬件设置(用跳线帽短接多功能端口的ADCTPAD即可)好之后,下面我们开始软件设计。

 

15.3 软件设计

前面讲解过,触摸按键我们是通过输入捕获实现的,所以使用的库函数依然是分布在stm32f10x_tim.cstm32f10x_tim.h中。同时我们在HARDWARE组下面增加了tpad.ctpad.h文件用来存放我们的触摸按键驱动代码。

打开tpad.c可以看到,我们在tpad.c里输入了如下代码:

#define TPAD_ARR_MAX_VAL 0XFFFF  //最大的ARR

vu16 tpad_default_val=0;//空载的时候(没有手按下),计数器需要的时间

//初始化触摸按键

//获得空载的时候触摸按键的取值.

//返回值:0,初始化成功;1,初始化失败

u8 TPAD_Init()

{   u16 buf[10] , temp;

       u8 j,i;

//1Mhz的频率计数

       TIM5_CH2_Cap_Init(TPAD_ARR_MAX_VAL,SystemCoreClock/1000000-1);

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

              buf=TPAD_Get_Val();delay_ms(10);          

       }                             

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

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

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

                     {   temp=buf;buf=buf[j];buf[j]=temp;

                     }

              }

       }

       temp=0;

       for(i=2;i<8;i++)temp+=buf;   //取中间的8个数据进行平均

       tpad_default_val=temp/6;

       printf("tpad_default_val:%d\r\n",tpad_default_val);   

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

       if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1;   return 0;                         

}

//复位一次

void TPAD_Reset(void)

{

      GPIO_InitTypeDef  GPIO_InitStructure;

       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA时钟

       //设置GPIOA.1为推挽使出

      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                            //PA1 端口配置

      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                    //推挽输出

      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

      GPIO_Init(GPIOA, &GPIO_InitStructure);                      //初始化GPIOA.1

      GPIO_ResetBits(GPIOA,GPIO_Pin_1);                                          //PA.1输出0,放电

       delay_ms(5);                                               //延时5ms

       TIM_SetCounter(TIM5,0);                                        //0

       TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update);     //清除中断标志

       GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;      //GPIOA.1浮空输入

       GPIO_Init(GPIOA, &GPIO_InitStructure);

}

//得到定时器捕获值,如果超时,则直接返回定时器的计数值.

u16 TPAD_Get_Val(void)

{                            

       TPAD_Reset();

       while(TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)  //等待溢出

       {

              if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)

return TIM_GetCounter(TIM5);                   //超时了,直接返回CNT的值

       };   

       return TIM_GetCapture2(TIM5);   

}       

//读取n,取最大值

u16 TPAD_Get_MaxVal(u8 n)

{   u16 temp=0, res=0;

       while(n--){

              temp=TPAD_Get_Val(); //得到一次值

              if(temp>res)res=temp;

       };

       return res;

} 

//扫描触摸按键

//mode:0,不支持连续触发(按下一次必须松开才能按下一次);1,支持连续触发(可以一直按)

//返回值:0,没有按下;1,有按下;                                                                    

#define TPAD_GATE_VAL   80    //触摸的门限值,也就是必须大于

//tpad_default_val+TPAD_GATE_VAL,才认为是有效触摸.

u8 TPAD_Scan(u8 mode)

{   static u8 keyen=0;         //0,可以开始检测;>0,还不能开始检测 

       u8 res=0, sample=3;                    //默认采样次数为3   

       u16 rval;

       if(mode){

              sample=6;              //支持连按的时候,设置采样次数为6

              keyen=0;            //支持连按        

       }

       rval=TPAD_Get_MaxVal(sample);

       if(rval>(tpad_default_val+TPAD_GATE_VAL))//大于

//tpad_default_val+TPAD_GATE_VAL,有效

       {     rval=TPAD_Get_MaxVal(sample);             

              if((keyen==0)&&(rval>(tpad_default_val+TPAD_GATE_VAL)))//大于

//tpad_default_val+TPAD_GATE_VAL,有效

              { res=1;

              }                                                                     

              keyen=5;                 //至少要再过5次之后才能按键有效  

       }else if(keyen>2)keyen=2; //如果检测到按键松开,则直接将次数将为2,以提高响应速度

       if(keyen)keyen--;                                                                                                 

       return res;

}

//定时器2通道2输入捕获配置

void TIM5_CH2_Cap_Init(u16 arr,u16 psc)

{

       GPIO_InitTypeDef  GPIO_InitStructure;

     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

       TIM_ICInitTypeDef  TIM5_ICInitStructure;

       RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);   //使能TIM5时钟

       RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能PA时钟

       //设置GPIOA.1为浮空输入

       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                             //PA1 端口配置

      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //速度50MHz

     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;       //浮空输入

       GPIO_Init(GPIOA, &GPIO_InitStructure);                      //初始化GPIOA.1

 

     //初始化TIM5 

       TIM_TimeBaseStructure.TIM_Period = arr;                 //设定计数器自动重装值  

       TIM_TimeBaseStructure.TIM_Prescaler =psc;                //预分频器       

       TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // TDTS = Tck_tim

       TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式

       TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);       //根据参数初始化TIMx

       //初始化TIM5通道2

      TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2; //选择输入端 IC2映射到TI5

      TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获

      TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

      TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;  //配置输入分频,不分频

      TIM5_ICInitStructure.TIM_ICFilter = 0x03;//配置输入滤波器 8个定时器时钟周期滤波

      TIM_ICInit(TIM5, &TIM5_ICInitStructure);//初始化I5 IC2

 

    TIM_Cmd(TIM5,ENABLE );              //使能定时器5

}

此部分代码包含6个函数,我们将介绍其中4个比较重要的函数:TIM5_CH2_Cap_InitTPAD_Get_ValTPAD_InitTPAD_Scan

首先介绍TIM5_CH2_Cap_Init函数,该函数和上一章的输入捕获函数基本一样,不同的是,这里我们设置的是CH2通道,并开启了输入滤波器。通过该函数的设置,我们将可以捕获PA1上的上升沿。关于配置的详细介绍大家可以看第15章输入捕获实验讲解。

我们再来看看TPAD_Get_Val函数,该函数用于得到定时器的一次捕获值。该函数先调用TPAD_Reset,将电容放电,同时设置TIM5_CNT寄存器为0,然后死循环等待发生上升沿捕获(或计数溢出),将捕获到的值(或溢出值)作为返回值返回。

接着我们介绍TPAD_Init函数,该函数用于初始化输入捕获,并获取默认的TPAD值。该函数有一个参数,用来传递系统时钟,其实是为了配置TIM5_CH2_Cap_Init1us计数周期。在该函数中连续10次读取TPAD值,将这些值升序排列后取中间6个值再做平均(这样做的目的是尽量减少误差),并赋值给tpad_default_val,用于后续触摸判断的标准。

最后,我们来看看TPAD_Scan函数,该函数用于扫描TPAD是否有触摸,该函数的参数mode,用于设置是否支持连续触发。返回值如果是0,说明没有触摸,如果是1,则说明有触摸。该函数同样包含了一个静态变量,用于检测控制,类似第八章的KEY_Scan函数。所以该函数同样是不可重入的。在函数中,我们通过连续读取3(不支持连续按的时候)TPAD的值,取这他们的最大值,和tpad_default_val+TPAD_GATE_VAL比较,如果大于则说明有触摸,如果小于,则说明无触摸。其中tpad_default_val是我们在调用TPAD_Init函数的时候得到的值,而TPAD_GATE_VAL则是我们设定的一个门限值(这个大家可以通过实验数据得出,根据实际情况选择适合的值就好了),这里我们设置为80。该函数,我们还做了一些其他的条件限制,让触摸按键有更好的效果,这个就请大家看代码自行参悟了。

头文件tpad.h主要是函数申明,这里省略讲解。

接下来,我们看看主程序里面的main函数如下:

int main(void)

 {   

      u8 t=0;        

       delay_init();                //延时函数初始化        

       NVIC_Configuration();         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

       uart_init(9600);          //串口初始化波特率为9600

      LED_Init();                  //LED端口初始化

      TPAD_Init();                //初始化触摸按键

     while(1)

       {                                                                                        

             if(TPAD_Scan(0))  //成功捕获到了一次上升沿(此函数执行时间至少15ms)

              {

                     LED1=!LED1; //LED1取反

              }

              t++;

              if(t==15)       

              {   t=0;

                     LED0=!LED0; //LED0取反,提示程序正在运行

              }

              delay_ms(10);

       }

 }

main函数比较简单,TPAD_Init()函数执行之后,就开始触摸按键的扫描,当有触摸的时候,对DS1取反,而DS0则有规律的间隔取反,提示程序正在运行。

这里还要提醒一下大家,不要把uart_init(9600);去掉,因为在TPAD_Init函数里面,我们有用到printf,如果你去掉了uart_init,就会导致printf无法执行,从而死机。

至此,我们的软件设计就完成了。

15.4 下载验证

在完成软件设计之后,将我们将编译好的文件下载到战舰STM32开发板上,可以看到DS0慢速闪烁,此时,我们用手指触摸ALIENTEK战舰STM32开发板上的TPAD(右下角的LOGO标志),就可以控制DS1的亮灭了。不过你要确保TPADADC的跳线帽连接上了!如图15.4.1所示:



15.4.1 触摸区域和跳线帽短接方式

同时大家可以打开串口调试助手,每次复位的时候,会收到tpad_default_val的值,一般为70左右,根据15.1节提到的公式,我们可以计算出Cs的容值 27pF左右。                                   


实验11 触摸按键实验-战舰STM32开发板.zip

951.75 KB, 下载次数: 943

我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

68

帖子

0

精华

初级会员

Rank: 2

积分
131
金钱
131
注册时间
2012-2-28
在线时间
2 小时
发表于 2013-1-6 11:25:10 | 显示全部楼层
厉害,不过我发现硬件可以通过三极管放大来实现
回复 支持 反对

使用道具 举报

9

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2012-12-2
在线时间
2 小时
发表于 2013-1-19 18:39:33 | 显示全部楼层
回复【楼主位】Admin:
---------------------------------
请问一下原子哥,按照你给电容触摸按键的封装直接就可以用么?需要注意一些什么???
回复 支持 反对

使用道具 举报

32

主题

190

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1184
金钱
1184
注册时间
2013-4-3
在线时间
222 小时
发表于 2013-9-26 19:53:21 | 显示全部楼层
回复【楼主位】Admin:
---------------------------------
本章,我们使用PA1(TIM5_CH2)来检测TPAD是否有触摸,在每次检测之前,我们先配置PA1为推挽输出,将电容Cs(或Cs+Cx)放电,然后配置PA1为浮空输入,利用外部上拉电阻给电容Cs(Cs+Cx)充电,同时开启TIM5_CH2的输入捕获,检测上升沿,当检测到上升沿的时候,就认为电容充电完成了,完成一次捕获检测。这里说的检测到上升沿,请问一下原子哥在多少伏的时候能检测到上升沿?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-26 22:07:28 | 显示全部楼层
回复【4楼】Xy201207:
---------------------------------
这个,是参考STM32的数据手册,以数据手册数据为准。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

190

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1184
金钱
1184
注册时间
2013-4-3
在线时间
222 小时
发表于 2013-9-26 23:39:04 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
原子大哥你们计算Cs的时候是算的几伏?(我们可以计算出Cs的容值 为27pF左右)
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-26 23:56:15 | 显示全部楼层
回复【6楼】Xy201207:
---------------------------------
还真忘记了
后面有个朋友说我算错了,确实是有点,按照数据手册,应该是2V.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

190

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1184
金钱
1184
注册时间
2013-4-3
在线时间
222 小时
发表于 2013-9-27 19:52:18 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
嗯 原子大哥谢啦
回复 支持 反对

使用道具 举报

7

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-11-27
在线时间
0 小时
发表于 2014-6-17 16:09:03 | 显示全部楼层
void TPAD_Reset(void)函数中,这条语句:GPIO_ResetBits(GPIOA,GPIO_Pin_1);  是否可以不用,因为这位默认值就为0.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-17 23:22:58 | 显示全部楼层
回复【9楼】上善若水19900927:
---------------------------------
可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-7-14
在线时间
0 小时
发表于 2014-7-28 09:48:07 | 显示全部楼层
回复【2楼】mattress:
---------------------------------
本人是菜鸟,想问一下,电路中如果开关闭和,岂不是电源直接接在了电容上,电阻好像没有作用啊(放电的时候也是)?
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-7-14
在线时间
0 小时
发表于 2014-7-30 09:49:53 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
原子哥,本人是菜鸟,想问一下,电路中如果开关闭和,岂不是电源直接接在了电容上,电阻好像没有作用啊(放电的时候也是)?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-30 23:31:10 | 显示全部楼层
回复【12楼】行者122:
---------------------------------
电阻是在电源断开的时候,给电容充电的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-7-14
在线时间
0 小时
发表于 2014-7-31 19:11:04 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
原子哥,能推荐点儿画这种电路图的资料吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-31 22:50:35 | 显示全部楼层
回复【14楼】行者122:
---------------------------------
没得推荐哦,用xp自带的画图软件折腾,呵呵.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2014-7-14
在线时间
0 小时
发表于 2014-8-28 15:57:44 | 显示全部楼层


这个地方的注释里应该是“取中间的6个数据进行平均”吧
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-6-1
在线时间
0 小时
发表于 2015-6-23 17:53:34 | 显示全部楼层
原子哥,时间来到战舰V3的板子触摸按键实验11,
板子的tpad.c是这样写的
u8 TPAD_Init(u8 psc)
{
u16 buf[10];
u16 temp;
u8 j,i;
TIM5_CH2_Cap_Init(TPAD_ARR_MAX_VAL,psc-1);//以1Mhz的频率计数 
然后你在main函数是这样写的
  TPAD_Init(6); //初始化触摸按键
那么理应不是12Mhz频率计数?试过写72以11Mhz的频率计数,触摸按键是实现不了的,
求解,谢谢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-23 19:17:49 | 显示全部楼层
回复【17楼】王-zg:
-------------------------------
这是老版本的教材。
战舰V3的,请看战舰V3教材。
6是12M,但是你要11M,是无法得到的,无法分频。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2015-6-1
在线时间
0 小时
发表于 2015-6-23 20:09:58 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
写错了,写72是1Mhz,我想问的是战舰V3为什么要写6才能实现触摸按键?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-24 23:14:24 | 显示全部楼层
回复【19楼】王-zg:
---------------------------------
写其他也可以啊,没有说一定要6
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2015-4-11
在线时间
0 小时
发表于 2015-9-11 16:05:25 | 显示全部楼层
[mw_shl_code=c,true]//初始化遇到超过TPAD_ARR_MAX_VAL/2的数值,不正常! if(tpad_default_val>TPAD_ARR_MAX_VAL/2)return 1; return 0; [/mw_shl_code] [mw_shl_code=c,true]这里为啥超过 [mw_shl_code=c,true]TPAD_ARR_MAX_VAL/2的数值就不正常!求解[/mw_shl_code] [/mw_shl_code]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 21:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表