标签:
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; } }
查看下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);
标签:
原文地址:http://blog.csdn.net/a369000753/article/details/51314849