nRF52832 — BSP按鍵流程梳理(Board Support Package)

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 XX  作       者:ZHS(文化人)

 XX  聯繫方式:文章末尾Chat快問

 XX  版權聲明:原創文章,歡迎評論和轉載~轉載時能告訴我一聲就最好了

 XX  要說的話:作者水平有限,難免有不足之處,懇請指正!

 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

寫在前面:nordic平臺的BSP寫的還是比較經典,值得搞明白然後加以利用~

1、buttons_leds_init(&erase_bonds); //按鍵函數初始化 

static void buttons_leds_init(bool * p_erase_bonds)

{

        bsp_event_t startup_event;

        //按鍵和燈初始化函數,APP_TIMER_TICKS(100, APP_TIMER_PRESCALER):消抖時間 bsp_event_handler:回調函數

        uint32_t err_code = bsp_init(BSP_INIT_LED | BSP_INIT_BUTTONS,

                                        APP_TIMER_TICKS(100, APP_TIMER_PRESCALER),

                                        bsp_event_handler); 

        APP_ERROR_CHECK(err_code);

        err_code = bsp_btn_ble_init(NULL, &startup_event);

        APP_ERROR_CHECK(err_code); 

        *p_erase_bonds = (startup_event == BSP_EVENT_CLEAR_BONDING_DATA);

2、bsp_init()

       m_registered_callback= bsp_event_handler()


3、bsp_event_to_button_action_assign()事件分配函數

      把BSP事件分配給每個按鍵的每一種操作;



app_button_init()

gpiote_event_handler()

detection_delay_timeout_handler()

4、長按

button_timer_handler()長按的handler

bsp_button_event_handler()事件獲取以及調用callback

根據對按鍵的操作,獲取不同的BSP事件,然後調用回調函數,就是bsp_event_handler()

5、如何實現註冊多個事件:

1)首先去掉分配函數裏的限制條件;


這裏直接改成了:event = (bsp_event)(BSP_EVENT_KEY_0 +button);

2)分別分配事件;


我是直接分配了三個:

err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_PUSH, BSP_EVENT_DEFAULT);  

err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_LONG_PUSH, BSP_EVENT_DEFAULT); 

err_code = bsp_event_to_button_action_assign(num, BSP_BUTTON_ACTION_RELEASE, BSP_EVENT_DEFAULT);

3)回調函數中處理:添加自己的處理


原始代碼裏只要分配了事件,已經可以實現短按、短按擡起、長按的檢測,如果想檢測長按擡起,需要添加幾行代碼,


4)這裏可以修改長按的時間


總結:

1、短按/釋放

        去掉限制條件,分別分配push和release事件

2、長按/釋放

        去掉限制條件,分別分配long和release事件

3、短按/長按/釋放

        去掉限制條件,分別分配push、long和release事件

發佈了55 篇原創文章 · 獲贊 74 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章