STM32 GPIO的輸入輸出 HAL庫

2021-10-09 09:02:14 字數 1925 閱讀 3061

本文將介紹stm32基於hal庫的gpio使用,利用上文建立好的hal庫工程模板,可以方便的編寫應用程式。

我們目標是編寫乙個led燈和按鍵的使用例子,每按下一次按鍵,led的亮滅狀態將進行一次反轉。

我們建立"led.h"和"led.c"在工程模板的inc和src資料夾中。

該模組**作用是防止在某乙個**檔案中引入多個.**件時,防止重複引入同乙個.**件,如果重複引入的話,在編譯時候匯報「redefine」錯誤。

"ifndef"全稱是"if not define",當在乙個**中第一次引入led.**件時__led_h未定義,則**會繼續往下執行,同時定義了__led_h,如果存在第二次引入led.**件時,由於在第一次引入時已經定義了__led_h巨集,所以「ifndef」判斷為假,則往下**不會被重複執行。

#ifndef __led_h

#define __led_h..

.#endif

在led.**件中對led的引腳進行巨集定義。

#define led_pin 				gpio_pin_5

#define led_gpio_port gpiob

#define led_gpio_clk_enable() __hal_rcc_gpiob_clk_enable()

在led.**件中對led引腳控制進行巨集定義。

/* hal庫函式控制io */

#define on gpio_pin_reset

#define off gpio_pin_set

#define led(a) hal_gpio_writepin(led_gpio_port, led_pin, a)

/* 操作暫存器控制io */

#define digitalhi(p,i) //設定為高電平,

#define digitallo(p,i) //輸出低電平

#define digitaltoggle(p,i) //輸出反轉狀態

/* 控制led的io */

#define led_toggle digitaltoggle(led_gpio_port, led_pin)

#define led_off digitalhi(led_gpio_port, led_pin)

#define led_on digitallo(led_gpio_port, led_pin)

在led.c檔案中編寫led管腳初始化函式

void led_gpio_config(void)

我們建立"key.h"和"key.c"在工程模板的inc和src資料夾中。

在"key.h"檔案中定義引腳。

/* 按鍵引腳巨集定義 */

#define key_pin gpio_pin_0

#define key_gpio_port gpioa

#define key_gpio_clk_enable() __hal_rcc_gpiob_clk_enable()

#define key_on 1

#define key_off 0

在"key.c"定義引腳配置。

void key_gpio_config(void)

在"key.c"中定義按鍵掃瞄函式。

uint8_t key_scan(gpio_typedef* gpiox,uint16_t gpio_pin)

else

}

在main.c「」中整合邏輯,在按鍵被按下後,led的亮滅狀態翻轉一次。

int main(void)

}}

STM32 GPIO輸入輸出方式詳解

結構圖就不上了 結構圖的上半部分為 輸入模式結構。接下來就遇到了兩個開關和電阻,與 vdd相連的為上拉電阻,與vss相連 的為下拉電阻。再連線到施密特觸發器就把電壓訊號轉化為 0 1的數碼訊號存 儲在輸入資料暫存器 idr 我們可以通過設定配置暫存器 crl crh 控制 這兩個開關,於是就可以得到...

STM32 GPIO八種輸入輸出模式

參考 浮空,顧名思義,就相當與此埠在預設情況下什麼都不接,呈高阻態。浮空最大的特點就是電壓的不確定性,它可能是0v,也可能是vcc,還可能是介於兩者之間的某個值 最有可能 將不確定的訊號通過乙個電阻鉗位在高電平。沒有輸入或輸入為高電平時是高電平,輸入為低電平時就是低電平。將不確定的訊號通過乙個電阻鉗...

stm32 GPIO 輸入 按鍵檢測

使能 gpio 埠時鐘 初始化 gpio 目標引腳為輸入模式 浮空輸入 編寫簡單測試程式,檢測按鍵的狀態,實現按鍵控制 led 燈。1.按鍵引腳巨集定義 1 引腳定義 2 define key1 gpio clk rcc apb2periph gpioa 3 define key1 gpio por...