stm32專題二 GPIO輸入 按鍵檢測

2021-09-25 15:21:29 字數 1561 閱讀 3730

新建板級支援包bsp_key.c和bsp_key.h

gpio輸入配置過程:

定義初始化結構體;

開啟rcc時鐘,非常重要;

寫入引腳和模式配置,不需要配置速度;

呼叫初始化函式,將初始化結構體寫入對應的gpio埠。

bsp_key.c包含兩個函式,乙個是初始化函式,另乙個是按鍵掃瞄函式,會按鍵被按下時,返回按鍵的狀態。

bsp_key.c

#include "bsp_key.h"

/** * @brief 按鍵初始化函式

*/void key_gpio_config(void)

/** * @brief 按鍵掃瞄函式

* @param gpiox 掃瞄的gpio口

* @param gpio_pin 掃瞄的gpio引腳

*/uint8_t key_scan(gpio_typedef *gpiox, uint16_t gpio_pin)

else

return key_status;

}

bsp_key.h中對按鍵的硬體引數,按鍵的狀態都進行了巨集定義封裝,提高程式的可移植性。

bsp_key.h

#ifndef __bsp_key_h

#define __bsp_key_h

#include "stm32f10x.h"

// 硬體封裝巨集

#define key1_gpio_pin gpio_pin_0

#define key1_gpio_port gpioa

#define key1_gpio_clk rcc_apb2periph_gpioa

#define key2_gpio_pin gpio_pin_13

#define key2_gpio_port gpioc

#define key2_gpio_clk rcc_apb2periph_gpioc

// 按鍵狀態巨集

#define key_on 1

#define key_off 0

void key_gpio_config(void);

uint8_t key_scan(gpio_typedef *gpiox, uint16_t gpio_pin);

#endif /* __bsp_key_h */

在主函式中while迴圈中進行呼叫

main.c

#include "stm32f10x.h"

#include "bsp_led.h"

#include "bsp_key.h"

void delay(uint32_t count);

int main(void)

// 第二個按鍵按下(藍燈反轉)

if (key_scan(key2_gpio_port, key2_gpio_pin) == key_on)

}}void delay(uint32_t count)

STM32之GPIO輸入輸出

gpio的輸出 背景 應用在點亮led。led串聯電阻再上拉,另一端與gpio口相連。因此,gpio輸出高電平則led滅,輸出低電平則led亮。第一步工作是初始化gpio,使能外設時鐘,因為gpio是掛載在apb2中線上的。然後對gpio inittypedef結構體進行初始化,設定gpio pin...

stm32專題一 GPIO輸出 點亮LED

新建led資料夾和bsp led.c和bsp led.h的板級支援包。在bsp led.c中,函式led gpio config void 提供了gpio的初始化過程 定義gpio初始化結構體 開啟rcc時鐘,這一步非常重要,要找到對應的匯流排和外設時鐘 給初始化結構體成員賦值,由於和硬體相關,都在...

STM32專題講解

要學習stm32必須要了解一些arm的基礎知識 arm advanced risc machines 有三種含義 它是乙個公司的名稱 它是一類微處理器的通稱 它是一種技術的名稱。arm公司其實是乙個智財權 商,它既不生產晶元也不 晶元,而是轉讓設計方案給半導體的廠商,比如三星,ti等 早先經典處理器...