日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

nrf52832藍(lán)牙BLE開發(fā)系列教程4------NRF52832之GPIO篇

GPIO操作是單片機最基本和最常用的操作,在配置GPIO控制LED燈、檢測按鍵輸入等功能時都需要用到。NRF52832的GPIO可設(shè)置為:輸入、輸出、復(fù)用和模擬通道 4 種模式,一部分與I2C,SPI,UART復(fù)用。管腳內(nèi)部結(jié)構(gòu)如下圖所示:

一、GPIO寄存器

1、OUT寄存器:實現(xiàn)寫GPIO端口,bit0-31對應(yīng)引腳P0.00-P0.31,為0表示引腳輸出低電平,為1表示引腳輸出高電平;

2、OUTSET寄存器:實現(xiàn)引腳置位,bit0-31對應(yīng)引腳P0.00-P0.31;

3、OUTCLR寄存器:實現(xiàn)引腳清零;

4、IN寄存器:實現(xiàn)讀GPIO端口;

5、DIR寄存器:實現(xiàn)引腳的方向配置,為0引腳是輸入方向,為1引腳是輸出方向;

6、DIRSET寄存器:實現(xiàn)引腳輸出方向配置;

7、DIRCLR寄存器:實現(xiàn)引腳輸入方向配置;

8、LATCH寄存器:實現(xiàn)鎖存電平信號;

9、DETECTMODE寄存器:實現(xiàn)檢測模式配置;

10、PIN_CNF[n](n=0-31)寄存器:實現(xiàn)輸入緩沖器、上下拉電阻、驅(qū)動能力等的配置。

二、相關(guān)庫函數(shù)介紹

1、void nrf_gpio_cfg_output(uint32_t pin_number)功能:設(shè)置指定引腳為輸出方向

2、void nrf_gpio_range_cfg_output(uint32_t pin_range_start,uint32_t pin_range_end)功能:設(shè)置指定范圍內(nèi)的連續(xù)引腳為輸出方向

3、void nrf_gpio_cfg_input(uint32_t pin_number,nrf_gpio_pin_pull_t pull_config)功能:設(shè)置指定引腳為輸入方向

4、void nrf_gpio_range_cfg_input(uint32_t pin_range_start,uint32_t pin_range_end,nrf_gpio_pin_pull_t pull_config)功能:設(shè)置指定范圍內(nèi)的連續(xù)引腳為輸入方向

5、void nrf_gpio_pin_set(uint32_t pin_number)功能:驅(qū)動指定的GPIO輸出高電平

6、void nrf_gpio_pin_clear(uint32_t pin_number)功能:驅(qū)動指定的GPIO輸出低電平

7、void nrf_gpio_pin_toggle(uint32_t pin_number)功能:翻轉(zhuǎn)指定的GPIO輸出狀態(tài)

8、uint32_t nrf_gpio_pin_read(uint32_t pin_number)功能:讀取指定引腳的電平狀態(tài),0代表低電平,1代表高電平

9、uint32_t nrf_gpio_port_in_read(NRF_GPIO_Type const * p_reg)功能:讀取端口所有的GPIO的狀態(tài)

三、程序示例

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;

}

全部回復(fù)(0)
正序查看
倒序查看
現(xiàn)在還沒有回復(fù)呢,說說你的想法
發(fā)