0

我用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);
}
4

1 回答 1

0

虽然您没有提供太多细节,例如“与 BLE 功能一起使用”的含义,但我发现 SDK 示例存在问题ble_app_template。在我的情况下,原因是文件bsp_btn_ble.c要求按钮比我board_custom.h定义的要多。因此,该函数startup_event_extract()想要检查BTN_ID_WAKEUP_BOND_DELETE我的硬件上不存在的状态,从而导致断言。令人不安的是BTN_ID_WAKEUP_BOND_DELETE,其他按钮是在 c 文件中定义的,而不是从custom_board.h. 因此,跟踪电路板初始化,您可能会发现类似 的ASSERT(button_idx < BUTTONS_NUMBER)内容,这在我的情况下导致了挂起。

于 2018-01-24T04:21:16.377 回答