Nordic52810入門篇 - GPIO的控制(點亮LED)

最近有朋友一直吐槽,KEIL的代理商正在降維打擊,於是默默卸載了KEIL

本章節就在IAR上面進行開發,講下如何控制LED,網上資料很多了,LZ邊看資料邊驗證,也算是造輪子了,hahaha

話不多說,先講下Nordic的IO結構

一、GPIO結構原理

  • 圖中的鏈路可以看出,PIN0-PIN31可以通過(OUT/IN)進行配置輸入輸出
  • 可以通過CNF進行復用功能的開關;輸出複用:硬件SPI/硬件UART;複用輸入:ADC
  • 使能Sense後就可以實現IO中斷的功能(類似IO外部中斷,可喚醒系統)
  • IO口可以配置成輸入、輸出、複用(模擬)

二、GPIO相關寄存器

2.1 輸出相關寄存器

OUT(0x504):寫GPIO端口,按位(0-31)寫入1(HIGH)對應端口輸出高;寫0(LOW)對應端口輸出低;

OUTSET(0x0508):輸出置位寄存器,按位(0-31)寫入1(HIGH)對應端口輸出高;寫0(LOW)無效

OUTCLR(0x050C):輸出清0寄存器,按位(0-31)寫入1(HIGH)對應端口輸出低;寫0(LOW)無效

2.2 輸入相關寄存器

IN(0x510):端口輸入寄存器,引腳爲低電平時讀取值爲0,引腳爲高電平時讀取值爲1

2.3 控制寄存器

DIR(0x514):方向寄存器,寫0對應PIN腳設置爲輸入;寫1對應引腳設置爲輸出

DIRSET(0x518):方向設置寄存器,寫1設置爲輸出,寫0無效

DIRCLR(0x51C):方向清除寄存器,寫1設置爲輸入,寫0無效

LATCH(0x520):鎖存寄存器,如上圖即將所有引腳電平變化可存儲在LATCH寄存器中

DETECTMODE(0x524):檢測模式配置寄存器,寫0直接連接到引腳檢測,寫1通過鎖存器Latch

PIN_CNF[0-31](0x700):功能配置寄存器,可配置輸入輸出、上下拉、睡眠(SYSTEM OFF)後的喚醒電平(外部IO中斷)

三、代碼實例

3.1 輸出配置

#define LED_PIN          17 //Nordic官方DEMO板的LED引腳

nrf_gpio_cfg_output(LED_PIN); //配置輸出

nrf_gpio_pin_set(LED_PIN); //輸出高電平

nrf_gpio_pin_clear(LED_PIN); //輸出低電平

nrf_gpio_pin_toggle(LED_PIN); //電平翻轉

3.2 main函數

/**@brief Function for application main entry.
 */
int main(void)
{
    bool erase_bonds;

    // Initialize.
    log_init();
    //timers_init();
    //buttons_leds_init(&erase_bonds);
    power_management_init();
    ble_stack_init();
    gap_params_init();
    gatt_init();
    advertising_init();
    services_init();
    conn_params_init();
    peer_manager_init();

    // Start execution.
    NRF_LOG_INFO("Template example started.");
    //application_timers_start();

    //advertising_start(erase_bonds);

    nrf_gpio_cfg_output(LED_PIN); //配置輸出


    // Enter main loop.
    for (;;)
    {
        idle_state_handle();
        nrf_gpio_pin_toggle(LED_PIN); //100ms閃爍
        nrf_delay_ms(100);
    }
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章