四、nrf52832的gpioe

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信号上升沿产生
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)
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);
	}
}
事实上nrf52832的gpiote类似于stm32的exit
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值