当前位置:   article > 正文

四、nrf52832的gpioe_nrf52832gpioe通道

nrf52832gpioe通道
gpiote
1.gpiote不是简单的gpio,它是在gpio的基础上引入了task和event
    (task对应的是输出,event对应的是输入)
2.gpiote具有8个通道(每个通道可以分配给1个引脚)
3.gpiote的task任务(输出):
    1.SET:置位任务(1)
    2.CLR:清除任务(0)
    3.OUT:翻转任务
    (任务优先级:OUT > CLR > SET)
4.gpiote的event触发方式(输入):
    1.上升沿:NRF_GPIOTE_POLARITY_HITOLO
    2.下降沿: NRF_GPIOTE_POLARITY_LOTOHI
    3.任意沿: NRF_GPIOTE_POLARITY_TOGGLE
5.gpiote的port事件:通过多个gpio引脚detect信号上升沿产生
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
gpiote的常用函数
1.分配通道函数(无空闲就返回错误信息)
    1.nrf_drv_gpiote_in_init()
    2.nrf_drv_gpiote_out_init()
        需要使用nrf_drv_gpiote_out_vonfig_t为任务分配gpio引脚
2.释放通道函数
    1.nrf_drv_gpiote_in_uninit()
    2.nrf_drv_gpiote_out_uninit()
输出:   
3.任务使能gpiote(初始化后并没有开启)
    1.nrfx_gpiote_out_task_enable(pin)
    2.nrfx_gpiote_out_task_disable(pin)
4.触发后任务函数
    1.nrf_drv_gpiote_set_task_trigger() :置位
    2.nrf_drv_gpiote_clr_task_trigger() :清除
    3.nrf_drv_gpiote_out_task_trigger() :翻转
输入: 
5.事件使能
    1.nrfx_gpiote_in_event_enable(pin,statu)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
gpiote示例程序(需要配置sdkconfig.h开启gpiote)
#include <stdbool.h>
#include <stdint.h>
#include "nrf_delay.h"
#include "boards.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
#include "nrf_drv_gpiote.h"
static void log_init(void)
{
	ret_code_t err = NRF_LOG_INIT(NULL);
	APP_ERROR_CHECK(err);
	NRF_LOG_DEFAULT_BACKENDS_INIT();
}
//gpiote事件回调函数
void gpiote_event_handle(nrf_drv_gpiote_pin_t pin,nrf_gpiote_polarity_t action)
{
	//通过gpio引脚判断事件发生
	if(pin == 18)
	{
		nrf_gpio_pin_toggle(18);
	}
	//也可以通过gpiote触发信号判断事件发生
	if(action == NRF_GPIOTE_POLARITY_HITOLO)
	{
		nrf_gpio_pin_toggle(18);
	}	
}  
int main(void)
{
	log_init();
	
	//gpiote初始化
	ret_code_t err;
	err = nrf_drv_gpiote_init();															//只能初始化一次(共享资源)
	//输出任务
	APP_ERROR_CHECK(err);
	nrf_drv_gpiote_out_config_t task_config = GPIOTE_CONFIG_OUT_TASK_TOGGLE(true);			//定义gpiote电平翻转任务结构体
	err = nrf_drv_gpiote_out_init(17,&task_config);											//配置gpiote引脚17
	APP_ERROR_CHECK(err);
	nrf_drv_gpiote_out_task_enable(17);														//gpiote任务使能
	//输入事件
	nrf_drv_gpiote_in_config_t 	event_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(true);			//设置为下降沿模式触发
	event_config.pull = NRF_GPIO_PIN_PULLUP;												//设置gpio为上拉模式
	err = nrf_drv_gpiote_in_init(13,&event_config,gpiote_event_handle);						//初始化gpiote引脚13
	APP_ERROR_CHECK(err);
	nrf_drv_gpiote_in_event_enable(13,true);												//gpiote事件使能
	
	//初始化普通gpio-p0.18
	nrf_gpio_cfg_output(18);
	nrf_gpio_pin_set(18);
	
	
	NRF_LOG_INFO("GPIOTE example started");
	NRF_LOG_FLUSH();
	
	while(1)
	{
		nrf_drv_gpiote_out_task_trigger(17);												//触发翻转任务
		nrf_delay_ms(500);
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
事实上nrf52832的gpiote类似于stm32的exit
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号