1.目的
nrf51822外部中断
2.分析
在实际应用中经常要用到外部中断,比如按键唤醒。
3.平台:
协议栈版本:SDK10.0.0
编译软件:keil 5.12
硬件平台:微雪开发板nrf51822
例子:SDK 10.0.0\
1.目的
nrf51822外部中断
2.分析
在实际应用中经常要用到外部中断,比如按键唤醒。在这里设置5个外部按键中断
3.平台:
协议栈版本:SDK10.0.0
编译软件:keil 5.12
硬件平台:微雪开发板nrf51822
例子:SDK 10.0.0\examples\ble_peripheral\ble_app_hrs\pca10028\s110\arm4
4.步骤
1.首先配置5个端口,第五个端口是添加的添加代码如红色方框
2.bsp_init()修改为蓝色部分改为红色部分
3.中断事件配置如下。不知道为什么GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 要设置按键中断的个数。。不知道为什么
4.bsp_event_handle()添加代码如下:
-
/**@brief Function for handling events from the BSP module.
-
*
-
* @param[in] event Event generated by button press.
-
*/
-
void bsp_event_handler(bsp_event_t event)
-
{
-
uint32_t err_code;
-
switch (event)
-
{
-
case BSP_EVENT_SLEEP:
-
sleep_mode_enter();
-
break;
-
-
case BSP_EVENT_DISCONNECT:
-
err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
-
if (err_code != NRF_ERROR_INVALID_STATE)
-
{
-
APP_ERROR_CHECK(err_code);
-
}
-
break;
-
-
case BSP_EVENT_WHITELIST_OFF:
-
err_code = ble_advertising_restart_without_whitelist();
-
if (err_code != NRF_ERROR_INVALID_STATE)
-
{
-
APP_ERROR_CHECK(err_code);
-
}
-
break;
case BSP_EVENT_KEY_0:
-
break;
-
case BSP_EVENT_KEY_1:
//添加代码
-
break;
-
case BSP_EVENT_KEY_2:
//添加代码
-
break;
-
case BSP_EVENT_KEY_3:
//添加代码
-
break;
-
case BSP_EVENT_KEY_4:
//添加代码
-
while(
1);
-
break;
-
default:
-
break;
-
}
-
}
5。download程序。然后安按键hey1.跳到BSP_EVENT_KYEY4 :while(1)里面。ok。不过发现有些按键定义的事件发生了变化如图:初始化按键事件后
查看下m_events_list的值,和预定义的一样。
但是程序执行到这里的时候,发生了变化.
原来 bsp_btn_ble_init(NULL, &startup_event);里面又把一些给设置了一边
-
uint32_t bsp_btn_ble_init(
bsp_btn_ble_error_handler_t error_handler,
bsp_event_t * p_startup_bsp_evt)
-
{
-
uint32_t err_code = NRF_SUCCESS;
-
-
m_error_handler = error_handler;
-
-
if (p_startup_bsp_evt !=
NULL)
-
{
-
err_code = startup_event_extract(p_startup_bsp_evt);
-
RETURN_ON_ERROR(err_code);
-
}
-
-
if (m_num_connections ==
0)
-
{
-
err_code = advertising_buttons_configure();
-
}
-
-
return err_code;
-
}
-
static uint32_t advertising_buttons_configure()
-
{
-
uint32_t err_code;
-
-
err_code = bsp_event_to_button_action_assign(BTN_ID_DISCONNECT,
-
BTN_ACTION_DISCONNECT,
-
BSP_EVENT_DEFAULT);
-
RETURN_ON_ERROR_NOT_INVALID_PARAM(err_code);
-
-
err_code = bsp_event_to_button_action_assign(BTN_ID_WHITELIST_OFF,
-
BTN_ACTION_WHITELIST_OFF,
-
BSP_EVENT_WHITELIST_OFF);
-
RETURN_ON_ERROR_NOT_INVALID_PARAM(err_code);
-
-
err_code = bsp_event_to_button_action_assign(BTN_ID_SLEEP,
-
BTN_ACTION_SLEEP,
-
BSP_EVENT_SLEEP);
-
RETURN_ON_ERROR_NOT_INVALID_PARAM(err_code);
-
-
return NRF_SUCCESS;
-
}
上面可以知道,对一个按键可以同时设置按下,长按,释放3个事件。每个动作产生都会产生对应的事件。如对同一个端口设置长按 短按,释放事件。。
err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_LONG_PUSH, BSP_EVENT_KEY_4); err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_PUSH, BSP_EVENT_KEY_4); err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_RELEASE, BSP_EVENT_KEY_4);