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个端口,第五个端口是添加的添加代码如红色方框

nrf51822 --- 外部中断(按键2)_第1张图片


2.bsp_init()修改为蓝色部分改为红色部分

nrf51822 --- 外部中断(按键2)_第2张图片


3.中断事件配置如下。不知道为什么GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 要设置按键中断的个数。。不知道为什么

nrf51822 --- 外部中断(按键2)_第3张图片

4.bsp_event_handle()添加代码如下:

[cpp]  view plain  copy
  1. /**@brief Function for handling events from the BSP module. 
  2.  * 
  3.  * @param[in]   event   Event generated by button press. 
  4.  */  
  5. void bsp_event_handler(bsp_event_t event)  
  6. {  
  7.     uint32_t err_code;  
  8.     switch (event)  
  9.     {  
  10.         case BSP_EVENT_SLEEP:  
  11.             sleep_mode_enter();  
  12.             break;  
  13.   
  14.         case BSP_EVENT_DISCONNECT:  
  15.             err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);  
  16.             if (err_code != NRF_ERROR_INVALID_STATE)  
  17.             {  
  18.                 APP_ERROR_CHECK(err_code);  
  19.             }  
  20.             break;  
  21.   
  22.         case BSP_EVENT_WHITELIST_OFF:  
  23.             err_code = ble_advertising_restart_without_whitelist();  
  24.             if (err_code != NRF_ERROR_INVALID_STATE)  
  25.             {  
  26.                 APP_ERROR_CHECK(err_code);  
  27.             }  
  28.             break;              case BSP_EVENT_KEY_0:  
  29.           break;      
  30.             case BSP_EVENT_KEY_1:  //添加代码  
  31.                             break;  
  32.             case BSP_EVENT_KEY_2://添加代码  
  33.                             break;  
  34.             case BSP_EVENT_KEY_3://添加代码  
  35.                             break;  
  36.             case BSP_EVENT_KEY_4://添加代码  
  37.                 while(1);  
  38.           break;      
  39.         default:  
  40.             break;  
  41.     }  
  42. }  

5。download程序。然后安按键hey1.跳到BSP_EVENT_KYEY4 :while(1)里面。ok。不过发现有些按键定义的事件发生了变化如图:初始化按键事件后

nrf51822 --- 外部中断(按键2)_第4张图片

查看下m_events_list的值,和预定义的一样。

nrf51822 --- 外部中断(按键2)_第5张图片

但是程序执行到这里的时候,发生了变化.

nrf51822 --- 外部中断(按键2)_第6张图片 

nrf51822 --- 外部中断(按键2)_第7张图片

原来 bsp_btn_ble_init(NULL, &startup_event);里面又把一些给设置了一边

[cpp]  view plain  copy
  1. uint32_t bsp_btn_ble_init(bsp_btn_ble_error_handler_t error_handler, bsp_event_t * p_startup_bsp_evt)  
  2. {  
  3.     uint32_t err_code = NRF_SUCCESS;  
  4.   
  5.     m_error_handler = error_handler;  
  6.   
  7.     if (p_startup_bsp_evt != NULL)  
  8.     {  
  9.         err_code = startup_event_extract(p_startup_bsp_evt);  
  10.         RETURN_ON_ERROR(err_code);  
  11.     }  
  12.   
  13.     if (m_num_connections == 0)  
  14.     {  
  15.        err_code = advertising_buttons_configure();  
  16.     }  
  17.   
  18.     return err_code;  
  19. }  


[cpp]  view plain  copy
  1. static uint32_t advertising_buttons_configure()  
  2. {  
  3.     uint32_t err_code;  
  4.   
  5.     err_code = bsp_event_to_button_action_assign(BTN_ID_DISCONNECT,  
  6.                                                  BTN_ACTION_DISCONNECT,  
  7.                                                  BSP_EVENT_DEFAULT);  
  8.     RETURN_ON_ERROR_NOT_INVALID_PARAM(err_code);  
  9.   
  10.     err_code = bsp_event_to_button_action_assign(BTN_ID_WHITELIST_OFF,  
  11.                                                  BTN_ACTION_WHITELIST_OFF,  
  12.                                                  BSP_EVENT_WHITELIST_OFF);  
  13.     RETURN_ON_ERROR_NOT_INVALID_PARAM(err_code);  
  14.   
  15.     err_code = bsp_event_to_button_action_assign(BTN_ID_SLEEP,  
  16.                                                  BTN_ACTION_SLEEP,  
  17.                                                  BSP_EVENT_SLEEP);  
  18.     RETURN_ON_ERROR_NOT_INVALID_PARAM(err_code);  
  19.   
  20.     return NRF_SUCCESS;  
  21. }  


上面可以知道,对一个按键可以同时设置按下,长按,释放3个事件。每个动作产生都会产生对应的事件。如对同一个端口设置长按 短按,释放事件。。

 

[cpp]  view plain  copy
  1. err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_LONG_PUSH, BSP_EVENT_KEY_4);  
  2. err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_PUSH, BSP_EVENT_KEY_4);  
  3. err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_RELEASE, BSP_EVENT_KEY_4);  

你可能感兴趣的:(BLE__nRF52832)