硬件——nrf51822第一篇GPIO的使用

本实现是基于一个开发箱,包括:综合应用开发系统主板XT-EDU-AK   1套; 手持终端系统 XT-EDU-HK 1套;

GPIO操作

工程:

这是一个关于流水灯的程序:

我们先看主函数:

/** @file
*
* @defgroup blinky_example_main main.c
* @{
* @ingroup blinky_example
* @brief Blinky Example Application main file.
*
*/

#include <stdbool.h>
#include <stdint.h>
#include "nrf_delay.h"
#include "nrf_gpio.h"      //这里面有关于gpio的操作,似乎只有.h文件,没有.c文件
#include "boards.h"       //关于板子是如何设计的,例如小灯接在哪个管脚上,都可以从这里找到。

#define LEDS_NUMBER 8

const uint8_t leds_list[LEDS_NUMBER] = { LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8 };

/**
* @brief Function for application main entry.
*/
int main(void)
{
uint8_t i;

nrf_gpio_range_cfg_output(LED_STOP,LED_START); // Configure LED-pins as outputs.

while (true)
{
for (i = 0; i < LEDS_NUMBER; i++) //light in order in 50ms interval
{
nrf_gpio_pin_clear(leds_list[i]);//设置gpio为低电平,点亮小灯。
nrf_delay_ms(50);
nrf_gpio_pin_set(leds_list[i]); //设置gpio为高电平,熄灭小灯。
}
for (i = LEDS_NUMBER; i > 0; i--) //light in order in 50ms interval
{
nrf_gpio_pin_clear(leds_list[i-1]);
nrf_delay_ms(50);
nrf_gpio_pin_set(leds_list[i-1]);
}
}
}

/** @} */

在main.c中,“nrf_gpio_range_cfg_output(LED_STOP,LED_START);” 是主要部分

作用为初始化gpio为输出。

可以打开它的代码:

static __INLINE void nrf_gpio_range_cfg_output(uint32_t pin_range_start, uint32_t pin_range_end)
{
/*lint -e{845} // A zero has been given as right argument to operator ‘|‘" */
for (; pin_range_start <= pin_range_end; pin_range_start++)//这一部分没有深究
{
NRF_GPIO->PIN_CNF[pin_range_start] = (GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos)
| (GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos)
| (GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos)
| (GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos)
| (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos);
} //其实上面这些都是关于寄存器的操作。对于初学没必要掌握,只要知道如何调用函数,调用哪个函数就行。
}

在nrf_gpio.h文件中有详细的gpio操作:(可以认为是库函数都在这里面)

下面对该文件夹下的函数进行注释:

void nrf_gpio_range_cfg_output(uint32_t pin_range_start, uint32_t pin_range_end);

void nrf_gpio_range_cfg_input(uint32_t pin_range_start, uint32_t pin_range_end, nrf_gpio_pin_pull_t pull_config);

void nrf_gpio_cfg_output(uint32_t pin_number);

void nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config);

void nrf_gpio_cfg_sense_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config, nrf_gpio_pin_sense_t sense_config);

void nrf_gpio_pin_dir_set(uint32_t pin_number, nrf_gpio_pin_dir_t direction);

void nrf_gpio_pin_set(uint32_t pin_number);

void nrf_gpio_pin_clear(uint32_t pin_number);

void nrf_gpio_pin_toggle(uint32_t pin_number);

void nrf_gpio_pin_write(uint32_t pin_number, uint32_t value);

uint32_t nrf_gpio_pin_read(uint32_t pin_number);

nrf_gpio_port_read(nrf_gpio_port_select_t port);

void nrf_gpio_port_write(nrf_gpio_port_select_t port, uint8_t value);

void nrf_gpio_port_set(nrf_gpio_port_select_t port, uint8_t set_mask);

void nrf_gpio_port_clear(nrf_gpio_port_select_t port, uint8_t clr_mask);

void nrf_gpio_word_byte_write(volatile uint32_t * word_address, uint8_t byte_no, uint8_t value);

uint8_t nrf_gpio_word_byte_read(const volatile uint32_t* word_address, uint8_t byte_no);

void nrf_gpio_port_dir_set(nrf_gpio_port_select_t port, nrf_gpio_port_dir_t dir);

下面看一个现象:

void nrf_gpio_range_cfg_input(uint32_t pin_range_start, uint32_t pin_range_end, nrf_gpio_pin_pull_t pull_config);

//上面的函数中绿色部分是个结构体,结构体的作用是保存量类似和有联系的变量,这里是输入的方式,打开该结构体

//会看到:

typedef enum
{
NRF_GPIO_PIN_NOPULL = GPIO_PIN_CNF_PULL_Disabled, ///< Pin pullup resistor disabled
NRF_GPIO_PIN_PULLDOWN = GPIO_PIN_CNF_PULL_Pulldown, ///< Pin pulldown resistor enabled
NRF_GPIO_PIN_PULLUP = GPIO_PIN_CNF_PULL_Pullup, ///< Pin pullup resistor enabled
} nrf_gpio_pin_pull_t;

//这也许是一种编程手法

时间: 2024-12-25 04:42:53

硬件——nrf51822第一篇GPIO的使用的相关文章

硬件——nrf51822第二篇,如何设置keil用来下载程序

转自电子发烧友论坛

U-BOOT-2016.07移植 (第一篇) 初步分析

U-BOOT-2016.07移植 (第一篇) 初步分析 目录 U-BOOT-201607移植 第一篇 初步分析 目录 编译和移植环境 更新交叉编译工具 1 下载arm-linux-gcc 443 2 安装arm-linux-gcc 443 安装环境Ubuntu 910 下载u-boot-201607并解压 分析顶层Makefile 1 找出目标依赖关系 2 总结 初次编译u-boot 1 配置 2 编译 分析u-boot启动流程 1 分析startS 2 分析crt0S 3 总结 1. 编译和移

从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 网上的 AlwaysOn可以说是非常的多,也可以说是非常的千篇一律,而且很多都是搭建非常顺利的,没有坑的,难道搭建 AlwaysOn真的可以这麽顺利吗?????? 由于公司使用的是最新的Windows Server 2012 R2,网上用的都是Windows Server 2008 R2 ,2012 R2和2008 R2在故障转移集群界面菜单和AD 服务管理工具 已经有较大变化,有一些步骤跟Windows Server 20

iBeacon的第一篇(基于Swift实现)

低功耗蓝牙技术现在几乎是只能手机的标配.随着这一技术的发展,苹果在2013年WWDC大会上,苹果推出iBeacon技术.该技术允许开发人员开发能够使用iBeacon硬件传感器的iOS应用程序,来为相应的应用程序提供更加精准的位置信息.2014年WWDC大会上,苹果表示,对iBeacon技术进行了改善,借助该技术,应用程序现在能够跟踪到用户所在的楼层的精确位置信息. iBeacon的工作方式是Transmitter-Receiver,即基站-接收机模式的.基站?这个时候不要想到移动.联通的那些大铁

并行计算复习————第一篇 并行计算硬件平台:并行计算机

并行计算复习 第一篇 并行计算硬件平台:并行计算机 Ch1 并行计算与并行计算机结构模型 1.1多核处理器与线程级并行 1.何谓多核处理器? 将功能复杂的单一核处理器划分为若干个功能相对简单的多个处理器内核,这些多处理器集中在一块芯片上,最初称为单芯片多处理器CMP,Intel公司将其商用名定为多核处理器 2.多核处理器的意义: 解决单处理器瓶颈:密集晶体管集成,功耗剧增:设计指令级并行体系结构来利用晶体管资源,但软件与硬件设计复杂 具有自己的优势:CMP设计验证周期短.开发风险成本低,相对较低

Core Animation 文档翻译 (第一篇)

Core Animation 文档翻译(第一篇)   2018-01-13  星期6 前言:作为iOS 开发,官方文档的阅读是很有必要的,值此周末便写下此文.作为iOS 实际经验3年的开发,之前的应用之前有阅读并实践过经典的<iOS核心动画高级技巧>,[其gitbook地址](https://zsisme.gitbooks.io/ios-/content/chapter10/custom-easing-functions.html),然总觉此书的翻译版,对于目前的CoreAnimation 官

阿里云一 第一篇:云服务器ECS

阿里云(www.aliyun.com)创立于2009年,是全球领先的云计算及人工智能科技公司,为200多个国家和地区的企业.开发者和政府机构提供服务.截至2017年3月,阿里云付费云计算用户达87.4万.阿里云致力于以在线公共服务的方式,提供安全.可靠的计算和数据处理能力,让计算和人工智能成为普惠科技. 但是对于很多刚刚接触阿里云的用户来说,经常会被这庞大的产品系统.众多的服务弄得眼花缭乱,感觉无法下手,不知道该怎么选择适合自己的产品服务.针对这个问题,从今天起,我会带着大家一起,分门别类的对阿

CSS px, em, 和rem; float以及clear(第一篇学习)

px:相对长度,相对于屏幕分辨率: em:相对长度单位,相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸.  任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样 12px=1.2em, 10px=1em

无限互联奖学金文章连载北京总部四十九期胡梦川 第一篇

无限互联奖学金文章连载北京总部四十九期胡梦川 第一篇: 今天是来到无限互联的第四天,严格来说已经第六天了,刚来就是开班典礼,给人一种很好的氛围.老师讲了很多关于以后学习的技巧和规定,我的第一感觉是,比备战高考还要严格,不过这才能体现一个组织的负责任.正式开讲才感觉到这个班级的大神无处不在,不努力根本赶不上,就是这个学习氛围和高强度的练习很重要.多用心你才能感觉到有些事其实很简单.关于学习时间大家基本都是一天不动的在敲代码,等于给自己一个机会吧.时间飞逝,抓住机会才重要.刚来第一周,感受最深就是好