初學者學習筆記,錯誤不足望指正。
本篇任務:完成polling按鍵例項——用按鍵控制小燈亮滅
在user資料夾中新建key資料夾。
在led資料夾中新建main.c、bsp_key.c、bsp_key.h這三個檔案。
開啟工程,將main.c、bsp_key.c、bsp_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口電平 庫函...