hi.
I am testing by making a custum board with nRF52832.
In the process of debugging, when a key is entered, a number of key events occur, so I have a question.
The GPIO modification was done as follows.
#define BUTTONS_NUMBER 5 #define BUTTON_START 27 #define BUTTON_1 27 #define BUTTON_2 28 #define BUTTON_3 29 #define BUTTON_4 30 #define BUTTON_5 31 #define BUTTON_STOP 31 //#define BUTTON_PULL NRF_GPIO_PIN_PULLUP #define BUTTON_PULL NRF_GPIO_PIN_PULLDOWN //#define BUTTONS_ACTIVE_STATE 0 #define BUTTONS_ACTIVE_STATE 1 #define BUTTONS_LIST { BUTTON_1, BUTTON_2, BUTTON_3, BUTTON_4, BUTTON_5 } #define BSP_BUTTON_0 BUTTON_1 #define BSP_BUTTON_1 BUTTON_2 #define BSP_BUTTON_2 BUTTON_3 #define BSP_BUTTON_3 BUTTON_4 #define BSP_BUTTON_4 BUTTON_5
The key envet through GPIO is configured to be confirmed with printf as follows.
/**@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; uint8_t reason; switch (event) { case BSP_EVENT_SLEEP: printf("> BSP_EVENT_SLEEP\r\n"); sleep_mode_enter(); break; case BSP_EVENT_DISCONNECT: reason = BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION; printf("> BSP_EVENT_DISCON : %x Reconn..\r\n", reason); err_code = sd_ble_gap_disconnect(m_conn_handle, reason); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } break; case BSP_EVENT_WHITELIST_OFF: printf("> BSP_EVENT_WHITELIST_OFF\r\n"); if (m_conn_handle == BLE_CONN_HANDLE_INVALID) { err_code = ble_advertising_restart_without_whitelist(&m_advertising); if (err_code != NRF_ERROR_INVALID_STATE) { APP_ERROR_CHECK(err_code); } } break; case BSP_EVENT_KEY_0 : printf("BSP_EVENT_KEY_0\r\n"); break; case BSP_EVENT_KEY_1 : printf("BSP_EVENT_KEY_1\r\n"); break; case BSP_EVENT_KEY_2 : printf("BSP_EVENT_KEY_2\r\n"); break; case BSP_EVENT_KEY_3 : printf("BSP_EVENT_KEY_3\r\n"); break; case BSP_EVENT_KEY_4 : printf("BSP_EVENT_KEY_4\r\n"); break; default: printf("> BSP_no_data\r\n"); break; } }
When you actually press the key, a strange phenomenon occurs.
Phenomenon 1) When key is pressed, BSP_EVNT_KEY_0 is generated All evnets in the above switch statement are generated sequentially.
However, it occurs only once according to evnt when keys of BSP_EVNT_KEY_1 ~ 4, excluding BSP_EVNT_KEY_0, are input.
<- Capture printf output when BSP_EVNT_KEY_0 key is pressed
Phenomenon 2) When advertising is no longer done due to Pheripheral's connection time-out, another problem arises.
At this time, pressing the key resets and all events occur sequentially at once.
<- Capture printf output when BSP_EVNT_KEY_1 key is pressed
I can't find the cause, so I'm asking for help.