在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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這些外設都屬于驅動文件內容。

至此整個工程的目錄結構如下圖所示。

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6037

    文章

    44562

    瀏覽量

    635757
  • STM32
    +關注

    關注

    2270

    文章

    10903

    瀏覽量

    356276
  • 電容觸摸
    +關注

    關注

    0

    文章

    70

    瀏覽量

    16458
收藏 人收藏

    評論

    相關推薦

    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 ?3164次閱讀

    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 ?785次閱讀
    <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 ?1311次閱讀
    <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 ?927次閱讀
    <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 ?465次閱讀
    <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
    主站蜘蛛池模板: 最好看的最新中文字幕2018免费视频| xxxx人成高清免费图片| 唐人社电亚洲一区二区三区| 天天鲁天天爽精品视频| 黄的三级在线播放| 婷婷sese| 欧洲不卡一卡2卡三卡4卡网站| 国产亚洲精品美女久久久| 永久免费在线观看视频| 久久99精品久久久久久野外| 色噜噜狠狠狠狠色综合久| 在线观看黄色一级片| 中文一区在线| 欧美最猛性xxxx免费| 欧美另类69xxxxxhd| 在线天天干| 天天干天天弄| 狠狠色丁香久久婷婷| 国产在线美女| 久久的色偷偷| 成人性生活免费视频| 国产片翁熄系列乱在线视频| 久久久综合色| 欧美日韩色综合网站| 四虎地址8848最新章节| 亚洲香蕉国产高清在线播放| 国产成人无精品久久久久国语| 3344成年在线视频免费播放男男| 高清一级| 国产午夜毛片一区二区三区| 无遮挡很污很爽很黄的网站| www.福利| 国产巨大bbbb天美| 久久久久久天天夜夜天天| 人人骚| 手机看片日韩在线| 色视频综合| 久久91精品牛牛| 国产综合在线视频| 羞羞答答91麻豆网站入口| 午夜私人影院|