??1.STM32中GPIO口模式
每個GPI/O端口有兩個32位配置寄存器(GPIOx_CRL, GPIOx_CRH),兩個32位數據寄存器(GPIOx_IDR和GPIOx_ODR),一個32位置位/復位寄存器(GPIOx_BSRR),一個16位復位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx_LCKR)。根據數據手冊中列出的每個I/O端口的特定硬件特征, GPIO端口的每個位可以由軟件分別配置成多種模式。
─ 輸入浮空
─ 輸入上拉
─ 輸入下拉
─ 模擬輸入
─ 開漏輸出
─ 推挽式輸出
─ 推挽式復用功能
─ 開漏復用功能
每個I/O端口位可以自由編程,然而I/0端口寄存器必須按32位字被訪問 (不允許半字或字節訪問 )。 GPIOx_BSRR和 GPIOx_BRR寄存器允許對任何GPIO寄存器的讀/更改的獨立訪問;這樣,在讀和更改訪問之間產生IRQ時不會發生危險。
本示例主要講解IO口輸入模式的應用,以按鍵驅動為例來實現輸入模式配置方法。本次實驗所用開發板有3個按鍵,其中一個為復位按鍵,另外兩個則可用戶自行驅動。我們采用板載的2個按鍵來實現對LED燈開關控制。
2.硬件接口
??SW2為復位按鍵,已直接接到芯片復位引腳上,SW3接在PB0上、SW4接在PB1上。按鍵按下均為低電平。
3.軟件設計
1.打開STM32CubmMX代碼生成軟件,將PB0、PB1配置為輸入模式。
2.在選定為輸入模式后,STM32輸入模式分為兩種:浮空輸入、上拉/下拉輸入。
─浮空輸入:配置為浮空輸入模式,初始化成功后引腳電平狀態處于中間態,既不為高也不為低。
─上拉/下拉輸入:配置為浮空輸入模式,初始化成功后引腳電平狀態可以選擇是高電平或者低電平。
? 因為按鍵按下為低電平,因此要想檢測到按鍵狀態變化,初始化時就得設置為與按下相反的電平,所用我們這里選擇帶上拉的輸入模式(選擇浮空輸入也可,一般建議使用上拉輸入模式)。
4.生成配置代碼
??使用STM32Cubemx生成代碼時,所有的GPIO初始化均會放gpio.c中。
-
在當前工程的Core目錄下新建SYSTEM文件夾保存用戶自定義驅動文件。
2.創建一個key.c和key.h文件,在SYSTEM目錄中創建一個KEY文件夾保存該文件
3.添加頭文件路徑,編寫key.h文件
4.編寫key.c文件,編寫按鍵檢測函數
u8 KEY_GetVal(void)
{
u8 static stat=0;
if((!KEY1 || !KEY2) && !stat)
{
stat=1;
HAL_Delay(30);
if(!KEY1)return 1;
else if(!KEY2)return 2;
else return 0;
}
else
{
if(KEY1 && KEY2)stat=0;
}
return 0;
}
5.實現按鍵控制LED開關
-
STM32
+關注
關注
2266文章
10873瀏覽量
354864 -
GPIO
+關注
關注
16文章
1196瀏覽量
51920 -
按鍵驅動
+關注
關注
0文章
11瀏覽量
7126
發布評論請先 登錄
相關推薦
評論