Программирование ARM nRF5 SDK 12 BSP: как добавить свой обработчик кнопки Mon, September 27 2021  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF5 SDK 12 BSP: как добавить свой обработчик кнопки Печать
Добавил(а) microsin   

Здесь показан процесс добавления своего обработчика кнопки с помощью функций BSP (Board Support Package, или Button Support Package, как кому больше нравится) на плате разработчика PCA10040 и примера устройства Central BLE Heart Rate Service (или клиента BLE; этот пример находится в папке examples\ble_central\ble_app_hrs_c архива SDK nRF5_SDK_12.3.0_d7731ad [2]).

Процесс по шагам:

1. Добавьте новый идентификатор события в конец перечисления bsp_event_t (оно находится в bsp.h). На примере добавления идентификатора события BSP_EVENT_MY_SEND:

typedef enum
{
   BSP_EVENT_NOTHING = 0,        /**< Назначьте это событие на действие, чтобы предотвратить генерацию
                                      события в ответ на действие (эквивалентно запрету действия). */
   BSP_EVENT_DEFAULT,            /**< Назначьте это событие на действие, которое должно быть привязано
                                      к событию по умолчанию для этого действия. */
   BSP_EVENT_CLEAR_BONDING_DATA, /**< Постоянные данные привязки (persistent bonding data)
                                      должны быть очищены. */
   BSP_EVENT_CLEAR_ALERT,        /**< Предупреждение должно быть очищено. */
   ...
   BSP_EVENT_KEY_7,              /**< Событие по умолчанию для действия по нажатию (push action) кнопки
                                      BSP_BUTTON_7 (только в том случае, если эта кнопка присутствует). */
   BSP_EVENT_MY_SEND,            // Это новое добавленное событие
   BSP_EVENT_KEY_LAST = BSP_EVENT_MY_SEND,   // Идентификатор последнего события
} bsp_event_t;

Примечание: по умолчанию библиотека BSP присваивает кнопкам BSP_BUTTON_0 .. BSP_BUTTON_7 события BSP_EVENT_KEY_0 .. BSP_EVENT_KEY_7 и событие на все действия BSP_EVENT_NOTHING. Это делается только для тех кнопок, которые присутствуют в системе (на отладочной плате PCA10040 только 4 кнопки BSP_BUTTON_0 .. BSP_BUTTON_3). Под действием понимается нажатие, отпускание, длинное нажатие (#define константы BSP_BUTTON_ACTION_PUSH, BSP_BUTTON_ACTION_RELEASE, BSP_BUTTON_ACTION_LONG_PUSH, которые определены в том же заголовке bsp.h).

Новый идентификатор нужно добавить в перечисление bsp_event_t перед идентификатором BSP_EVENT_KEY_LAST, и соответствующим образом подкорректировать его значение.

2. Добавьте перед входом в бесконечный цикл функции main вызов bsp_event_to_button_action_assign, что будет назначать нужной кнопке генерацию нужного события на нужное действие:

bsp_event_to_button_action_assign(bsp_board_pin_to_button_idx(BSP_BUTTON_2),
                                  BSP_BUTTON_ACTION_PUSH,
                                  BSP_EVENT_MY_SEND);

В этом вызове назначается генерация события BSP_EVENT_MY_SEND в ответ на нажатие (BSP_BUTTON_ACTION_PUSH) кнопки BSP_BUTTON_2. Функция bsp_board_pin_to_button_idx переводит номер ножки входа, соответствующий кнопке BSP_BUTTON_2, в соответствующий индекс кнопки (кнопке BSP_BUTTON_2 соответствует индекс 2).

3. В функцию обработки события bsp_event_handler (эта функция находится в main.c) добавьте ветку для события BSP_EVENT_MY_SEND:

void bsp_event_handler(bsp_event_t event)
{
   uint32_t err_code;
 
   switch (event)
   {
   case BSP_EVENT_SLEEP:
   ...
 
   case BSP_EVENT_MY_SEND:
umsg("Мое новое событие сработало!\n");
      break;
 
   default:
      break;
   }
}

[Ссылки]

1. SDK 12 Board Support Package (BSP) site:nordicsemi.com.
2210728nRF5_SDK_12.3.0.zip - nRF5_SDK_12.3.0_d7731ad и offline-документация.

 

Добавить комментарий


Защитный код
Обновить

Top of Page