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.