一、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的状态