原理圖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)
可以看出裡面包含了gpiopadconfigset
和gpiodirmodeset
兩個函式。關於這兩個函式的詳細使用在下面的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)
;
這裡說一下gpiodirmodeset
和gpiopadconfigset
兩個函式
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個暫存器,...