STM32嵌入式開發學習筆記(三):使用按鍵控制小燈


按鍵和小燈一樣,也是通過GPIO外設與主板連接,也是通過GPIO_InitStruct類型結構體控制其工作。

查閱技術手冊,按鈕連接GPIOA控制下的管腳0.

但與之不同的是,按鍵是一種輸入設備,輸入設備的工作狀態也有四類,模擬輸入,浮空輸入,下拉輸入和上拉輸入。

模擬輸入就是輸入一個波形,浮空輸入指的是未按下按鈕時,不確定此管腳的信號狀態。

上拉輸入指按下按鈕時,輸出低電平,即0,松開按鈕時,輸出高電平,即1.

下拉輸入則相反。

但是因為STM32的構造問題,按鈕只能采用上拉輸入,如果將此管腳工作狀態定義為下拉輸入,則輸出會保持0.

可能是因為管腳A1STM32的設計上就是接地的,因此,下拉輸入,按下按鈕后依然保持了低電平。

用GPIO_ReadInputDataBit函數讀取某個管腳的輸入輸出,注意此函數返回值是u8,無符號8位整數。

在key.h/.c文件中定義和實現按鈕初始化和讀取按鈕功能。

#include <stm32f10x.h>
#ifndef _KEY_H
    #define _KEY_H
    void KEY_configer(void);
    u8 KEY_scan(void);
#endif
//key.h
#include <stm32f10x.h>
#include <key.h>
void KEY_configer(){
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    GPIO_InitTypeDef GPIO_KEY_INIT;
    GPIO_KEY_INIT.GPIO_Pin=GPIO_Pin_0;
    GPIO_KEY_INIT.GPIO_Speed=GPIO_Speed_2MHz;
    GPIO_KEY_INIT.GPIO_Mode=GPIO_Mode_IPU;
    GPIO_Init(GPIOA,&GPIO_KEY_INIT);
}
u8 KEY_scan(){
    return GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
}
//key.c

在led.h/.c中定義小燈初始化和開關

#include <stm32f10x.h>
#ifndef _LED_H
    #define _LED_H
    void LED_configer(void);
    void LED_on(void);
    void LED_off(void);
#endif
//led.h
#include <led.h>
#include <stm32f10x.h>
void LED_configer(){
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    GPIO_InitTypeDef GPIO_LED_INIT;
    GPIO_LED_INIT.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
    GPIO_LED_INIT.GPIO_Speed=GPIO_Speed_2MHz;
    GPIO_LED_INIT.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA,&GPIO_LED_INIT);
}
void LED_on(){
    GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
}
void LED_off(){
    GPIO_ResetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
}
//led.c

主函數的實現邏輯是,不斷詢問按鈕狀態,若按下則打開小燈,若未按下則關閉小燈

#include <stdio.h>
#include <stm32f10x.h>
#include <led.h>
#include <key.h>
int main(){
    KEY_configer();
    LED_configer();
    while(1){
        if(KEY_scan()==0){
            LED_on();
        }else{
            LED_off();
        }
    }
    return 0;
}
//main.c

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM