nrf51822 --- 外部中断(按键2)


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);


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值