• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

nrf52832蓝牙BLE开发系列教程4------NRF52832之GPIO篇

GPIO操作是单片机最基本和最常用的操作,在配置GPIO控制LED灯、检测按键输入等功能时都需要用到。NRF52832的GPIO可设置为:输入、输出、复用和模拟通道 4 种模式,一部分与I2C,SPI,UART复用。管脚内部结构如下图所示:

一、GPIO寄存器

1、OUT寄存器:实现写GPIO端口,bit0-31对应引脚P0.00-P0.31,为0表示引脚输出低电平,为1表示引脚输出高电平;

2、OUTSET寄存器:实现引脚置位,bit0-31对应引脚P0.00-P0.31;

3、OUTCLR寄存器:实现引脚清零;

4、IN寄存器:实现读GPIO端口;

5、DIR寄存器:实现引脚的方向配置,为0引脚是输入方向,为1引脚是输出方向;

6、DIRSET寄存器:实现引脚输出方向配置;

7、DIRCLR寄存器:实现引脚输入方向配置;

8、LATCH寄存器:实现锁存电平信号;

9、DETECTMODE寄存器:实现检测模式配置;

10、PIN_CNF[n](n=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的状态

三、程序示例

1、 点亮LED:

void LED_Init(void)

{  // 输出   

nrf_gpio_cfg_output(LED_0);     

nrf_gpio_cfg_output(LED_1);   

nrf_gpio_cfg_output(LED_2); 

  nrf_gpio_cfg_output(LED_3);

}

void LED1_Open(void)

{   

nrf_gpio_pin_set(LED_0);

}

void LED1_Close(void)

{   

nrf_gpio_pin_clear(LED_0);

}

void LED1_Toggle(void)

nrf_gpio_pin_toggle(LED_0);

}

2、按键检测:

void KEY_Init(void)

{   

nrf_gpio_cfg_input(KEY1,NRF_GPIO_PIN_PULLUP);

nrf_gpio_cfg_input(KEY2,NRF_GPIO_PIN_PULLUP);

}

uint8_t KEY_Scan(void)

{   

if(nrf_gpio_pin_read(KEY1) == 0)       

{       

nrf_delay_ms(10);   

if(nrf_gpio_pin_read(KEY1) == 0)   

{     

  while(nrf_gpio_pin_read(KEY1) == 0);  //检测按键是否释放     

  return KEY1_OK;   

}   

else     

  return 0;       

}   

else       

return 0;   

 return 0;

}

全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法