一、GPIO介紹
1.概念
GPIO(The general purpose input/output)【通用輸入輸出】,nRF52832的GPIO被組織爲1個端口,通過這個端口最多可以訪問32個IO口,每個GPIO可以單獨訪問。
2.使用
nRF52832提供了10個用於操作GPIO的寄存器,通過這些寄存器可以配置使用GPIO引腳的很多特性。
3.可配置參數
- 方向
- 驅動能力
- 使能/禁用上下拉電阻
- 引腳感知功能
- 斷開輸入緩衝
- 模擬輸入
二、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
pin_number:引腳編號,範圍0~31
1)void nrf_gpio_cfg_output(uint32_t pin_number)
功能:設置指定引腳爲輸出方向
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的狀態