STM32学习笔记之电容触摸2

发布者:GoldenDream最新更新时间:2024-03-07 来源: elecfans关键字:STM32  学习笔记  电容触摸 手机看文章 扫描二维码
随时随地手机看文章

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

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

图片


关键字:STM32  学习笔记  电容触摸 引用地址:STM32学习笔记之电容触摸2

上一篇:使用STM32单片机点亮LED
下一篇:STM32学习笔记之电容触摸1

推荐阅读最新更新时间:2024-11-10 19:08

STM32通过FSMC读写CPLD
STM32通过FSMC读写CPLD的程序,CPLD挂在STM32的地址线和数据线上,将CPLD看做片外RAM的方式来进行读写,在我做的板子上CPLD挂在第四个区,因此基地址是0x6c000000,通过FSMC来进行读写,程序较为简单,具体的地方在函数中都有注释,仅供参考。 /**************************(C) COPYRIGHT emouse 2011*************************** 名称:CPLD.c 功能:配置fsmc,CPLD读写函数 作者:emouse 时间:2011.1.2 版本:1.0 注意:一定要使能RCC_AHBPeriphClockCmd
[单片机]
STM32学习笔记一一FLASH 模拟 EEPROM
1. 简述 STM32 本身没有自带 EEPROM,但是 STM32 具有在应用编程(IAP:In Application Programming)功能,可以把它的 FLASH 当成 EEPROM 来使用。 不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了1024K 字节。MiniSTM32 开发板选择的 STM32F103RCT6 的 FLASH 容量为 256K 字节,属于大容量产品,闪存模块组织如下图: 1.1 主存储器: 该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。**注意:**小容量和中
[单片机]
<font color='red'>STM32</font><font color='red'>学习</font><font color='red'>笔记</font>一一FLASH 模拟 EEPROM
STM32如何生成lib以供二次开发
相关方法: 0 STM32最新固件库(3.5)封装lib加工程模版 1 stm32 教你如何编译出LIB文件 2 stm32如何生成lib 3 教你如何在stvd中生成lib文件,好处你懂的~ 4 谁知道在RVMDK下怎样生成 lib 文件? 5 STM32之如何封装自己的lib 库
[单片机]
详解STM32最小系统电路
STM32最小系统硬件组成 最小系统为单片机工作的最低要求,不含外设控制,原理简单,分析最小系统是STM32入门的基础。 组成: · 电源 · 复位 · 时钟 · 调试/下载接口 · 启动 电源 3.3V的电源从这里接入,其中电容起到滤波的作用。 复位电路 当RESET引脚被拉低产生外部复位时,产生复位脉冲,从而使系统复位。 有三种复位方式: · 上电复位 · 手动复位 · 程序自动复位 上电复位 ,在上电瞬间,电容充电,RESET出现短暂的低电平,该低电平持续时间由电阻和电容共同决定,需求的复位信号持续时间约在1ms左右,计算方式如下: t = 1.1RC(固定计算公式) 1.1*10K*0.1uF
[单片机]
stm32的两种固件下载模式:JTAG和SWD
一、JTAG模式 这种模式一般有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的。值得注意的是,不同的IC公司会自己定义自家产品专属的Jtag头,来下载或调试程序。 Test Clock Input (TCK) -----强制要求1:TCK在IEEE1149.1标准里是强制要求的。TCK为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。 Test Mode Selection Input (TMS) -----强制要求2:TMS信号在TCK的上升沿有效。TMS在IEEE1149.1标准里是强制要求的。TMS信号用来控制TAP
[单片机]
<font color='red'>stm32</font>的两种固件下载模式:JTAG和SWD
iar &stm32调试过程中遇到的问题记录
10/16串口可以实现发送但是死或接受不了数据,前段时间还可以,但是不知道动了,不能入中断,后来加了增加几句关于标志位清除的函数后,可以进行接收数据了 1、串口都不能进入中断函数,造成HardFault_Hander,网上知道是由于不能进入中断造成的,需要添加中断向量,中断向量函数入口在启动文件startup_stm32f10x_hd_vl.s中,于是爸库里面的启动文件添加进来,但是报了天量的错误。一查,得知原来库里面的启动文件与IAR不兼容,于是在iar里面搜索“startup_stm32f1”的字样,找到文件里面D:Program Files (x86)IAR SystemsEmbedded Workbench 8.1ar
[单片机]
iar &<font color='red'>stm32</font>调试过程中遇到的问题记录
STM32单片机闪存存储器里存储的是哪些内容
先看rom也就是flash(0x0800 0000-0x0807 ffff)51 2k ,这个空间就是用户存放程序的地方,用户以后自己写boot loader的时候,也是存放在这个空间里的,system memory这个空间是 2k 大小,是st公司在生产完片子的时候,就固化好的isp代码,用户之所以能用上位机软件烧程序就是靠这部分的代码,用户更改不了这个区域,想了解这个区域就看AN2606文档,option bytes这个区域是16个字节,是控制flash区域的寄存器,想了解这些寄存器看STM32F10xxx闪存编程参考手册,SRAM这个区域的其实地址始终是0x2000 0000,终止地址就得根据你的SRAM的大小来进行计算
[单片机]
STM32之ADC模数转换
简介:ADC通常要与DMA一起使用 这里只是简单的用库配置ADC 不断扫描来实现ADC的应用。 首先配置GPIO与ADC的时钟: ADC_InitTypeDefADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//来自:S_T_M8._CN GPIO_InitSt
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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