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);
    }
}

 

 

 

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