• 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/

  • 相关阅读:
    WinForm的Chart控件画条形图
    WinForm的Chart控件画折线图
    自定义控件
    左侧收缩菜单
    数组
    C#生成随机数的三种方法
    WinForm之GDI手动双缓冲技术
    WinForm之GDI画图步骤
    WinForm GDI编程:Graphics画布类
    翻译:《实用的Python编程》08_02_Logging
  • 原文地址:https://www.cnblogs.com/darren-pty/p/13915598.html
Copyright © 2020-2023  润新知