当前位置:   article > 正文

nRF52笔记(7) gpiote中断下按键_nrf52 gpiote

nrf52 gpiote

1、平台的条件

1.1 软件平台:sdk14.2
1.2 硬件平台: nrf52832

说明:
只是介绍代码怎么使用,直接点
QQ: 1297311998 ,如果有什么问题,请高手不吝赐教

2 使用步骤

2.1 添加以下文件

在这里插入图片描述

2.2 添加一个定时器,用于消抖、短按和长按

static uint8_t key_timeout_enable = 0;
APP_TIMER_DEF(check_key_timer);

static void check_key_timeout(void * p_context)
{
	key_timeout_enable = 1;
}
// 初始化按键检测定时器
void init_check_key_timer(void)
{
    ret_code_t err_code;
    err_code = app_timer_create(&check_key_timer,
                                APP_TIMER_MODE_SINGLE_SHOT,
                                check_key_timeout);
    APP_ERROR_CHECK(err_code);
}

/*****************************************************
*function : start_key_timer
*****************************************************/
void start_check_key_timer(uint8_t type)
{
	ret_code_t err_code;
	
	if(type == true)
	{
		err_code = app_timer_start(check_key_timer,
								   APP_TIMER_TICKS(500),
								   NULL);
		APP_ERROR_CHECK(err_code);
	}
	else if(type == false)
	{
		app_timer_stop(check_key_timer);
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

2.3 按键中断初始化


#define keyPin  26  // 按键 io
/*****************pin io gpiote*****************************/
void pin_hand(nrf_drv_gpiote_pin_t pin_no, nrf_gpiote_polarity_t action)
{
	if(nrf_gpio_pin_read(keyPin)==0)
	{ 
		// 中断进来-----执行用户函数
	     start_check_key_timer(true);
	}
}

/**********************************************
*funtion     :key_ledInit
*description : init led and key; key use gpiote driver
**********************************************/
void key_ledInit(void)
{
	// clear gpiote 
	if (!nrf_drv_gpiote_is_init())
	{
		nrf_drv_gpiote_init();
	}
	
	nrf_drv_gpiote_in_config_t config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false);

	config.pull = NRF_GPIO_PIN_PULLUP,
	config.sense = NRF_GPIOTE_POLARITY_HITOLO;
	nrf_drv_gpiote_in_init(keyPin,&config,pin_hand);
	nrf_drv_gpiote_in_event_enable(keyPin,true);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

按键检测函数,放在mian 函数while

void check_device_key(void)
{
	static uint8_t key_Valid = false;
	
	if(key_timeout_enable==0) return;
	
	key_timeout_enable = 0;
	BLE_RTT("key_time_count %d\r\n",key_time_count);
	

	if(0==nrf_gpio_pin_read(KEY_PIN))
	{	
		key_Valid = true;
	}
	else
	{
		key_time_count    = 0;
		key_Valid = false;
	}
	if(key_Valid == true) // °´¼ü»¹ÔÚ
	{
		if(++key_time_count>=long_key_time) // long key 
		{
          	key_Valid = false;
			key_pressed_count = 0;
			key_time_count    = 0;
			start_check_key_timer(false);
			BLE_RTT("device long key %d\r\n",long_key_enable)
		}
    }
	else //if(key_time_count<=short_key_time)// short key
	{
		key_pressed_count = 0;
		key_time_count    = 0;
		start_check_key_timer(false);
		BLE_RTT("device short_key %d\r\n",short_key);
		key_Valid = false;
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

可以加入QQ群:687360507
与大伙沟通交流,技术在于分享而进步

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/223528
推荐阅读
相关标签
  

闽ICP备14008679号