zoukankan      html  css  js  c++  java
  • 3-gpioe IN event 库函数(nrf52832)

    实验目的:

    按下按键,对应LED点亮;释放按键,对应LED熄灭

    实验代码:

    (1)驱动

     1 static uint8_t LEDS[] = LEDS_LIST;   //17 18 19 20
     2 static uint8_t Btns[] = BUTTONS_LIST;//13 14 15 16
     3 
     4 
     5 
     6 void leds_init(void)
     7 {
     8     nrf_drv_gpiote_out_config_t out_config = GPIOTE_CONFIG_OUT_SIMPLE(true);//配置LED引脚为输出模式
     9     for(uint8_t i=0;i<4;i++)//将LED管脚置位
    10     {
    11       nrf_drv_gpiote_out_init(LEDS[i], &out_config);
    12     }
    13 }
    14 
    15 
    16 //传入按键号,  返回按键的索引号,其与LED一一对应
    17 static uint8_t button_pin_to_idx(uint8_t pin_num)
    18 {
    19   uint8_t ret = 0xFF;
    20   uint8_t i;
    21   for (i = 0; i < 4; ++i)
    22   {
    23       if (Btns[i] == pin_num)
    24       {
    25           ret = i;
    26           break;
    27       }
    28   }
    29   return ret;
    30 }
    31 
    32 
    33 void button_pin_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
    34 {
    35   switch(pin)      //那个管脚产生回调
    36   {
    37   case BUTTON_1:
    38   case BUTTON_2:
    39   case BUTTON_3:
    40   case BUTTON_4:
    41     break;
    42   default:
    43     break;
    44   }
    45         
    46       uint8_t idx = button_pin_to_idx(pin);//读取pin电平状态
    47          if(nrf_drv_gpiote_in_is_set(pin))//如果管脚检测是置位,则为高
    48     {
    49       nrf_gpio_pin_set(LEDS[idx]);//关闭LED
    50     }
    51     else
    52     {
    53       nrf_gpio_pin_clear(LEDS[idx]);//点亮LED
    54     }
    55 }
    56 
    57 
    58 //GPIOTE功能
    59 void button_init(void)
    60 {
    61    nrf_drv_gpiote_in_config_t btn_config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(true);//输入状态触发
    62      btn_config.pull = NRF_GPIO_PIN_PULLUP;//上拉
    63     //配置btn引脚为边沿敏感
    64      for(uint8_t i=0; i<4; i++)
    65     {
    66       nrf_drv_gpiote_in_init(Btns[i], &btn_config, button_pin_handler);//引脚号  配置变量  BTN_pin_handler回调函数
    67         nrf_drv_gpiote_in_event_enable(Btns[i], true);//中断使能
    68     }
    69 }

    (2)main函数

     1 int main(void)
     2 {
     3    nrf_drv_gpiote_init();//初始化gpioe外设
     4     
     5    button_init();
     6    leds_init();
     7 
     8     while (true)
     9     {}
    10 }

    (3)gpioe API

    1 //nrf_drv_gpiote_init(void);//GPIOE初始化函数  //这个函数是必须在与之相关函数之前初始化
    2 //nrf_drv_gpiote_out_init(Leds[i], &out_config);输出引脚配置
    3 //nrf_drv_gpiote_in_init(Btns[i], &btn_config, BTN_pin_handler);  //输入引脚配置函数
    4 //nrf_drv_gpiote_in_event_enable();//使能中断函数
    5 //nrf_drv_gpiote_in_is_set();//检查输入引脚电平状态

    实验视频:

    https://www.bilibili.com/video/BV1ja4y1s78y/

  • 相关阅读:
    android Notification 通知栏点击不能跳转(转自:http://www.oschina.net/question/778954_212394)
    Android使用ContentObserver监听数据库变化(转自:http://www.blogjava.net/zhaojianhua/archive/2011/10/27/362204.html)
    cenos 6.4 samba 服务器安装与配置
    centos下nginx+tomcat部署java web全过程(包括在线离线安装Mysql等)
    python读取csv文件
    linux文件实时同步
    Linux 上安装 mysql
    Mysql5.7.20安装文档
    Cassanfra、Hbase和MongoDB的选取
    org.springframework.http.converter.HttpMessageConversionException: T
  • 原文地址:https://www.cnblogs.com/darren-pty/p/13915598.html
Copyright © 2011-2022 走看看