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

时间:2024-03-19 16:17:02

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

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

3、bsp_event_to_button_action_assign()事件分配函数

      把BSP事件分配给每个按键的每一种操作;

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

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

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)首先去掉分配函数里的限制条件;

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

这里直接改成了:event = (bsp_event)(BSP_EVENT_KEY_0 +button);

2)分别分配事件;

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

我是直接分配了三个:

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)回调函数中处理:添加自己的处理

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

原始代码里只要分配了事件,已经可以实现短按、短按抬起、长按的检测,如果想检测长按抬起,需要添加几行代码,

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

4)这里可以修改长按的时间

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

总结:

1、短按/释放

        去掉限制条件,分别分配push和release事件

2、长按/释放

        去掉限制条件,分别分配long和release事件

3、短按/长按/释放

        去掉限制条件,分别分配push、long和release事件