STM32學習(基礎) 簡單按鍵輸入

2021-10-02 13:54:06 字數 2667 閱讀 4965

初學者學習筆記,錯誤不足望指正。

本篇任務:完成polling按鍵例項——用按鍵控制小燈亮滅

user資料夾中新建key資料夾。

led資料夾中新建main.cbsp_key.cbsp_key.h這三個檔案。

開啟工程,將main.cbsp_key.cbsp_key.h新增到工程的user組中。(注意先移除之前的main函式)

#include "bsp_led.h"//呼叫標頭檔案  

void led_gpio_config(void)//初始化led的io

bsp_led.h

#ifndef __led_h

#define __led_h

#include "stm32f10x.h"//stm32的位址對映,包含了stm32的所有暫存器的位址

/*直接操作暫存器方法控制io*/

#define digitalhi(p,i)

#define digitallo(p,i)

#define digitaltoggle(p,i)

/* 定義控制io的巨集 */

#define led1_toggle digitaltoggle(gpiob,gpio_pin_8)

#define led1_off digitalhi(gpiob,gpio_pin_8)

#define led1_on digitallo(gpiob,gpio_pin_8)

void led_gpio_config(void);//初始化led埠

#endif

bsp_key.c

#include "stm32f10x.h"

#include "bsp_led.h"

#include "bsp_key.h"

void delay(__io uint32_t ncount)

void key_gpio_config(void)

uint8_t key_scan(gpio_typedef* gpiox,u16 gpio_pin)

else

return key_off;

} else

return key_off;

}

bsp_key.h

#ifndef __key_h

#define __key_h

#include "stm32f10x.h"

#define key_on 0

#define key_off 1

void key_gpio_config(void);

uint8_t key_scan(gpio_typedef* gpiox,u16 gpio_pin);

#endif

1.埠輸入資料暫存器

從main.c入手。

main函式分為三個部分:小燈配置、按鍵配置、按鍵控制小燈

小燈配置和流水燈配置大同小異,只是這裡小燈的亮滅採用/直接操作暫存器方法控制i/o(流水燈採用的是庫函式方式)

按鍵配置和小燈配置差不多不同的地方是模式選擇上拉輸入模式gpio_mode_ipu

按鍵控制小燈主要關注按鍵掃瞄函式

判斷是否有按鍵按下,若有則延時消抖再判斷一遍,有的話再判斷一遍,確認按鍵按下之後迴圈釋等待按鍵釋放,按鍵釋放之後返回1,按鍵未按下返回0

主函式內,判斷按鍵按下,小燈反轉一次。

判斷是否按鍵按下呼叫如下函式:

在對流水燈的原理了解之後,掌握按鍵控制並不難。

stm32按鍵輸入

對於上乙個實驗流水燈來說,這一次的實驗是獲取輸入的乙個小demo。在課堂上,看老師除錯的時候,只要有輸入則輸入暫存器idr的值就會改變,所以想要獲得輸入只需要迴圈去獲取idr的值即可。在stm32的庫中有乙個讀取輸入資訊的函式 uint8 t gpio readinputdatabit gpio t...

STM32按鍵輸入

這一節通過按鍵輸入的實驗,完成對io口配置輸入的學習,同時學習如何通過軟體去抖動。這一節最終可以實現利用wk up按鍵控制led亮滅的效果。與上一節點亮led相類似,這一節也需要在hardware資料夾內新建檔案key.h和key.c。同時將相應的檔案加入到工程中。檢視原理圖,獲取wk up按鍵的相...

Stm32學習之按鍵輸入

一 首先清楚硬體連線 不同stm32版本存在一定的區別,一下都是根據正點原子的stm32f1為例。二 按鍵輸入實驗的程式步驟 1.使能按鍵對應io口始終,呼叫函式 rcc apb2periphclockcmd 2.初始化io模式 上拉 下拉輸入。呼叫函式 gpio init 3.掃瞄io口電平 庫函...