码迷,mamicode.com
首页 > 其他好文 > 详细

3-gpioe event 库函数(nrf52832)

时间:2020-11-13 12:42:40      阅读:4      评论:0      收藏:0      [点我收藏+]

标签:ogg   ati   conf   back   检查   def   break   nbsp   i++   

实验目的:

按下按键,对应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();//检查输入引脚电平状态

 

3-gpioe event 库函数(nrf52832)

标签:ogg   ati   conf   back   检查   def   break   nbsp   i++   

原文地址:https://www.cnblogs.com/darren-pty/p/13915598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!