我在使用nRF52832 sdk控制GPIOTE函数时遇到了一些问题,在使用14.01版本(SDK)时,GPIOTE函数似乎不能和BLE函数一起使用,我使用了下面的代码,它造成了系统挂起的问题,为什么?
我想知道GPIOTE函数是否不能与BLE函数一起使用,以及使用该函数与BLE函数的另一种方法,提前感谢您的支持和好意。
#define PIN_IN BUTTON_4
//#define PIN_OUT BSP_LED_3
void in_pin_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
{
printf("love %d: %d\n", (int)pin, (int)action);
// nrf_drv_gpiote_out_toggle(PIN_OUT);
}
/**
* @brief Function for configuring: PIN_IN pin for input, PIN_OUT pin for output,
* and configures GPIOTE to give an interrupt on pin change.
*/
void gpio_external_int_init(void)//love_1108
{
uint32_t err_code;
err_code = nrf_drv_ppi_init();
APP_ERROR_CHECK(err_code);
//
err_code = nrf_drv_gpiote_init();
APP_ERROR_CHECK(err_code);
//
// (void)nrf_drv_gpiote_init();
// nrf_drv_gpiote_out_config_t out_config = GPIOTE_CONFIG_OUT_SIMPLE(false);
// err_code = nrf_drv_gpiote_out_init(PIN_OUT, &out_config);
// APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false);
in_config.pull = NRF_GPIO_PIN_PULLUP;
err_code = nrf_drv_gpiote_in_init(PIN_IN, &in_config, in_pin_handler);
APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_event_enable(PIN_IN, true);
}发布于 2018-01-24 12:21:16
虽然你没有提供更多的细节,比如什么是“与BLE函数一起使用”,但我发现SDK示例ble_app_template有一个问题。在我的例子中,原因是文件bsp_btn_ble.c要求有比我的board_custom.h定义的更多的按钮。因此,我的硬件上不存在用于检查BTN_ID_WAKEUP_BOND_DELETE状态的函数startup_event_extract()会导致断言。令人不安的是,BTN_ID_WAKEUP_BOND_DELETE和其他按钮是在c文件中定义的,而不是从custom_board.h派生的。因此,跟踪电路板初始化,您可能会发现类似于ASSERT(button_idx < BUTTONS_NUMBER)的内容,在我的例子中,它导致了挂起。
https://stackoverflow.com/questions/47298186
复制相似问题