神舟IV學(xué)習(xí)筆記(二)按鍵檢測(cè)
STM32的IO口能夠由軟件配置成8種模式,如圖所示。好出在于在硬件設(shè)計(jì)的時(shí)候,可以方便I/0的選擇,從而走線上帶來(lái)方便。
模擬輸入
輸入模式浮空輸入
輸入下拉
輸入上拉
輸出模式開(kāi)漏輸出
推挽輸出
復(fù)用開(kāi)漏輸出
復(fù)用推挽輸出
我們今天使用的按鍵端口,配置為上拉輸出,這樣的話,按鍵未按下時(shí)值為1,當(dāng)按鍵按下時(shí)值為0。LED使用的I/O配置為推挽輸出模式,用于指示按鍵的狀態(tài)。我們專門(mén)把按鍵模塊寫(xiě)成子文件,方便下次功能的移植。程序只是簡(jiǎn)單的敘述了數(shù)字輸入的檢測(cè)功能,實(shí)際應(yīng)用中按鍵還應(yīng)加延時(shí)消抖處理。程序采用輪詢查詢的方法,實(shí)際上使用中斷的方法,更加有效。
KEY.C代碼:
#include "key.h"
void KEY_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin =KEY1 | KEY3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//可以省略,下面都是按照上面相同的配置
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin =KEY2;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin =KEY4;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
KEY.H代碼
#ifndef __KEY_H
#define __KEY_H
#include "stm32f10x_conf.h"
#define KEY1 GPIO_Pin_4
#define KEY2 GPIO_Pin_10
#define KEY3 GPIO_Pin_13
#define KEY4 GPIO_Pin_0
#define Read_key1() ((GPIOC->IDR & KEY1)?0:1)//按下時(shí)才為0
#define Read_key2() ((GPIOB->IDR & KEY2)?0:1)
#define Read_key3() ((GPIOC->IDR & KEY3)?0:1)
#define Read_key4() ((GPIOA->IDR & KEY4)?0:1)
//#define Read_key1() !GPIO_ReadInputDataBit(GPIOC, KEY1)
//#define Read_key2() !GPIO_ReadInputDataBit(GPIOB, KEY2)
//#define Read_key3() !GPIO_ReadInputDataBit(GPIOC, KEY3)
//#define Read_key4() !GPIO_ReadInputDataBit(GPIOA, KEY4)
void KEY_Configuration(void);
#endif