衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32的GPIO輸入編程實(shí)例之讀取按鍵狀態(tài)

2oON_changxuemc ? 2018-02-10 11:08 ? 次閱讀

一、概述

1、按鍵簡(jiǎn)介

按鍵是一種機(jī)械器件,按鍵兩端分別對(duì)應(yīng)某電路的兩個(gè)斷點(diǎn),我們可以通過(guò)按鍵接通和斷開控制該電路的電壓等參數(shù),我們利用按鍵做的應(yīng)用通常有控制繼電器、鍵盤、復(fù)位等。隨著應(yīng)用的擴(kuò)展,按鍵已成為電路板上不可或缺的一部分。

2、按鍵類別簡(jiǎn)介

按鍵主要有四種類型:常開帶復(fù)位、常開不帶復(fù)位、常閉帶復(fù)位、常閉不帶復(fù)位。(本次實(shí)驗(yàn)使用的是常開帶復(fù)位按鍵)

按鍵主要有以下4種工作模式:

常開帶復(fù)位:初始默認(rèn)狀態(tài)是開路,當(dāng)受力按下時(shí)按鍵使電路連通,受力結(jié)束后其自動(dòng)返回開路狀態(tài)。 常開帶不復(fù)位:初始默認(rèn)狀態(tài)是開路,每按下一次按鍵改變一次開閉狀態(tài)。 常閉帶復(fù)位:初始默認(rèn)狀態(tài)是連通,當(dāng)受力按下時(shí)按鍵使電路開路,受力結(jié)束后其自動(dòng)返回連通狀態(tài)。 常閉不帶復(fù)位:初始默認(rèn)狀態(tài)是連通,每按下一次按鍵改變一次開閉狀態(tài)。 3、按鍵消抖

使用手動(dòng)按鍵的時(shí)候,由于機(jī)械抖動(dòng)可能造成按鍵的錯(cuò)誤識(shí)別。一般手動(dòng)按下按鍵然后釋放,按鍵兩片金屬膜接觸的時(shí)間大約為50ms,按鍵松開到穩(wěn)定的時(shí)間為5-10ms。因此,如果在首次檢測(cè)到按鍵被按下后延時(shí)20ms左右再次檢測(cè),即可確認(rèn)是否真的有按鍵被按下,從而消除按鍵抖動(dòng)造成的錯(cuò)誤識(shí)別。本實(shí)驗(yàn)通過(guò)給于一定延時(shí)后再進(jìn)行檢測(cè),從而有效的避免了按鍵抖動(dòng)帶來(lái)的誤判。

二、硬件電路

iCore3雙核心開發(fā)板中,采用一個(gè)獨(dú)立的按鍵與STM32F407的PH15相連,限流電阻為1K。

三、實(shí)驗(yàn)原理

按鍵的一端與STM32的GPIO(PH15)相連,另外一端接地,且PH15外接一個(gè)1K電流大小的上拉電阻。初始化時(shí)把PH15設(shè)置成輸入模式,當(dāng)按鍵彈起時(shí),PH15由于上拉電阻的作用呈高電平(3.3V);當(dāng)按鍵按下時(shí),PH15直接被按鍵短接到GND,呈低電平。因此判斷PH15的電平變化,可得到按鍵狀態(tài)。

四、源代碼

1、主函數(shù)

/*

* Name : main

* Description : ---

* Author : ysloveivy.

*

* History

* --------------------

* Rev : 0.00

* Date : 11/21/2015

*

* create.

* --------------------

*/

int main(void)

{

int i;

static int work_status = 0; //三色LED燈工作狀態(tài)

static int key_status = 1; //按鍵松開標(biāo)置

led.initialize(); //三色LED燈端口初始化

key.initialize();

while(1){

if(KEY_INPUT)key_status = 1;

if(key_status == 1){

if(!KEY_INPUT){

for(i = 0;i < 10000;i++); //按鍵防抖動(dòng)

if(!KEY_INPUT){

key_status = 0;

work_status += 1;

if(work_status > 2)work_status = 0;

//操作 LED

switch(work_status){

case 0:

LED_RED_ON;

LED_GREEN_OFF;

LED_BLUE_OFF;

break;

case 1:

LED_RED_OFF;

LED_GREEN_ON;

LED_BLUE_OFF;

break;

case 2:

LED_RED_OFF;

LED_GREEN_OFF;

LED_BLUE_ON;

break;

default:

break;

}

}

}

}

}

}

2、GPIO初始化

LED的GPIO初始化配置方式與上一講一致,以下是按鍵的GPIO初始化程序

/*

* Name : initialize

* Description : ---

* Author : ysloveivy.

*

* History

* --------------------

* Rev : 0.00

* Date : 11/21/2015

*

* create.

* --------------------

*/

static int initialize(void)

{

GPIO_InitTypeDef GPIO_uInitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOH,ENABLE);

//設(shè)置連接按鍵的IO端口

GPIO_uInitStructure.GPIO_Pin = GPIO_Pin_15;

//設(shè)置端口為輸入模式

GPIO_uInitStructure.GPIO_Mode = GPIO_Mode_IN;

//設(shè)置速度為第三級(jí)

GPIO_uInitStructure.GPIO_Speed = GPIO_Speed_100MHz;

//設(shè)置輸入端口不變化

GPIO_uInitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

//把設(shè)置的參數(shù)用到結(jié)構(gòu)體

GPIO_Init(GPIOH, &GPIO_uInitStructure);

return 0;

}

3、小知識(shí)

voidRCC_AHB1PeriphClockCmd

(uint32_tRCC_AHB1Periph,FunctionalStateNewState)

此函數(shù)為外設(shè)使能函數(shù),第一個(gè)參數(shù)為需要被使能的外設(shè),第二個(gè)參數(shù)為使能與否。可能很多讀者看到這函數(shù)不知道如何入手,不知道參數(shù)填啥子好,別急,咱先查看一下他的定義:

查看定義方法:雙擊函數(shù)名選中,右擊再點(diǎn)GO TODefinition of ...就可以查看咯。

RCC_AHB1PeriphClockCmd函數(shù)定義如下:

void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState)

{

/* Check the parameters */

assert_param(IS_RCC_AHB1_CLOCK_PERIPH(RCC_AHB1Periph));

assert_param(IS_FUNCTIONAL_STATE(NewState));

if (NewState != DISABLE)

{

RCC->AHB1ENR |= RCC_AHB1Periph;

}

else

{

RCC->AHB1ENR &= ~RCC_AHB1Periph;

}

}

注意被我標(biāo)紅的字符串,按照剛剛查定義的方法,它會(huì)告訴我們函數(shù)的參數(shù)可以填啥。如查看IS_FUNCTIONAL_STATE:

#define IS_FUNCTIONAL_STATE(STATE)

(((STATE) == DISABLE) || ((STATE) == ENABLE))

我們可以看出第二個(gè)參數(shù)可填寫DISABLE(使能)和ENABLE(不使能)。

小結(jié):上面用外設(shè)的使能函數(shù)為大家介紹了查看函數(shù)的方法,此方法在實(shí)際應(yīng)用經(jīng)常可以用到,當(dāng)我們?cè)陂喿x、修改程序的時(shí)候,遇到哪些不太清楚的函數(shù),就可以用這種方法查看。

五、實(shí)驗(yàn)現(xiàn)象

按鍵每按下一次,ARM·LED顏色變換(紅色、綠色、藍(lán)色輪流交換)一次。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2272

    文章

    10924

    瀏覽量

    357589
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1216

    瀏覽量

    52383

原文標(biāo)題:STM32學(xué)習(xí)2:GPIO輸入實(shí)驗(yàn)——讀取按鍵狀態(tài)

文章出處:【微信號(hào):changxuemcu,微信公眾號(hào):暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    i.MX6ULL 驅(qū)動(dòng)開發(fā)7—按鍵輸入捕獲與GPIO輸入配置與高低電平讀取

    本篇主要介紹了i.MX6ULL的按鍵檢測(cè)的使用,主要的知識(shí)點(diǎn)是設(shè)備樹的修改,以及GPIO輸入配置與高低電平的讀取
    的頭像 發(fā)表于 05-24 09:11 ?6342次閱讀
    i.MX6ULL 驅(qū)動(dòng)開發(fā)7—<b class='flag-5'>按鍵</b><b class='flag-5'>輸入</b>捕獲與<b class='flag-5'>GPIO</b><b class='flag-5'>輸入</b>配置與高低電平<b class='flag-5'>讀取</b>

    【HAL庫(kù)每天一例】第004例:GPIO-按鍵狀態(tài)判斷掃描式

    GPIO輸出高低電平實(shí)現(xiàn)LED燈亮滅,現(xiàn)在是時(shí)鐘GPIO輸入模式,按鍵按下時(shí)會(huì)改變GPIO的電平,對(duì)應(yīng)的
    發(fā)表于 05-09 10:06

    講講關(guān)于GPIO按鍵輸入的關(guān)鍵要點(diǎn)

    上次我們講解了操作STM32GPIO-輸出的3種方法和關(guān)鍵代碼,這節(jié)我們講關(guān)于GPIO按鍵輸入的關(guān)鍵要點(diǎn),分為
    發(fā)表于 12-09 06:33

    arm7單片機(jī)編程實(shí)例,ARM7輸入/輸出端口GPIO編程教程

    ARM7輸入/輸出端口GPIO編程教程
    發(fā)表于 04-19 14:43 ?2721次閱讀
    arm7單片機(jī)<b class='flag-5'>編程</b><b class='flag-5'>實(shí)例</b>,ARM7<b class='flag-5'>之</b><b class='flag-5'>輸入</b>/輸出端口<b class='flag-5'>GPIO</b><b class='flag-5'>編程</b>教程

    GPIO輸入--按鍵

    程序簡(jiǎn)介 -工程名稱:GPIO輸入--按鍵 -實(shí)驗(yàn)平臺(tái): 秉火STM32 F429 開發(fā)板 -MDK版本:5.16 -ST固件庫(kù)版本:1.5.1 【 !】功能簡(jiǎn)介: 使用兩個(gè)
    發(fā)表于 12-12 19:08 ?3次下載

    STM32--固件庫(kù)使用--按鍵輸入

    STM32–固件庫(kù)使用–按鍵輸入簡(jiǎn)介1.硬件STM32F103C8T6 獨(dú)立按鍵2.軟件keil軟件硬件部分軟件部分key.c#includ
    發(fā)表于 11-21 17:51 ?15次下載
    <b class='flag-5'>STM32</b>--固件庫(kù)使用--<b class='flag-5'>按鍵</b><b class='flag-5'>輸入</b>

    STM32F103-入門基礎(chǔ)實(shí)驗(yàn)-GPIO輸入-按鍵(查詢/中斷)控制LED核心代碼(固件庫(kù)版)

    上次我們講解了操作STM32GPIO-輸出的3種方法和關(guān)鍵代碼,這節(jié)我們講關(guān)于GPIO按鍵輸入的關(guān)鍵要點(diǎn),分為
    發(fā)表于 11-26 13:21 ?0次下載
    <b class='flag-5'>STM32</b>F103-入門基礎(chǔ)實(shí)驗(yàn)-<b class='flag-5'>GPIO</b><b class='flag-5'>輸入</b>-<b class='flag-5'>按鍵</b>(查詢/中斷)控制LED核心代碼(固件庫(kù)版)

    2、【STM32F0系列學(xué)習(xí)】—通用輸入輸出端口(GPIO)

    STM32F0系列學(xué)習(xí)】—通用輸入輸出端口GPIO1、GPIO端口配置說(shuō)明1、GPIO端口配
    發(fā)表于 11-29 16:51 ?66次下載
    2、【<b class='flag-5'>STM32</b>F0系列學(xué)習(xí)】<b class='flag-5'>之</b>—通用<b class='flag-5'>輸入</b>輸出端口(<b class='flag-5'>GPIO</b>)

    STM32學(xué)習(xí)筆記1——軟硬件基礎(chǔ)keil5編程GPIO開發(fā)

    STM32學(xué)習(xí)筆記1——軟硬件基礎(chǔ)keil5編程GPIO開發(fā)
    發(fā)表于 11-30 12:36 ?4次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)筆記1——軟硬件基礎(chǔ)<b class='flag-5'>之</b>keil5<b class='flag-5'>編程</b>與<b class='flag-5'>GPIO</b>開發(fā)

    Linux應(yīng)用開發(fā)【第九章】GPIO編程應(yīng)用開發(fā)

    設(shè)置GPIO方向 9.4.3 GPIO輸出實(shí)驗(yàn)-LED輸出控制 9.4.4 GPIO輸入試驗(yàn)-按鍵
    的頭像 發(fā)表于 12-10 19:21 ?837次閱讀
    Linux應(yīng)用開發(fā)【第九章】<b class='flag-5'>GPIO</b><b class='flag-5'>編程</b>應(yīng)用開發(fā)

    STM32 按鍵輸入實(shí)驗(yàn)

    加粗樣式一.實(shí)驗(yàn)?zāi)康?.熟悉使用STM32F4XX開發(fā)板2.掌握其GPIO的使用方法3.掌握按鍵的實(shí)現(xiàn)方法二.實(shí)現(xiàn)步驟(1)使能按鍵對(duì)應(yīng)IO口時(shí)鐘。調(diào)用函數(shù)
    發(fā)表于 12-27 18:53 ?4次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>按鍵</b><b class='flag-5'>輸入</b>實(shí)驗(yàn)

    STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)

    STM32基本GPIO操作:按鍵輸入(掃描+外部中斷)本文章向大家介紹STM32基本GPIO操作
    發(fā)表于 12-29 19:27 ?13次下載
    <b class='flag-5'>STM32</b>基本<b class='flag-5'>GPIO</b>操作:<b class='flag-5'>按鍵</b><b class='flag-5'>輸入</b>(掃描+外部中斷)

    STM32筆記按鍵KEY輸入

    關(guān)于STM32學(xué)習(xí)分享第二章 按鍵輸入控制文章目錄前言二、代碼1.key.c2.key.h3.main.c總結(jié)前言開始!開始!單片機(jī)的按鍵配置為輸入
    發(fā)表于 12-31 19:49 ?7次下載
    <b class='flag-5'>STM32</b>筆記<b class='flag-5'>之</b><b class='flag-5'>按鍵</b>KEY<b class='flag-5'>輸入</b>

    GPIO讀取按鈕狀態(tài)

    樹莓派的GPIO可以控制發(fā)光二極管,這是GPIO的Output(輸出)能力,它也具有input(讀取)的能力,所以才能叫做I/O(輸入/輸出)端口。今天我們就來(lái)用
    的頭像 發(fā)表于 07-02 15:06 ?1804次閱讀
    用<b class='flag-5'>GPIO</b><b class='flag-5'>讀取</b>按鈕<b class='flag-5'>狀態(tài)</b>

    stm32怎么讀取io口輸入電平

    讀取STM32的IO口輸入電平,你可以使用GPIO外設(shè)來(lái)完成。GPIO是通用輸入輸出端口,它可
    的頭像 發(fā)表于 01-05 11:46 ?5105次閱讀
    郑州百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城骰宝| 金百家乐官网网站| 大发888-娱乐场| 王牌百家乐官网的玩法技巧和规则 | 网络百家乐赌场| 百家乐投注软件有用吗| 在线百家乐官网技巧| 威尼斯人娱乐网站| 百家乐官网种类| 百家乐官网是骗人吗| 大连百家乐食品| 百家乐官网群lookcc| 真人百家乐官网皇冠网| 威尼斯人娱乐场it| 地理风水24山72局杨公水法| 舟山市| 百家乐大光明影院| 阳宅24方位座向| 百家乐官网可以算牌么| 大发888真钱娱乐游戏| 风水24山详解| 现金百家乐官网网上娱乐| 乐天百家乐的玩法技巧和规则| 环球百家乐官网的玩法技巧和规则| 永利博国际网| 皇马百家乐的玩法技巧和规则| 来博百家乐游戏| 淘金盈娱乐城| 网上百家乐是真的| 犹太人百家乐官网的玩法技巧和规则| 呼玛县| 大发888最新版本下载| 至尊百家乐奇热| 南京百家乐官网赌博现场被| 博彩e族| 大发888娱乐城官网| 百家乐贴| 百家乐官网筹码| 打百家乐官网庄闲的技巧| 北安市|