一、GPIO介紹
1.概念
GPIO(The general purpose input/output),nRF52832的GPIO被組織爲1個端口,通過這個端口最多可以訪問32個IO口,每個GPIO可以單獨訪問。
2.使用
nRF52832提供了10個用於操作GPIO的寄存器,通過這些寄存器可以配置使用GPIO引腳的很多特性
3.可配置參數
1)方向
2)驅動能力
3)使能/禁用上下拉電阻
4)引腳感知功能
5)斷開輸入緩衝
6)模擬輸入
二、GPIO寄存器
1.OUT
讀/寫:可讀寫
功能:寫GPIO端口,bit0~31對應引腳P0.00~P0.31
讀/寫:0,引腳輸出低電平 1,引腳輸出高電平
2.OUTSET
讀/寫:可讀寫
功能:引腳置位,bit0~31對應引腳P0.00~P0.31
讀:0,引腳輸出低電平,邏輯"0" 1,引腳輸出高電平,邏輯"1"
寫:1,引腳輸出高電平 寫0無效
3.OUTCLR
讀/寫:可讀寫
功能:引腳清零,bit0~31對應引腳P0.00~P0.31
讀:0,引腳輸出低電平,邏輯"0" 1,引腳輸出高電平,邏輯"1"
寫:1,引腳輸出低電平 寫0無效
4.IN
讀/寫:只讀
功能:讀GPIO端口,bit0~31對應引腳P0.00~P0.31
5.DIR
讀/寫:可讀寫
功能:引腳方向配置,bit0~31對應引腳P0.00~P0.31
讀/寫:0,引腳爲輸入方向 1,引腳爲輸出方向
6.DIRSET
讀/寫:可讀寫
功能:引腳輸出方向配置,bit0~31對應引腳P0.00~P0.31
讀:0,引腳爲輸入方向 1,引腳爲輸出方向
寫:1,引腳設爲輸出方向,寫0無效
7.DIRCLR
讀/寫:可讀寫
功能:引腳輸入方向配置,bit0~31對應引腳P0.00~P0.31
讀:0,引腳爲輸入方向 1,引腳爲輸出方向
寫:1,引腳設爲輸入方向,寫0無效
8.LATCH
讀/寫:可讀寫
功能:鎖存電平信號,bit0~31對應引腳P0.00~P0.31
9.DETECTMODE
讀/寫:可讀寫
功能:檢測模式配置,bit0~31對應引腳P0.00~P0.31
10.PIN_CNF[n](n=0~31)
讀/寫:可讀寫
功能:引腳配置,bit0~31對應引腳P0.00~P0.31
位0:0,設置引腳輸入方向 1,設置引腳輸出方向
位1:0,連接輸入緩衝器 1,斷開輸入緩衝器
位3~2:00,關閉上下拉電阻配置 01,開啓下拉電阻 02,開啓上拉電阻
位10~8:驅動能力配置
位17~16::引腳感知機制 00,關閉引腳感知 10,高電平感知 11,低電平感知
三、代碼示例
nRF52832的GPIO外設基址爲:0x50000000 對應代碼裏面的寄存器操作指針爲:NRF_P0
sdk版本:nRF5_SDK_15.2.0_9412b96
1.以設置GPIO18爲輸出拉低,點亮LED2爲例,相關代碼如下
//設置引腳輸出
//NRF_P0->DIR |= (1UL << 18);
NRF_P0->DIRSET = (1UL << 18);
//設置輸出低電平
//NRF_P0->OUT &= ~(1UL << 18);
NRF_PO->OUTCLR = (1UL << 18);
2.相關庫函數介紹
//頭文件:nrf_gpio.h
1)void nrf_gpio_cfg_output(uint32_t pin_number)
pin_number:引腳編號,範圍0~31
功能:設置指定引腳爲輸出方向
2)void nrf_gpio_range_cfg_output(uint32_t pin_range_start,uint32_t pin_range_end)
功能:設置指定範圍內的連續引腳爲輸出方向
3)void nrf_gpio_cfg_input(uint32_t pin_number,nrf_gpio_pin_pull_t pull_config)
功能:設置指定引腳爲輸入方向
4)void nrf_gpio_range_cfg_input(uint32_t pin_range_start,uint32_t pin_range_end,nrf_gpio_pin_pull_t pull_config)
功能:設置指定範圍內的連續引腳爲輸入方向
5)void nrf_gpio_pin_set(uint32_t pin_number)
功能:驅動指定的GPIO輸出高電平
6)void nrf_gpio_pin_clear(uint32_t pin_number)
功能:驅動指定的GPIO輸出低電平
7)void nrf_gpio_pin_toggle(uint32_t pin_number)
功能:翻轉指定的GPIO輸出狀態
8)uint32_t nrf_gpio_pin_read(uint32_t pin_number)
功能:讀取指定引腳的電平狀態,0代表低電平,1代表高電平
9)uint32_t nrf_gpio_port_in_read(NRF_GPIO_Type const * p_reg)
功能:讀取端口所有的GPIO的狀態