nrf52840 GPIOTE是指Nordic Semiconductor公司推出的一种GPIO事件触发器(GPIO Task and Event Trigger),用于处理nRF52840系列芯片上的GPIO输入和输出。GPIOTE可以通过配置来监测GPIO引脚的状态变化,并在特定条件下触发相应的事件或任务。它可以用于实现各种应用,如中断处理、低功耗触发、外部设备的输入输出等。
GPIOTE的主要特性包括:
- 支持多个GPIO引脚的事件和任务触发。
- 可以配置不同的触发条件,如上升沿、下降沿、高电平、低电平等。
- 可以配置GPIO引脚的输入和输出模式。
- 支持中断和DMA传输方式。
- 可以与其他外设模块(如PPI、TIMER等)进行联动,实现更复杂的功能。
如果说你和我一样使用GPIOTE用来监测某个引脚的电平变化,可以采用下面代码
void in_pin_handler(nrfx_gpiote_pint_t pin,nrf_gpiote_polarity_t action)
{
//可以写当你检测到RX引脚电平发生翻转时候,需要做的任务
}
void uart_rx_pin_init(void)
{
ret_code_t err_code = 0;
if(!nrf_drv_gpiote_is_init())//未初始化的话
{
err_code = nrf_drv_gpiote_init();//进行初始化gpiote
APP_ERROR_CHECK(err_code);
}
/*RX的任意电平事件*/
nrf_drv_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_TOHHLE(true);
in_config.pull = NRF_GPIO_PIN_NOPULL;//引脚不上拉
err_code = nrf_drv_gpiote_in_init(RX_PIN_NUMBER,&in_config,&in_pin_handler);
APP_ERROR_CHECK(err_code);
//RX_PIN_NUMBER 定义的引脚号,需要和硬件的引脚位置对应
nrf_drv_gpiote_in_event_enable(RX_PIN_NUMBER,true);
}
将上面void uart_rx_pin_init(void)在main函数面进行初始化,就可以监测到引脚变化了,当然也可以检测上升沿或下降沿来进行任务处理。
如果需要使用拉出板子上面的引脚并改变引脚电平信号来调试代码从1运行到2的时间,可以拉引脚的方式进行调试,毕竟有些中断的地方如果要是打LOG会很占用内存空间,而且打LOG也是一种中断方式,会影响其他中断或者数据的正常传输
#define PIN_NUM_P0_08 NRF_GPIO_PIN_MAP(0,08)
//初始化GPIO配置成输出引脚
void init_gpio(void)
{
nrf_gpio_cfg_output(PIN_NUM_P0_08);
}
//需要先初始化才能对引脚进行设置
//设置引脚输出高电平
nrf_gpio_pin_set(PIN_NUM_P0_08);
//设置引脚输出低电平
nrf_gpio_pin_clear(PIN_NUM_P0_08);
如有不对,请大佬们指正,万分感谢!!!!