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

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

3天内不再提示

STM32学习笔记之电容触摸2

jf_78858299 来源:电子技术园地 作者:滑小稽笔记 2023-05-26 14:41 次阅读

(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这些外设都属于驱动文件内容。

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

图片

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

    关注

    8

    文章

    1572

    浏览量

    40533
  • 电容按键
    +关注

    关注

    0

    文章

    5

    浏览量

    1416
收藏 人收藏

    评论

    相关推荐

    STM32学习笔记_DAY2_GPIO

    STM32学习笔记_DAY2_GPIO,附带工程文件
    发表于 08-14 12:44

    详细的STM32单片机学习笔记

    STM32单片机学习笔记给大家参考
    发表于 11-23 17:55 1.5w次阅读

    STM32各模块学习笔记

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

    基于STM32触摸学习笔记资料下载

    电子发烧友网为你提供基于STM32触摸学习笔记资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到
    发表于 04-24 08:48 37次下载
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>触摸</b>屏<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>资料下载

    OpenStackCinder学习笔记

    OpenStackCinder学习笔记(开关电源技术教程ppt)-该文档为OpenStackCinder学习
    发表于 09-23 12:40 5次下载
    OpenStack<b class='flag-5'>之</b>Cinder<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    STM32学习笔记SysTick

    Systick大有不同,于是作此学习笔记。Systick的两大作用:1、可以产生精确的延时2、可以提供给操作系统一个单独的心跳(时钟)节拍通常实现Delay(N)函数的方法为:    &n
    发表于 11-25 10:36 1次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b>SysTick

    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学习笔记--------day1

    STM32学习笔记--------day1
    发表于 12-05 20:36 8次下载
    <b class='flag-5'>STM32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>--------day1

    STM32电容触摸按键

    00. 目录文章目录00. 目录01. 电容触摸按键简介02. 硬件设计03. 功能描述04. 程序示例05. 结果验证06. 附录07. 声明01. 电容触摸按键简介
    发表于 12-14 18:49 39次下载
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>电容</b><b class='flag-5'>触摸</b>按键

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

    所需时间T1,当触摸时,触摸系统相当于并联多一个电容,总电容增大,充电时间延长,通过测量此时充电所需时间T2,如果T
    发表于 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开发工程模板的创建学习笔记

    本来这个实习内容是去年做的,基于STM32f103芯片的智能小车项目培训,做完之后我就把学习资料打包放在百度云盘里了。因为最近在跟着导师做一个项目,需要用到STM32单片机,于是重新将尘封多许的
    发表于 12-29 19:45 1次下载
    (一)<b class='flag-5'>STM32</b>开发<b class='flag-5'>之</b>工程模板的创建<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    stm32学习笔记1

    此博客仅个人学习笔记,用以本人学习stm32的记录、分析、总结。有所错漏再所难免,有则改之无则加勉。这里就直接以通俗的语言来记录了,大家见谅。学习
    发表于 01-18 08:37 59次下载
    <b class='flag-5'>stm32</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b>1

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

    随着科技的发展,传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为
    的头像 发表于 02-16 10:22 1296次阅读
    <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>实验(上)

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

    随着科技的发展,传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为
    的头像 发表于 02-16 10:22 699次阅读
    <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>实验(下)

    STM32学习笔记电容触摸1

    随着科技的发展,传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为
    的头像 发表于 05-26 14:37 914次阅读
    <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