void my_gpiote_config_high(void) { ret_code_t err_code; err_code = nrf_drv_gpiote_init(); APP_ERROR_CHECK(err_code); //以下代码配置作为GPIOTE输入,并分别配置引脚上升沿、下降沿和任意电平变化产生事件 //高电平到低电平变化产生事件,即下降沿产生事件 true表示高精度高功耗的IN event nrf_drv_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(true); //nrf_drv_gpiote_in_config_t in_config = NRFX_GPIOTE_CONFIG_IN_SENSE_HITOLO(true);//false true //低精度不稳定 //3K以内高精度不丢数 //高精度增加10-20uA //2.5K 在连接时易丢数 //开启引脚的上拉电阻 in_config.pull = GPIO_PIN_CNF_PULL_Disabled;//NRF_GPIO_PIN_PULLUP;//开启上拉功耗大170uA //配置该引脚为GPIOTE输入 err_code = nrf_drv_gpiote_in_init(HUOER_B, &in_config, in_pin_handler); APP_ERROR_CHECK(err_code); //使能该引脚所在GPIOTE通道的事件模式 nrf_drv_gpiote_in_event_enable(HUOER_B, true); } uint16_t SpiFlash_ReadID(void) { uint16_t dat = 0; //准备数据 spi_tx_buf[0] = SPIFlash_ReadID; spi_tx_buf[1] = 0x00; spi_tx_buf[2] = 0x00; spi_tx_buf[3] = 0x00; spi_tx_buf[4] = 0xFF; spi_tx_buf[5] = 0xFF; //拉低CS,使能W25Q128FV SPIFlash_CS_LOW; //启动数据传输 APP_ERROR_CHECK(nrf_drv_spi_transfer(&s_spiHandle, spi_tx_buf, 6, spi_rx_buf, 6)); //拉高CS,释放W25Q128FV SPIFlash_CS_HIGH; //接收数组最后两个字节才是读取的ID dat|=spi_rx_buf[4]<<8; dat|=spi_rx_buf[5]; return dat; } void SPI_Flash_PowerDown(void) //进入掉电模式 { SPIFlash_CS_LOW; Spi_WriteOneByte(DeepPowerDown); //0xB9 SPIFlash_CS_HIGH; nrf_delay_us(100); nrf_drv_gpiote_uninit(); nrf_drv_spi_uninit(&s_spiHandle); nrf_gpio_cfg_default(SPI_MISO_PIN); nrf_gpio_cfg_default(SPI_MOSI_PIN); nrf_gpio_cfg_default(SPI_SCK_PIN); // my_gpiote_config_low(); // nrf_drv_gpiote_uninit(); // my_gpiote_config_high(); } void SPI_Flash_Init(void) { nrf_gpio_cfg_default(SPI_MISO_PIN); nrf_gpio_cfg_default(SPI_MOSI_PIN); nrf_gpio_cfg_default(SPI_SCK_PIN); //配置用于SPI片选的引脚为输出 nrf_gpio_cfg_output(SPI_SS_PIN); //拉高CS SPIFlash_CS_HIGH; //使用默认配置参数初始化SPI配置结构体 nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG; //重写SPI信号连接的引脚配置 spi_config.ss_pin = SPI_SS_PIN;//NRF_DRV_SPI_PIN_NOT_USED; spi_config.miso_pin = SPI_MISO_PIN; spi_config.mosi_pin = SPI_MOSI_PIN; spi_config.sck_pin = SPI_SCK_PIN; spi_config.frequency = NRF_DRV_SPI_FREQ_8M; //初始化SPI 传入NULL,将进行阻塞模式,只有接收完成后,收发函数才会返回 APP_ERROR_CHECK(nrf_drv_spi_init(&s_spiHandle, &spi_config, NULL, NULL)); nrf_delay_us(100); }