硬件——nrf51822第三篇,按键控制小灯
现象是按键按下,小灯亮,按键抬起,小灯灭。
从这一节我们细致剖析gpio口的设置:
nrf51822片上一共有32个数字引脚,分为4个port,如下:
port 0 pin 0-7
port 1 pin 8-15
port 2 pin 16-23
port 3 pin 24-31
每个gpio都有8个寄存器对其参数进行配置,这些寄存器均为32位,每个位对应每个gpio。
三个设置引脚输入输出寄存器:DIR DIRSET DIRCLR
三个设置引脚高低电平寄存器:OUT OUTSET OUTCLR
一个读引脚电平寄存器:IN
一个引脚配置寄存器:PIN_CNF[n]
接下来重点介绍PIN_CNF[n],在gpio的配置中,用的比较多,该寄存器有32个,分别对应32个gpio。
第0位:设置gpio接口方向
第1位:设置input buffer 是否启用 ,作用为再输入禁用时可以节省电流降低功耗,这对于某些对功耗要求较高的场合尤为试用。
当有输入时或者读取gpio电平时都要使能input buffer,输出时为了节省电流也要关闭该模块。
第2-3位:设置上、下拉电阻的使能
第8-10位:设置gpio的驱动能力
第16-17位:设置监测电平的极性 对外部电平的检测(sense功能),通俗来说可以理解为外部中断,其原理为gpio检测到高,低电平时会产生PORT event,
进而唤醒CPU或者响应相应的中断机制。
这里应该插入一张图片:
下面我们重新来看nrf_gpio.h文件下的函数:
nrf_gpio_range_cfg_output(uint32_t pin_range_start, uint32_t pin_range_end) 可以设置好几个引脚
:没有电平检测;驱动能力是最低等级;没有上下拉;没有启动input buffer;输出;
nrf_gpio_range_cfg_input(uint32_t pin_range_start, uint32_t pin_range_end, nrf_gpio_pin_pull_t pull_config) 可以设置好几个引脚
:没有电平检测;驱动能力是最低等级;上下拉是根据传入的参数设定的;启动input buffer;输入;
nrf_gpio_cfg_output(uint32_t pin_number) 设置一个引脚
:没有电平检测;驱动能力是最低等级;没有上下拉;没有启动input buffer;输出;
nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config) 设置一个引脚
:没有电平检测;驱动能力是最低等级;上下拉根据传入参数而定;启动input buffer;输入;
nrf_gpio_cfg_sense_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config, nrf_gpio_pin_sense_t sense_config)
:电平检测高或低由传入参数而定;驱动能力是最低等级;上下拉根据传入参数而定;启动input buffer;输入;
nrf_gpio_pin_dir_set(uint32_t pin_number, nrf_gpio_pin_dir_t direction)
:没有电平检测;驱动能力是最低等级;没有上下拉;启动input buffer;输入输出由传入参数决定;
nrf_gpio_pin_set(uint32_t pin_number) //设置某个引脚为高电平
nrf_gpio_pin_clear(uint32_t pin_number)//设置某个引脚为低电平
nrf_gpio_pin_toggle(uint32_t pin_number)//翻转某个引脚的电平
nrf_gpio_pin_write(uint32_t pin_number, uint32_t value) //写某个引脚的电平,可以写高,也可以写低
nrf_gpio_pin_read(uint32_t pin_number) //读取某个引脚的电平
nrf_gpio_word_byte_write(volatile uint32_t * word_address, uint8_t byte_no, uint8_t value) //写多个port的值
nrf_gpio_word_byte_read(const volatile uint32_t* word_address, uint8_t byte_no) //读多个port的值
nrf_gpio_port_dir_set(nrf_gpio_port_select_t port, nrf_gpio_port_dir_t dir) //Function for setting the direction of a port.
nrf_gpio_port_read(nrf_gpio_port_select_t port) //Function for reading a GPIO port.
nrf_gpio_port_write(nrf_gpio_port_select_t port, uint8_t value) //Function for writing to a GPIO port.
nrf_gpio_port_set(nrf_gpio_port_select_t port, uint8_t set_mask) //Function for setting individual pins on GPIO port.
nrf_gpio_port_clear(nrf_gpio_port_select_t port, uint8_t clr_mask) //Function for clearing individual pins on GPIO port.
硬件——nrf51822第三篇,按键控制小灯的更多相关文章
- STM32嵌入式开发学习笔记(三):使用按键控制小灯
按键和小灯一样,也是通过GPIO外设与主板连接,也是通过GPIO_InitStruct类型结构体控制其工作. 查阅技术手册,按钮连接GPIOA控制下的管脚0. 但与之不同的是,按键是一种输入设备,输入 ...
- Arduino 开关控制小灯持续亮之具体思路
Arduino 开关控制小灯持续亮之具体思路 为什么写这篇文章: 我们用开关控制灯的亮灭的时候,希望只需要按一下按键就可以做到灯一直亮着.而在<Arduino魔法书>中——有弹性的按键这一 ...
- 5-51单片机ESP8266学习-AT指令(8266TCP服务器--用手机TCP调试助手发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8759294.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXNpkDI7E8 ...
- cc2530的第二次实验,用按键控制流水灯
按键控制流水灯 具体想要实现按一下按键,然后单片机的三个灯会以流水灯的形式都亮一遍 实验相关寄存器 实验相关电路 宏定义 #define uint unsigned int #define uchar ...
- GPIO输入—按键检测(开关控制小灯)
本次的代码全是在上次代码之上添加的. 1.user下新建文件夹key,新建bsp_key.h bsp_key.c文件. 2.keil项目添加bsp_key.c,魔术棒C/C++中include pat ...
- 第三篇、微信小程序-网络请求API
wx.request(OBJECT)发起的是https请求.一个微信小程序,同时只能有5个网络请求连接. OBJECT参数说明: 效果图: net.js Page({ data:{ result:{} ...
- 6-51单片机ESP8266学习-AT指令(8266TCP服务器--做自己的AndroidTCP客户端发信息给单片机控制小灯的亮灭)
http://www.cnblogs.com/yangfengwu/p/8776712.html 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s/1jpHZjW_7 ...
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...
- 1-STM32嵌入LUA开发(控制小灯闪耀)
今天因为想让STM32完美的处理字符串,所以就想着让STM32嵌入lua,本来想用f103c8t6,但是一编译就提示内存不足...... 所以单片机的型号选择的 \ 我下载到了RBT6的芯片上测试的 ...
随机推荐
- 【例题 7-11 UVA - 12325】Zombie's Treasure Chest
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 1.N/s1 < 1e6 枚举1的个数 2.N/s2<1e6 枚举2的个数 3.s1和s2的值较小 假设买了s2个1和s ...
- 洛谷 P1324 矩形分割
P1324 矩形分割 题目描述 出于某些方面的需求,我们要把一块N×M的木板切成一个个1×1的小方块. 对于一块木板,我们只能从某条横线或者某条竖线(要在方格线上),而且这木板是不均匀的,从不同的线切 ...
- 与TCP/IP协议的初次见面(一)
与TCP/IP协议的初次见面(一) 前言 今下午刚才女朋友那边回来,唉,算是情人节去找她吧,穷屌丝住不起好酒店,住的打折酒店,只是女朋友来姨妈了,万幸啊,牙还疼得不行,这几天光照应她了,没空写博客了. ...
- RvmTranslator6.3 is released
RvmTranslator6.3 is released eryar@163.com RvmTranslator can translate the RVM file exported by AVEV ...
- Stacked Autoencoders
转自:http://www.cnblogs.com/tornadomeet/archive/2013/03/25/2980357.html 如果使用多层神经网络的话,那么将可以得到对输入更复杂的函数表 ...
- 通过 chroot 重新设置 root 密码
实例:通过 chroot 重新设置 root 密码 忘记了 root 密码该怎么办?接下来的 demo 将演示如何通过 chroot 命令重新设置 centos7 中被忘记了的 root 密码.sys ...
- python 内存中写入文件(read读取不到文件解决)
from io import StringIO a = StringIO.StringIO('title') a.write('content1\n') a.write('content2') a.s ...
- 火狐—火狐浏览器中的“HttpWatch”
在IE下通过HttpWatch能够查看HTTP请求的相关细节.这对我们分析程序的运行效率很有帮助,但是在火狐浏览器中的难道就没有相似的工具了吗?答案是否定的--火狐浏览器中也有.在火狐浏览器中该工具叫 ...
- APACHE2.4 指定目录中的字符编码
APACHE2.4 指定目录中的字符编码 xampp 的 apache2.4 默认字符编码是西文,中文字符显示乱码,在 httpd.conf 没有 AddDefaultCharset utf-8 这样 ...
- worktools-git 工具的使用总结(3)
1.标签的使用,增加标签 git tag 1.0 branch_name zhangshuli@zhangshuli-MS-:~/myGit$ git br -av parent e2e09c4 so ...