新建板級支援包bsp_key.c和bsp_key.hgpio輸入配置過程:
定義初始化結構體;
開啟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等 早先經典處理器...