3 TM4之GPIO的輸入輸出

2021-09-18 06:57:52 字數 3855 閱讀 1741

原理圖io口輸出高電平點亮led,下面我們學習如何控制io口的高低電平。

sysctlperipheralenable

(sysctl_periph_gpiof)

;//埠f外設使能

gpiopintypegpiooutput

(gpio_portf_base, gpio_pin_1)

;//pf1設定為輸出

gpiopinwrite

(gpio_portf_base, gpio_pin_1, gpio_pin_1)

;//pf1輸出高電平

相應的pf1置低:

gpiopinwrite(gpio_portf_base, gpio_pin_1, 0);//pf1輸出低電平

sysctlperipheralenable

(sysctl_periph_gpiof)

;gpiopadconfigset

(gpio_portf_base,gpio_pin_1,gpio_strength_2ma,gpio_pin_type_std)

;gpiodirmodeset

(gpio_portf_base, gpio_pin_1, gpio_dir_mode_out)

;gpiopinwrite

(gpio_portf_base, gpio_pin_1, gpio_pin_1)

;

這兩種方式其實是一樣的,因為這個gpiopintypegpiooutput函式是又被封裝了一次,可以看看其定義:

void

gpiopintypegpiooutput

(uint32_t ui32port, uint8_t ui8pins)

可以看出裡面包含了gpiopadconfigsetgpiodirmodeset兩個函式。關於這兩個函式的詳細使用在下面的gpio輸入裡面詳細講解。

原理圖首先初始化io口為輸入模式:

sysctlperipheralenable

(sysctl_periph_gpiof)

;gpiodirmodeset

(gpio_portf_base, gpio_pin_4, gpio_dir_mode_in)

;gpiopadconfigset

(gpio_portf_base,gpio_pin_4,gpio_strength_2ma, gpio_pin_type_std_wpu)

;

這裡說一下gpiodirmodesetgpiopadconfigset兩個函式

1、gpiodirmodeset主要是設定某個埠的方向,這裡主要看第三個引數,有以下幾種選擇:

#define gpio_dir_mode_in        0x00000000  

// pin is a gpio input

#define gpio_dir_mode_out 0x00000001

// pin is a gpio output

#define gpio_dir_mode_hw 0x00000002

// pin is a peripheral function

一看名字便知其意思。

2、gpiopadconfigset設定io口

看第三個引數的選擇:

#define gpio_strength_2ma       0x00000001  

// 2ma drive strength

#define gpio_strength_4ma 0x00000002

// 4ma drive strength

#define gpio_strength_6ma 0x00000065

// 6ma drive strength

#define gpio_strength_8ma 0x00000066

// 8ma drive strength

#define gpio_strength_8ma_sc 0x0000006e

// 8ma drive with slew rate control

#define gpio_strength_10ma 0x00000075

// 10ma drive strength

#define gpio_strength_12ma 0x00000077

// 12ma drive strength

即設定電流強度

看第四個引數的選擇:

#define gpio_pin_type_std       0x00000008  

// push-pull

#define gpio_pin_type_std_wpu 0x0000000a

// push-pull with weak pull-up

#define gpio_pin_type_std_wpd 0x0000000c

// push-pull with weak pull-down

#define gpio_pin_type_od 0x00000009

// open-drain

#define gpio_pin_type_analog 0x00000000

// analog comparator

#define gpio_pin_type_wake_high 0x00000208

// hibernate wake, high

#define gpio_pin_type_wake_low 0x00000108

// hibernate wake, low

即設定推挽,上下拉這種,作為輸出時一般用推挽(gpio_pin_type_std),作為輸入時一般用上拉(gpio_pin_type_std_wpu)或下拉(gpio_pin_type_std_wpd)。

初始化io口為輸入模式後便可以讀取其電平狀態了:

gpiopinread(gpio_portf_base, gpio_pin_4)

此函式的返回值,以pf4為例,當pf4為高電平時返回值的低8位:00010000,即16。當pf4位低電平時返回0。

示例**

功能:按下按鍵燈亮,鬆開燈滅。

#include

#include

#include

"inc/hw_gpio.h"

#include

"driverlib/gpio.h"

#include

"driverlib/pin_map.h"

#include

"inc/hw_memmap.h"

#include

"driverlib/sysctl.h"

intmain()

}

STM32之GPIO輸入輸出

gpio的輸出 背景 應用在點亮led。led串聯電阻再上拉,另一端與gpio口相連。因此,gpio輸出高電平則led滅,輸出低電平則led亮。第一步工作是初始化gpio,使能外設時鐘,因為gpio是掛載在apb2中線上的。然後對gpio inittypedef結構體進行初始化,設定gpio pin...

關於DSP的GPIO的輸入輸出設定

dsp 28335 的 gpio的輸入設定 gpio的輸入設定時,除了將此gpio設定為輸入之外,還需要將此gpio口的電平拉高 rxd3 gpioctrlregs.gpbmux2.bit.gpio62 0 0是設定為io口,1是設定為外設 gpioctrlregs.gpbdir.bit.gpio6...

STM32之GPIO並行輸入輸出資料程式設計技巧

在stm32實際程式設計中,會遇到gpio口連續的引腳並行輸出應用,例如數碼管驅動,lcd並行驅動,如果單獨逐個去驅動io口,程式設計麻煩,而且效率比較低,其實可以直接採用暫存器程式設計實現,這種思路的前提是,盡量從gpio pin 0埠開始分配管腳,這樣比較方便。這裡主要用到gpio的2個暫存器,...