IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> nRF52832学习记录(一、外设初识) -> 正文阅读

[嵌入式]nRF52832学习记录(一、外设初识)

这些年蓝牙5.0的应用越来越多,最近也是想着把以前Enocean的低功耗设备有过的产品,用蓝牙做一套匹配的版本,使得产品线更加丰富,我们这里选择的是主流的 nRF52832 芯片。
学习的时候当然还是得参照很多前人总结的文章。

1、GPIO 和 GPIOTE

在学习的第一步,GPIO 和 GPIOTE我就疑惑了,这个与以前用过的单片机和 STM32 不类似啊,为什么对于IO口需要分GPIO和GPIOTE呢?

这里在网上找了一些相关的说明:在这里插入图片描述

下面的部分转至:nRF5芯片外设GPIO和GPIOTE介绍nRF5芯片外设GPIO和GPIOTE介绍

GPIO和GPIOTE都属于芯片外设,但两者功能完全不一样,使用过程中不要将两者混淆。GPIO就大家通常理解的普通IO口,用来对IO口进行读写等操作。因此,如果你需要读某个IO口状态,或者将某个IO口置1,那么请使用nrf_gpio.h里面的API,比如

nrf_gpio_cfg_input 用来将IO设为输入模式,可以配置为没有pull,有上拉电阻,有下拉电阻,悬浮等4种状态
nrf_gpio_pin_set 用来输出1到IO,输出模式下驱动力灵活可配,可以配置为普通驱动力(2mA),高驱动力(10mA),甚至断开状态(跟开漏输出很像)。

除此之外,GPIO模块还有2个非常重要的功能:

  • sense功能。当系统进入sleep模式(也称system OFF模式),只能通过IO口唤醒复位。当某个IO口使能了sense功能,那么它就可以用来唤醒sleep模式了。Sense使能的时候,可以配置高电平唤醒或者低电平唤醒。一般使用nrf_gpio_cfg_sense_input这个函数来使能IO口的sense功能。
  • port event功能。通俗来说,port event其实就是IO口中断,而且32个IO口共用同一个中断标志位:port event,检测port event只需要内部低频时钟在工作,因此功耗非常低:0.2微安左右,但内部低频时钟只能用来检测低精度的中断事件,也就是说IO口的中断脉冲要比较宽,比如像按键这种事件,就可以用port event来检测,功能达到了功耗又低,两全其美。这里特别说明一下,port event状态(一个中断flag)是跟随IO口电平的,比如检测高电平有效,那么只要IO口电平一直为高,那么port event一直有效,该中断标志位无法通过软件清除。这会产生两个副作用:一是不断进入port event中断例程,二是前面也提到,port event是被32个IO口共用的,因此只要其中一个IO口一直有效,别的IO产生的port event就会被忽略。为此,在处理port event中断的时候,nRF5 SDK app_button模块将每个port event的极性设为toggle,也就是每进入一次port event handler,nRF5 SDK都会把port event的极性翻转一次,比如将检测为高有效变成检测为低有效,这就相当于清除了port event中断flag,从而避开上述描述的两个副作用场景。由于GPIO模块不能处理中断,所以port event中断实际是交给GPIOTE模块来一起处理的。

GPIOTE,全称GPIO Tasks and Events,GPIOTE首先是一个外设模块,因此它遵守芯片外设最基本规则:每一个时刻每一个GPIO口只能被一个外设使用,因此当某一个IO口被用做GPIOTE了,那么它就不能再作为普通GPIO来使用了,也就是上面提到的GPIO API将变得无效,此时必须使用nrfx_gpiote.h(老版本为nrf_drv_gpiote.h)里面的API。Nordic将状态机引入到每一个外设,也就是说,每一个外设都有自己的输入(task),输出(event)和状态。GPIOTE的作用就是让GPIO也具有task和event的功能,也就是说,对GPIOTE来说,将某一个IO口置1,其实是触发TASKS_SET;检测某一个IO口上升沿,其实是等待EVENTS_IN。让IO口支持task和event机制,将为后面的PPI自动化操作打下基础,关于PPI详细说明,请参考如何理解nRF芯片的外设PP1

前面也提到过,处理IO口中断,必须通过GPIOTE模块来做,GPIOTE支持两种类型中断:
高精度的EVENTS_IN中断以及
低精度的EVENTS_PORT中断(就是前面GPIO章节提到的Port event)。
EVENTS_PORT主要用来检测IO口高电平或者低电平,而EVENTS_IN用来检测沿,即上升沿,下降沿或者双沿。EVENTS_IN可以清0,EVENTS_PORT无法清0,两者都是在GPIOTE_irq_handler里面处理。

EVENTS_IN和EVENTS_PORT两者初始化区别如下所示:

nrf_drv_gpiote_in_config_t config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false); 
//false表示低精度低功耗的Port event,每个IO口都可以作为port event,52832总共有32个portevent
err_code = nrf_drv_gpiote_in_init(pin_no, &config, gpiote_event_handler);
nrf_drv_gpiote_in_config_t config = GPIOTE_CONFIG_IN_SENSE_TOGGLE(true);  
//true表示高精度高功耗的IN event,52832总共有8个IN event。注:这里检测的是双沿
err_code = nrf_drv_gpiote_in_init(pin_no, &config, gpiote_event_handler);

如上所述,IN event中断和Port event中断,两者本质上是一样的,唯一的区别是:IN event中断每个中断口是相互独立的,而Port event中断所有IO口共用同一个中断标志位。

IN event需要高频时钟,所以功耗比较高,在精度可以接受的情况下,优先推荐使用port event。

SDK自带GPIOTE应用例程,感兴趣的读者请参考Keil5工程:SDK安装目录\examples\peripheral\pin_change_int\pca10040\blank\arm5_no_packs

SDK也自带Sense例子,有兴趣的读者请参考Keil5工程:SDK安装目录\examples\peripheral\ram_retention\pca10040\blank\arm5_no_packs

关于Port event中断使用例子,可以参考Nordic的app_button模块,比如ble_app_hrs就会用到这个模块,大家可以去看一下app_button是如何使用port event中断的。

有了上面的基础,然后再去做52832的GPIO口实验,就知道所以然了。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:36:26  更:2021-08-31 15:37:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:41:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码