STM32F103的GPIO配置方式

2021-08-04 23:44:20 字數 2395 閱讀 6843

一、gpio的配置過程

(1)、開啟外設時鐘

(2)、初始化gpio

配置成輸出模式程式

void gpio_config(void)

說明:1.1在stm32中選用io模式 

(1)浮空輸入_in_floating ——浮空輸入,可以做key識別,rx1 

(2)帶上拉輸入_ipu——io內部上拉電阻輸入 

(3)帶下拉輸入_ipd—— io內部下拉電阻輸入 

(4) 模擬輸入_ain ——應用adc模擬輸入,或者低功耗下省電 

(5)開漏輸出_out_od ——io輸出0接gnd,io輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,io口的狀態由上拉電阻拉高電平,但由於是開漏輸出模式,這樣io口也就可以由外部電路改變為低電平或不變。可以讀io輸入電平變化,實現c51的io雙向功能 

(6)推挽輸出_out_pp ——io輸出0-接gnd, io輸出1 -接vcc,讀輸入值是未知的 

(7)復用功能的推挽輸出_af_pp ——片內外設功能(i2c的scl,sda) 

(8)復用功能的開漏輸出_af_od——片內外設功能(tx1,mosi,miso.sck.ss)

1.2輸出速度

i/o口的輸出模式下,有3種輸出速度可選(2mhz、10mhz和50mhz),這個速度是指i/o口驅動電路的響應速度而不是輸出訊號的速度,輸出訊號的速度與程式有關(晶元內部在i/o口 的輸出部分安排了多個響應速度不同的輸出驅動電路,使用者可以根據自己的需要選擇合適的驅動電路)。通過選擇速度來選擇不同的輸出驅動模組,達到最佳的雜訊控制和降低功耗的目的。高頻的驅動電路,雜訊也高,當不需要高的輸出頻率時,請選用低頻驅動電路,這樣非常有利於提高系統的emi效能。當然如果要輸出較高頻率的訊號,但卻選用了較低頻率的驅動模組,很可能會得到失真的輸出訊號。關鍵是: gpio的引腳速度跟應用相匹配,速度配置越高,雜訊越大,功耗越大。

頻寬速度高的驅動器耗電大、雜訊也大,頻寬低的驅動器耗電小、雜訊也小。使用合適的驅動器可以降低功耗和雜訊。

gpio的引腳速度跟應用匹配(推薦10倍以上)。比如:

1.1.1 對於串列埠,假如最大波特率只需115.2k,那麼用2m的gpio的引腳速度就夠了,既省電也雜訊小。

1.1.2 對於i2c介面,假如使用400k波特率,若想把餘量留大些,那麼用2m的gpio的引腳速度或許不夠,這時可以選用10m的gpio引腳速度。

1.1.3 對於spi介面,假如使用18m或9m波特率,用10m的gpio的引腳速度顯然不夠了,需要選用50m的gpio的引腳速度。

1.2 gpio口設為輸入時,輸出驅動電路與埠是斷開,所以輸出速度配置無意義。

1.3 在復位期間和剛復位後,復用功能未開啟,i/o埠被配置成浮空輸入模式。

1.4 所有埠都有外部中斷能力。為了使用外部中斷線,埠必須配置成輸入模式。

1.5 gpio口的配置具有上鎖功能,當配置好gpio口後,可以通過程式鎖住配置組合,直到下次晶元復位才能解鎖。

二、gpio的相關函式

uint8_t gpio_readinputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);//讀gpio某一位的輸入

uint16_t gpio_readinputdata(gpio_typedef* gpiox);//讀gpio的輸入

uint8_t gpio_readoutputdatabit(gpio_typedef* gpiox, uint16_t gpio_pin);//讀gpio某一位的輸出

uint16_t gpio_readoutputdata(gpio_typedef* gpiox);//讀gpio的輸出

void gpio_setbits(gpio_typedef* gpiox, uint16_t gpio_pin);//將gpio的某個位置位

void gpio_resetbits(gpio_typedef* gpiox, uint16_t gpio_pin);//將gpio的某個位復位

void gpio_writebit(gpio_typedef* gpiox, uint16_t gpio_pin, bitaction bitval);//寫gpio的某個位

void gpio_write(gpio_typedef* gpiox, uint16_t portval);//寫gpio

void gpio_pinremapconfig(u32 gpio_remap, functionalstate newstate)//gpio管腳重對映

void gpio_extilineconfig(u8 gpio_portsource, u8 gpio_pinsource)//gpio外部中斷線配置

三、其他內容

位取反:gpio_writebit(gpioe,gpio_pin_5,(bitaction)((1-gpio_readinputdatabit(gpioe,gpio_pin_5))));

stm32f103外部中斷

void extix init void 外部中斷0服務程式 void exti9 5 irqhandler void 這是簡單的外部中斷的配置,pc7作為中斷輸入 上面補充io口的初始化 gpio initstructure.gpio mode gpio mode ipu pc6配置為快充指示 1...

STM32F103啟動檔案

目錄 一 概述 二 彙編指令 2.1 equ 2.2 area 2.3 space 2.4 preserve8 2.5 thumb 2.6 export 2.7 dcd 2.8 proc 2.9 ldr 2.10 blx 2.11 bx 2.12 temport 2.13 b 2.14 if,els...

關於STM32F103精確延時

為了相容freertos,所以將延時函式統一規範,後續使用方便移植。此延時針對無晶振,示例為系統倍頻64mhz,型號 stm32f103c8t6。新建system資料夾,新增兩個檔案,delay.c和delay.h 以下為delay.c內容 其中系統已倍頻為64m include stm32f10x...