GPIOTE部分学习思维导图

GPIOTE原理

1.1nRF52832寄存器类型

Task:任务寄存器,可以由程序或事件触发

Event:事件寄存器,事件可以产生中断和触发任务

Register:普通寄存器,和一般单片机的寄存器一样

1.2GPIOTE功能

GPIOTE每个通道可以使用的Task有三个

置位,清除,翻转

GPIOTE每个同奥的事件可以由以下的输入状态产生

上升沿,下降沿,任意电平跳变

1.3引脚Tasks和Events

1.4PORT事件

1.5相关寄存器

GPIOTE驱动库的使用

2.1任务/事件通道的分配

用于驱动引脚输出的GPIOTE任务或者用于在输入引脚电平变换时产生事件的

任务/事件通道数量时受限制的,驱动程序会管理这些通道,用户是决定不了哪个通道的,

也就是说通道分配由驱动程序完成,用户不能指定使用哪一个具体的通道。

2.2重要的API函数

函数功能:初始化GPIOTE通道
ret_code_t nrf_drv_gpiote_init ( void )
函数功能:初始化GPIOTE输出引脚
ret_code_t nrf_drv_gpiote_out_init (
nrf_drv_gpiote_pin_t pin, //初始化引脚
nrf_drv_gpiote_out_config_t const * p_config //初始化结构体
)
nrf_drv_gpiote_out_config_t要包含以下三项内容
1)引脚的初始状态:高电平还是低电平
2)引脚动作:任务触发后引脚执行的动作,包括置位,清除和翻转
3)是否为GPIOTE引脚
函数功能:使能任务触发
void nrf_drv_gpiote_out_task_enable ( nrf_drv_gpiote_pin_t pin )

2.3应用步骤

2.3.1GPIOTE输出应用步骤

注意:GPIOTE一般和PPI一起用,否则体现不了GPIOTE的优势

(1)初始化GPIOTE模块(在一个程序中GPIOTE只能初始化一次)

(2)初始化GPIOTE输出引脚

(3)是否使能任务触发,虽然使用的GPIOTE模块,但是仍可设置是任务

触发还是写GPIO寄存器,若使能了任务触发,则触发任务驱动引脚,否则写GPIO寄存器驱动引脚

(4)使能任务触发

2.3.2GPIOTE输入应用步骤

(1)初始化GPIOTE模块

(2)配置引脚为GPIO输入

ret_code_t nrf_drv_gpiote_in_init	(
nrf_drv_gpiote_pin_t pin, //初始化的引脚
nrf_drv_gpiote_in_config_t const * p_config, //GPIOTE输入初始化结构体
nrf_drv_gpiote_evt_handler_t evt_handler //User function to be called when the configured transition occurs.
)

GPIOTE初始化结构体包括4项内容

1)Sense 配置引脚的Sense功能

高电平到低电平的变化产生事件

低电平到高电平的变化产生事件

任意电平变化产生事件

2)is_watcher 是否连接输入缓冲器

3)pull 是否开启上拉电阻

4)hi_accuracy 是否为高精度模式

(3)使能该引脚所在GPIOTE通道的事件模式

void nrf_drv_gpiote_in_event_enable	(
nrf_drv_gpiote_pin_t pin,
bool int_enable //True to enable the interrupt. Always valid for a high-accuracy pin
)

DEMO

包括PPI和GPIOTE两部分的应用

#include <stdint.h>
#include "nrf_drv_gpiote.h"
#include "app_error.h"
#include "nrf_drv_ppi.h" //定义引脚
#define LED_2 18
#define BUTTON_0 16
//定义nrf_ppi_channel_t变量,用来保存PPI的信息
nrf_ppi_channel_t my_ppi_channel; //初始化PPI
void PPI_Config()
{
uint32_t err_code = NRF_SUCCESS; //1 初始化PPI
err_code=nrf_drv_ppi_init();
APP_ERROR_CHECK(err_code);
//2 分配PPI通道
err_code=nrf_drv_ppi_channel_alloc(&my_ppi_channel);
APP_ERROR_CHECK(err_code);
//3 配置PPI通道的EEP和TEP
err_code=nrf_drv_ppi_channel_assign(my_ppi_channel,
nrf_drv_gpiote_in_event_addr_get(BUTTON_0),
nrf_drv_gpiote_out_task_addr_get(LED_2));
APP_ERROR_CHECK(err_code); //4 使能PPI通道
err_code=nrf_drv_ppi_channel_enable(my_ppi_channel);
APP_ERROR_CHECK(err_code);
}
//初始化GPIOTE
void GPIOTE_Config()
{
ret_code_t err_code;
//LED初始化为输出引脚
err_code=nrf_drv_gpiote_init();
APP_ERROR_CHECK(err_code);
//配置结构体
nrf_drv_gpiote_out_config_t led_config=GPIOTE_CONFIG_OUT_TASK_TOGGLE(true);
err_code=nrf_drv_gpiote_out_init(LED_2,&led_config);
APP_ERROR_CHECK(err_code);
//使能任务触发
nrf_drv_gpiote_out_task_enable(LED_2); //BUTTON初始化为输入引脚
nrf_drv_gpiote_in_config_t button_config=GPIOTE_CONFIG_IN_SENSE_HITOLO(true);
button_config.pull=NRF_GPIO_PIN_PULLUP; //开启上拉电阻
err_code=nrf_drv_gpiote_in_init(BUTTON_0,&button_config,NULL);
APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_event_enable(BUTTON_0,true);
}
/**********************************************************************************************
* 描 述 : main函数
* 入 参 : 无
* 返回值 : 无
***********************************************************************************************/
int main(void)
{
//初始化GPIOTE
GPIOTE_Config();
//初始化PPI
PPI_Config(); //一定要先初始化GPIOTE,然后进行PPI的初始化 while (true)
{
}
}

参考资料

1 艾克姆科技 《nRF52832开发教程》

nRF52832-GPIOTE部分的更多相关文章

  1. 蓝牙nrf52832的架构和开发(转载)

    相比TI的CC254X.DIALOG的DA1458X,nordic推出的nrf51822和nrf52832在架构和开发商都有自己独特的地方.这几颗产品都是蓝牙低功耗芯片.DA1458X使用OTP硬件架 ...

  2. 青风nrf52832跑zephyr——点亮LED

    zephyr版本:1.10 硬件:采用青风nrf52832开发板 开发环境:虚拟机Ubuntu16.04编译+Windows7 64bit烧录   使用的是 zephyr-zephyr-v1.10.0 ...

  3. [nRF51822] 5、 霸屏了——详解nRF51 SDK中的GPIOTE(从GPIO电平变化到产生中断事件的流程详解)

    :由于在大多数情况下GPIO的状态变化都会触发应用程序执行一些动作.为了方便nRF51官方把该流程封装成了GPIOTE,全称:The GPIO Tasks and Events (GPIOTE) . ...

  4. Nordic Semiconductor nRF52832 蓝牙智能多协议单芯片解决方案荣获《中国电子商情》编辑选择奖

    挪威奥斯陆 – 2016年4月11日 – Nordic Semiconductor ASA (OSE: NOD) 赢得<中国电子商情>颁发的"2015年编辑选择奖",其 ...

  5. NRF51822之GPIOTE使用

    ---恢复内容开始--- 在上篇介绍nrf51822的GPIOTE http://www.cnblogs.com/libra13179/p/5336580.html 我们现在开始下水游泳. /** @ ...

  6. NRF51822之GPIOTE介绍

    Note This library is obsolete and should not be used in new designs. Instead, you should use GPIOTE ...

  7. nrf51822裸机教程-GPIOTE

    GPIO通常都会具有中断功能,上一讲的GPIO中并没有涉及到中断的相关寄存器. 51822将GPIO的中断相关做成了一个单独的模块GPIOTE,这个模块不仅提供了GPIO的中断功能,同时提供了 通过t ...

  8. nRF52系列——nRF52832来袭

    nRF52系列——nRF52832来袭 Nordic凭借着在无线技术的数十年深耕,推出第一个μBlue芯片-- nRF8001.其低功耗等特性在当时吸引了无数厂商的目光,并将这产品应用到多个领域,再之 ...

  9. 废旧鼠标先别丢,用来学习nRF52832 的QDEC

    刚发现nRF52832有一个 QDEC,SDK13.0中还有驱动,但是不太友好.  如果大家有废旧鼠标,建议拆一个编码器下来“学习”.鼠标的一般原理如下: 图一 图中那个SW4 ALPS EC10E  ...

  10. NRF52832与W25Q80通信

    1 NRF52832SPI主机的功能描述 nRF52832SPIM的主要特征 3个SPI实例 支持SPI的模式0到模式3 支持DMA Individual selection of IO pin fo ...

随机推荐

  1. PHP 中文工具类,支持汉字转拼音、拼音分词、简繁互转

    ChineseUtil 下载地址:https://github.com/Yurunsoft/ChineseUtil 另外一个中文转拼音工具:https://github.com/overtrue/pi ...

  2. P1297 [国家集训队]单选错位(期望)

    P1297 [国家集训队]单选错位 期望入门 我们考虑涂到第$i$道题时的情况 此时题$i$答案有$a[i]$种,我们可能涂$a[i+1]$种 分类讨论: 1.$a[i]>=a[i+1]$: 可 ...

  3. 02:MongoDB操作

    1.1 MongoDB 增加 1.插入数据 1. 插入文档: insert 如果插入数据的时候,collection还不存在,自动创建集合 2. insertOne: 插入一条数据 3. insert ...

  4. 11: python中的轻量级定时任务调度库:schedule

    1.1 schedule 基本使用 1.schedule 介绍 1. 提到定时任务调度的时候,相信很多人会想到芹菜celery,要么就写个脚本塞到crontab中. 2. 不过,一个小的定时脚本,要用 ...

  5. PyCharm笔记之搭建Python开发环境

    新建一个空helloworld项目,然后新建一个main.py文件: 此时还无法运行,因为没有配置项目的入口脚本,通过下图的步骤指定一个: 在scrip框里填入你的入口脚本 之后就可以点击绿色的播放按 ...

  6. 2018年11月16日 我和SB交流有代沟-继续字符串4

    test="abcdeffedcba" v=test.lstrip("bcabc")#寻找的是最多匹配然后移除指定字符串 print("1.lstri ...

  7. topcoder srm 705 div1 -3

    1.设有一个字母表$T$,对于一个单词$w$,若对于任意的$0\leq i< |w|-1$,满足$w_{i}$在$T$中的排名小于等于$w_{i+1}$在$T$中的排名,则称$s$在$T$中是合 ...

  8. Oracle错误——ORA-12704:字符集不匹配

    错误 在查询使用coalesce把字符串进行转换时,报错ORA-12704:字符集不匹配 如下图 解决方法 在网上找了很多方法,有使用Translate转换的:有使用to_char()的,经过测试不符 ...

  9. CSS的初了解(更新中···)

    在前面,我们学习了html的结构.基本骨架.起名方式和选择器,接下来,我们就要学习CSS了. 首先,我们要知道CSS是什么. CSS 全称叫层叠样式表,作用是给html添加样式style,添加属性. ...

  10. Flutter提升开发效率的一些方法和工具

    Flutter的环境搭配完之后,就开始Flutter的开发,下面的一些工具和方法,可以省下一些时间. 自己在用的,暂时想到的,就是这些了,总结一下. 1.JSON解析快速生成实体类 根据接口返回的数据 ...