0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32入门学习笔记之电容触摸实验(下)

jf_78858299 来源:滑小稽笔记 作者:电子技术园地 2023-02-16 10:22 次阅读

8.3 电容触摸例程

现在PA1端口接一个触摸按键(一块铜箔),利用PA1的触摸按键控制PA0端口的LED状态,按下时LED点亮,抬起时LED熄灭。

(1)新建基础工程,并创建tpad.c,tpad.h,led.c和led.h文件,并导入工程,如下图所示。

图片

(2)在tpad.h文件内添加以下代码。

图片

(3)在led.h文件内添加以下代码

图片

(4)在led.c文件中添加以下代码

图片

(5)在tpad.c文件内添加以下代码

#include "tpad.h"
#include "delay.h"
/***************************************************
Name    :TPAD_Get_Value
Function  :触摸按键值获取
Paramater  :None
Return    :获取的充电时间
***************************************************/
u16 TPAD_Get_Value()
{
  //电容放电
  GPIOA->CRL &= 0xFFFFFF0F ;          //PA1输入
  GPIOA->CRL |= 0x00000030 ;          //推挽输出
  GPIOA->ODR &= ~( 1<<1 ) ;          //输出低电平放电
  delay_ms( 5 ) ;
  TIM5->SR = 0 ;                //清除标记
  TIM5->CNT = 0 ;                //归零
  GPIOA->CRL &= 0xFFFFFF0F ;          //PA1输入
  GPIOA->CRL |= 0x00000040 ;          //浮空输入
  //等待捕获上升沿
  while( ( TIM5->SR&0x04 )==0 )
  {
    if( TIM5->CNT>( 65535-500 ) )
      return TIM5->CNT ;
  }
  return TIM5->CCMR2 ;
}
/***************************************************
Name    :TPAD_Get_MaxVal
Function  :触摸按键最大值获取
Paramater  :None
Return    :获取的最大充电时间
***************************************************/
u16 TPAD_Get_MaxVal( u8 n )
{
  u16 temp=0;
  u16 res=0;
  while( n-- )
  {
    temp = TPAD_Get_Value() ;
    if( temp>res )
      res = temp ;
  }
  return res ;
}
/***************************************************
Name    :TPAD_Init
Function  :触摸按键初始化
Paramater  :None
Return    :None
***************************************************/
TPADData TPAD_Data ;
void TPAD_Init()
{
  u16 buff[ 10 ], temp ;
  u8 i, j ;
  RCC->APB2ENR |= 1<<2 ;
  GPIOA->CRL &= 0xFFFFFF0F ;            //PA1 输入
  GPIOA->CRL |= 0x00000040 ;            //浮空输入
  RCC->APB1ENR |= 1<<3 ;              //TIM5时钟开启
  TIM5->ARR = 65535 ;
  TIM5->PSC = 5 ;
  TIM5->CCMR1 |= 1<<8 ;              //选择输入端IC2映射到TI2上
  TIM5->CCMR1 &= ~( 1<<12 ) ;            //采样频率8分频
  TIM1->CCMR1 &= ~( 1<<10 ) ;            //配置输入不分频
  TIM5->CCER &= ~( 1<<5 ) ;            //上升沿捕获
  TIM5->CCER |= 1<<4 ;                //允许捕获功能
  TIM5->CR1 |= 1<<0 ;                //开启定时器5
  //连续采样10次
  for( i=0; i<10; i++ )
  {
    buff[ i ] = TPAD_Get_Value() ;
    delay_ms( 10 ) ;
  }
  //排序
  for( i=0; i<9; i++ )
  {
    for( j=i+1; j<10; j++ )
    {
      //升序排列
      if( buff[ i ]>buff[ j ] )
      {
        temp= buff[ i ] ;
        buff[ i ] = buff[ j ] ;
        buff[ j ] = temp ;
      }
    }
  }
  temp = 0 ;
  //获取中间数据的均值
  for( i=2; i<8; i++ )
    temp += buff[ i ] ;
  TPAD_Data.value = temp/6 ;
}
/***************************************************
Name    :TPAD_Scan
Function  :触摸按键扫描
Paramater  :None
Return    :None
***************************************************/
void TPAD_Scan()
{
  u16 rval ;
  rval = TPAD_Get_MaxVal( 3 ) ;
  if( rval>( TPAD_Data.value+100 ) )
    TPAD_Data.State = 1 ;              //手指按下
}

(6)在1.c文件内添加主函数

#include "sys.h"
#include "delay.h"
#include "usart1.h"
#include "led.h"
#include "tpad.h"
int main()
{
  STM32_Clock_Init( 9 ) ;                  //STM32时钟初始化
  SysTick_Init( 72 ) ;                    //SysTick初始化
  USART1_Init( 72, 115200 ) ;                //初始化串口1波特率115200
  LED_Init() ;                      //LED初始化
  TPAD_Init() ;                      //触摸按键初始化
  while( 1 )
  {
    TPAD_Scan() ;                    //触摸按键扫描
    if( TPAD_Data.State==1 )
    {
      LED = 0 ;
      TPAD_Data.State = 0 ;
    }
    else
      LED = 1 ;
  }
}

——————————————分割线——————————————

8.4 STM32工程管理

这里的总结是针对与之前所学的所有嵌入式内容进行总结,随着后续代码越来越多,对于工程的管理显得格外重要,不仅仅是采用本章节介绍的方法管理工程代码,对于后续的Linux开发和操作系统移植也最好是按照固定的工程格式进行管理。

对于STM32的工程可以划分为以下几个部分:

(1)过程文件以及最终生成的hex文件:这些文件通通放置在工程1级目录下的OBJECT文件中,文件中的内容如下图所示。

图片

图中标注部分就是最终生成的hex文件,其他的文件均属于过程文件,集成开发系统IDE编译的实质其实就是采用gcc交叉编译器将我们编写的代码转换成对应的机器代码的过程,具体的步骤会在Linux系统移植中描述,这里只需要知道利用交叉编译器进行编译的时候会产生大量的链接文件和过程文件,这些文件统统放置在OBJECT目录下。将工程文件中的过程文件放置在该目录下的设置方式如下图所示。

图片

图片

(2)主函数文件及主工程文件:在Keil中创建的工程,以及包括main函数的c文件都位于这个目录内。

图片

图中标注的3个文件都是必不可少的文件,带有Keil图标的文件就是工程文件,里面包含了整个工程所需的头文件,文件路径以及编译器位置,文本文件图标的则是c文件,main函数就放在这个位置,.s后缀的为汇编启动文件,用于帮助芯片创建C代码运行环境,初始化堆栈等功能,为了达到最快效率,所以采用汇编语言来编写这个文件。


(3)自定义系统文件:自定义的系统文件位于SYSTEM目录中,目录内有3个子目录,分别是sys,delay和usart1。

delay目录:是利用SysTick时钟来实现的延时功能,主要有毫秒级延时和微秒级延时;

usart1目录:则是利用串口1来实现printf打印输出的功能,主要用于调试数据的输出;

sys目录:是最基础的工程文件,这个目录内有1个c文件和2个h文件,c文件主要实现STM32时钟树的配置和中断系统的设置功能,是C函数中最重要的一个文件,stmxx.h文件则是最底层的寄存器定义文件,里面定义了STM32芯片内部所有寄存器的地址和结构,通过C语言来调用这里面的寄存器实现芯片的控制功能。

(4)驱动文件:驱动文件位于HEADERWARE目录中,用于存放项目所用到的驱动,比如之前实验所用到的LED,KEY,TIM这些外设都属于驱动文件内容。

至此整个工程的目录结构如下图所示。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632829
  • STM32
    +关注

    关注

    2266

    文章

    10870

    浏览量

    354740
  • 电容触摸
    +关注

    关注

    0

    文章

    70

    浏览量

    16445
收藏 人收藏

    评论

    相关推荐

    STM32学习笔记(初学者快速入门)

    本帖最后由 eehome 于 2013-1-5 10:08 编辑 STM32学习笔记(初学者快速入门)
    发表于 08-18 21:35

    STM32学习笔记(初学者快速入门)

    STM32学习笔记(初学者快速入门)资料来自网络资源
    发表于 06-11 20:23

    CubeMX入门STM32 HAL库的学习笔记

    STM32CubeMX是ST官方开发的一款很好用的软件,主要用于STM32系列单片机的硬件驱动层的配置。网上也有一些关于STM32CubeMX的相关教程,对它的相关操作进行说明。从今天起,小柯希望能将自己从CubeMX
    发表于 08-17 06:55

    STM32入门学习笔记 精选资料分享

    STM32入门学习笔记本文为笔者入门学习过程的记录,只是零散的记录了一些个人不太懂得,觉得需要经
    发表于 08-24 07:56

    STM32各模块学习笔记

    STM32个模块学习笔记 目录 STM32笔记之一 中断优先级.......................................
    发表于 11-30 03:32 3142次阅读

    STM32学习笔记1——软硬件基础keil5编程与GPIO开发

    STM32学习笔记1——软硬件基础keil5编程与GPIO开发
    发表于 11-30 12:36 4次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>1——软硬件基础<b class='flag-5'>之</b>keil5编程与GPIO开发

    STM32学习心得十九:电容触摸按键实验及相关代码解读

    记录一,方便以后翻阅~主要内容:1) 电容触摸按键原理;2)部分实验代码解读。实验内容:手触摸
    发表于 11-30 12:51 15次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b>心得十九:<b class='flag-5'>电容</b><b class='flag-5'>触摸</b>按键<b class='flag-5'>实验</b>及相关代码解读

    STM32学习STM32cubeMX软件安装与使用(附STM32cubeMX5.2.1载地址)

    STM32学习STM32cubeMX软件安装与使用(附STM32cubeMX5.2.1载地址
    发表于 12-07 11:51 28次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>之</b><b class='flag-5'>STM32</b>cubeMX软件安装与使用(附<b class='flag-5'>STM32</b>cubeMX5.2.1<b class='flag-5'>下</b>载地址)

    STM32学习笔记(11)电容触摸按键

    简介通过触摸电容屏幕达到类似触摸按键的作用,相对于传统的机械按键有寿命长、占用空间少、易于操作等诸多优点。原理但未触摸时,触摸系统内仅有一个
    发表于 12-28 19:17 5次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>(11)<b class='flag-5'>电容</b><b class='flag-5'>触摸</b>按键

    STM32学习笔记:跑马灯实验

    跑马灯实验放寒假了,最近在学习STM32所以想写写一些笔记,刚刚好也能和大家分享一下学习心得体会,希望能够对和我一样在
    发表于 01-17 10:57 2次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>:跑马灯<b class='flag-5'>实验</b>

    STM32入门(二十一)----电容触摸

    值;Vt 为t时刻电容上的电压值。硬件连接R:外接电容充放电电阻。Cs:TPAD和PCB间的杂散电容。Cx:手指按时,手指和TPAD之间的电容
    发表于 01-17 11:25 4次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>入门</b>(二十一)----<b class='flag-5'>电容</b><b class='flag-5'>触摸</b>

    STM32入门学习笔记基础定时器实验

    STM32内部共有8个定时器,其中Timer1和Timer8属于高级定时器,Timer2~Timer5属于通用定时器,8个定时器的资源独立,互不影响。
    的头像 发表于 02-16 10:14 745次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>入门</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b>基础定时器<b class='flag-5'>实验</b>(<b class='flag-5'>下</b>)

    STM32入门学习笔记电容触摸实验(上)

    随着科技的发展,传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为
    的头像 发表于 02-16 10:22 1269次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>入门</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>电容</b><b class='flag-5'>触摸</b><b class='flag-5'>实验</b>(上)

    STM32学习笔记电容触摸1

    随着科技的发展,传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为
    的头像 发表于 05-26 14:37 854次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>电容</b><b class='flag-5'>触摸</b>1

    STM32学习笔记电容触摸2

    传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为不存在机械接触,占用空间少,以前的机械按键在设计外壳的时候需要考虑尺寸,现在换成
    的头像 发表于 05-26 14:41 435次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>电容</b><b class='flag-5'>触摸</b>2