一. gpio的8種工作模式
1.4種輸入模式:
(1)上拉輸入模式(gpio_mode_ipu):在預設狀態下(gpio引腳無輸入),讀取得的gpio引腳資料為1,高電平。
(2)下拉輸入模式(gpio_mode_ipd):在預設狀態下(gpio引腳無輸入),讀取得的gpio引腳資料為0,低電平。
(3)浮空輸入模式(gpio_mode_in_floating):一般把這種模式用於標準的通訊協議如i²c、usart的接收端。
(4)模擬輸入模式(gpio_mode_ain):使用adc外設時,必須設定為模擬輸入模式。
2.4種輸出模式:
(1)推挽輸出模式(gpio_mode_out_pp):一般應用在輸出電平為0到3.3伏的場合。
(2)開漏輸出模式(gpio_mode_out_od):一般應用在電平不匹配的場合。
(3)復用推挽輸出模式:如gpio的引腳用作串列埠的輸出。
(4)復用開漏輸出模式:如在ic、smbus這些需要線與功能的復用場合。
二、開發板原理圖如下:
三、測試**:
實現功能:led1亮,按下按鍵時led1滅,再按下按鍵時led1亮,如此迴圈。
/*配置led用到的i/o口*/
void led_gpio_config(void)
/*led.h*/
#ifndef __led_h
#define __led_h
#include "stm32f10x.h"
#define on 0
#define off 1
#define led1(a) if(a) \
gpio_setbits(gpiod,gpio_pin_3);\
else \
gpio_resetbits(gpiod,gpio_pin_3)
#define led2(a) if(a) \
gpio_setbits(gpiod,gpio_pin_6);\
else \
gpio_resetbits(gpiod,gpio_pin_6)
#define led3(a) if(a) \
gpio_setbits(gpiob,gpio_pin_5);\
else \
gpio_resetbits(gpiob,gpio_pin_5)
void led_gpio_config(void);
#endif /*__led_h*/
/*key.c*/
#include "key.h"
void delay(u16 time)}/*
*函式名:key_gpio_config
*描述 :配置按鍵用到的i/o口
*輸入 :無
*輸出 :無
*/void key_gpio_config(void)
/**函式名:key_scan(gpio_typedef* gpiox,u16 gpio_pin)
*描述 :檢測是否有按鍵按下
*輸入 :gpiox:x 可以是a,b,c,d或者e
* gpio_pin:待讀取的埠位
*輸出 :key_off(沒按下按鍵)、key_on(按下按鍵)
*/u8 key_scan(gpio_typedef* gpiox,u16 gpio_pin)
else
return key_off;
} else
return key_off;
}
/*key.h*/
#ifndef __key_h
#define __key_h
#include "stm32f10x.h"
#define key_on 0
#define key_off 1
void key_gpio_config(void);
u8 key_scan(gpio_typedef* gpiox,u16 gpio_pin);
void delay(u16 time);
#endif /*__led_h*/
/*main.c*/
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
int main (void)
}}
四、範例
/*stm32v5_led.c*/
#include "stm32v5_led.h"
static led_gpio_t leds_gpio[max_led] =
, /* led1 用的gpb5 */
, /* led2 用的gpd6 */
, /* led3 用的gpd3 */
};void init_led_gpio(void)
/*stm32v5_led.h*/
#ifndef __stm32v5_led_h
#define __stm32v5_led_h
#include"stm32f10x.h"
#define on 1
#define off 0
enum
;typedef struct led_gpio_s
led_gpio_t;
extern void init_led_gpio(void);
extern void turn_led(int which, int cmd);
#endif
/*stm32v5_key.c*/
#include "stm32f10x.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
#include "stm32v5_led.h"
#include "stm32v5_key.h"
#define define_pin_exti(group, pin, irqn, subpriority) \
void init_p##group##pin##_as_exti(void) \
/* key1(pc5) configured as exti5, subpriority as 1 */
define_pin_exti(c, 5, exti9_5_irqn, 1)
/* key2(pc2) configured as exti2, subpriority as 2 */
define_pin_exti(c, 2, exti2_irqn, 2)
/* key3(pc3) configured as exti3, subpriority as 3 */
define_pin_exti(c, 3, exti3_irqn, 3)
/* pc5 key1 interrupt handler */
void exti9_5_irqhandler(void)
}/* pc2 key2 interrupt handler */
void exti2_irqhandler(void)
}/* pc3 key3 interrupt handler */
void exti3_irqhandler(void)
}void init_keys_interrupt(void)
/*stm32v5_key.h*/
#ifndef __stm32v5_key_h
#define __stm32v5_key_h
extern void init_keys_interrupt(void);
#endif
/*main.c*/
#include "stm32f10x.h"
#include "stm32v5_led.h"
#include "stm32v5_key.h"
int main(void)
}
stm32 GPIO 輸入 按鍵檢測
使能 gpio 埠時鐘 初始化 gpio 目標引腳為輸入模式 浮空輸入 編寫簡單測試程式,檢測按鍵的狀態,實現按鍵控制 led 燈。1.按鍵引腳巨集定義 1 引腳定義 2 define key1 gpio clk rcc apb2periph gpioa 3 define key1 gpio por...
STM32 GPIO 流水燈例程 學習總結
通過控制led燈,熟悉stm32的儲存器結構 位址對映 時鐘樹 庫檔案 利用庫的方法及開發工程的步驟,建立stm32的開發思想。這是我建立的第乙個工程,由於涉及面較廣,知識點分散,在此做乙個總結。1 為控制led燈,知道要使用gpio外設。gpio general purpose i o i o引腳...
STM32GPIO部分介紹
最近在老師交給了乙個專案,需要用到stm32微控制器,這裡就在學習的過程中所注意到的一些地方或細節部分記錄了下來,筆者所使用的是stm32f407zgt6晶元 探索者 檢視晶元的資料手冊 這個 對每個i o口的功能進行了很詳細的介紹。每個i o除了作為i o使用外,還可以作為其他的復用。已以pe2口...