/*
名稱:STM32_GPIO之按鍵輸入
說明:這個實驗是GPIO的輸入功能?;镜乃悸泛?a href="http://www.womende.cn/zhuanti/Pu98e9" style="color:#4595e6;" target="_blank">51單片機差不多。也是
操作相應的IO口,不過不同的是對于獨立按鍵輸入實驗來說,51單片機是
需要一開始把待檢測的IO口設置成高電平,然后檢測其何時被拉低。而對
于STM32來說,其GPIO端口就可以設置成上拉輸入,即不需要再人為的把對
應的對應的IO口設置成高電平,硬件電路會自動把對應端口引腳拉成高電
平。
還有一點關(guān)于條件編譯要說的:這個ifndef… #endif 一般用在頭文件中。書上說為了防止重復編譯。就我目前了解的來看,在實際應用中,如果在兩個.c源文件中都include了一個頭文件,那么好像加不加這個條件編譯都沒什么影響(如果沒有定義什么特殊的東西的話)。 但是,最好不要在頭文件中定義變量(如int i);因為這樣的話,如果兩個.c源文件的都include了這個頭文件,那么就會在鏈接時(注意是鏈接不是編譯時)發(fā)生重復定義的錯誤。(好像是因為聲明可以多次,但定義只能一次。)所以通常的做法是在.c源文件中定義變量,然后在對應的頭文件中利用外部聲明(即類似于extern int i;) 進行使用。
*/
#include "key.h"
//KEY端口配置
void KEY_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = ALLKEY;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(KEY_PORT, &GPIO_InitStructure);
}
//聲明延時函數(shù)
void delay_ms(u16 time);
//檢查獨立按鍵
int CheakKey()
{
uint16_t key = 1;
int i = 0;
for(i = 1;i <= 8;++i)
{
//軟件消抖
if(GPIO_ReadInputDataBit(KEY_PORT,key) == Bit_RESET)
{
delay_ms(10);
if(GPIO_ReadInputDataBit(KEY_PORT,key) == Bit_RESET)
return i;
}
key = key<<1; //左移一位
}
//if( i > 8)
return -1;
}
上一篇:STM32之SPI串行線與HC595使用
下一篇:STM32_GPIO之點亮LED實驗
推薦閱讀
史海拾趣
設計資源 培訓 開發(fā)板 精華推薦
- 孚能科技全固態(tài)電池中試線年底建成,能量密度超400Wh/kg
- 比亞迪新專利:電池尺寸不變,續(xù)航大幅提升
- 豐田子公司37億大連建廠首次在中國生產(chǎn)純電汽車電池
- 博泰車聯(lián)網(wǎng)沖刺港股:上海灘走出的汽車智能化隱形冠軍
- 從自動駕駛到具身智能,激光雷達緣何一邊被嫌棄,一邊被追捧?
- 軟件定義車輛改變汽車行業(yè)的3種方式
- 混合動力汽車也是超級跑車:強調(diào)性能,而不是里程
- 人形機器人風口下,六維力傳感器成為國產(chǎn)廠商“卡位”關(guān)鍵點
- AURIX? TC4x虛擬化技術(shù)詳解
- 從荔枝的“鮮和煎”,看英特爾銳炫Pro B60的AI空間折疊魔術(shù)