本人采用的是WaveShare的BLE400扩展板和Core51822核心板链接,例程中的Evaluation Board PCA10001上的程序可以完全不加修改移植到此板上。

功能


顾名思义,此例程的功能就是两个灯交替闪烁。

源码分析

首先从main()函数看起

int main(void)
{// Configure LED-pins as outputsnrf_gpio_cfg_output(LED_0);nrf_gpio_cfg_output(LED_1);// LED 0 and LED 1 blink alternately.while(true){nrf_gpio_pin_clear(LED_0);nrf_gpio_pin_set(LED_1);nrf_delay_ms(500);nrf_gpio_pin_clear(LED_1);nrf_gpio_pin_set(LED_0);nrf_delay_ms(500);}
}

首先是初始化LED控制引脚nrf_gpio_cfg_output,打开此函数所在头文件nrf_gpio.h找到函数nrf_gpio_cfg_output

static __INLINE void nrf_gpio_cfg_output(uint32_t pin_number)
{/*lint -e{845} // A zero has been given as right argument to operator '|'" */NRF_GPIO->PIN_CNF[pin_number] =(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_Connect << GPIO_PIN_CNF_INPUT_Pos)| (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos);
}

NRF_GPIO,PIN_CNF 找到这两个的定义,在nRF51.h中,可以看到NRF_GPIO是一个NRF_GPIO_Type类型的指针,指向NRF_GPIO_BASE地址

#define NRF_GPIO_BASE                   0x50000000UL
#define NRF_GPIO                        ((NRF_GPIO_Type           *) NRF_GPIO_BASE)

在nRF51.h中,主要定义了外设地址映射,nRF51系列的地址映射如下图:

详情见nRF51 Series Reference Manual。
继续分析,NRF_GPIO->PIN_CNF[pin_number]是通过控制PIN_CNF[pin_number]寄存器设置pin_number引脚的状态(有关寄存器信息查阅nRF51 Series Reference Manual)。移位符号<<后的参数是要设置的引脚属性(如GPIO_PIN_CNF_PULL_Pos是设置引脚上拉还是下拉),而<<前的参数是要设置的属性值(如GPIO_PIN_CNF_PULL_Disable是不设置上拉或下拉)。更多有关属性的定义在nrf51_bitfields.h中。同时在nRF51 Series Reference Manual中可以找到引脚属性。
再往下是主循环while(1),nrf_gpio_pin_clear(LED_0)清空LED_0引脚的输出,通过控制OUTCLR寄存器的值

static __INLINE void nrf_gpio_pin_clear(uint32_t pin_number)
{NRF_GPIO->OUTCLR = (1UL << pin_number);
}

nrf_gpio_pin_set(LED_1)同理,然后通过延时实现led交替闪烁。
LED_0定义在boards/pca10001.h中

总结

像nrf_gpio_cfg_output这种函数不知是不是库函数,在nRF51 SDK中并没有找到

nRF51 SDK 例程分析——Blinky Example相关推荐

  1. ESP32——WebSocket Echo Server官方例程分析和测试

    1  简介 开发板为ESP32-DevKitC 程序为官方示例:esp-idf\examples\protocols\http_server\ws_echo_server 创建方法参照:ESP32-- ...

  2. [nRF51822] 3、 新年也来个总结——图解nRF51 SDK中的Button handling library和FIFO library...

    :本篇是我翻译并加入自己理解的nRF51 SDK中按钮相关操作的库和先进先出队列库.虽然是nRF51的SDK,但是通过此文你将更多地了解到在BSP(板级支持)上层嵌入式程序或OS的构建方法. 1.按钮 ...

  3. VB表格控件总览与例程分析

    一.表格控件总览: 在VB开发环境中,表格控件在界面开发元素中占有重要的地位.它不仅有外观整洁.表达形式规范的优点,而且更重要的是它较高的信息表现率(就是相对于其他控件来说能够表达更多的信息),随着信 ...

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

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

  5. 1.3 nuclei sdk Makefile分析

    nuclei sdk Makefile分析 Make 命令 1. 根目录Makefile 2. 源码选择application/baremetal/helloworld Makefile如下 3. 分 ...

  6. Hi3518EV300-venc例程分析

    Hi3518EV300-venc例程分析 前言: MAPI 层业务流程 VENC录像 流程: 1.定义要绑定的VCap,VProc,VENC变量 2.start vcap 3.start vproc( ...

  7. libfranka---joint_impendence_control例程分析

    joint_impedance_control.cpp例程分析 部分内容来自链接,我个人以初学者的角度对代码进行了更加细致的解释. 核心部分: // Set and initialize trajec ...

  8. 短视频美颜sdk人脸编辑技术详解、美颜sdk代码分析

    短视频美颜sdk中人脸编辑技术可以将人像风格进行转变,小编认为这也是未来的美颜sdk的一个重要发展方向,下文小编将为大家讲解一下短视频美颜sdk中人脸编辑的关键点. 一.人脸编辑的细分关键点 1.年龄 ...

  9. nrf52832 学习笔记(二)SDK框架分析

    nrf52832 学习笔记(二)SDK框架分析 个人对SDK框架的一些理解,如有错误欢迎斧正. flash 分区 在不包含DFU的情况下,nrf52832 flash划分为: MBR 0x000000 ...

  10. UART两个例程分析

    UART学习 UART基本概念 在编写具体程序之前,可以先了解下UART大致的概念,之后再在example内寻找例程进行分析.最后再参照手册就可以做出具体的东西了 通用异步收发传输器(Universa ...

最新文章

  1. [20180502]PLDEVELOP与存储过程调试.txt
  2. 微信 Tinker 负责人张绍文关于 Android 热修复直播分享记录
  3. Linux常用命令——压缩与解压缩命令
  4. 关于使用AsyncTaskLoader的使用
  5. HDFS应用场景、部署、原理与基本架构
  6. SAP Customer Data Cloud的Audit log设置
  7. oc基础-self关键字的使用
  8. Sublime Text3—Code Snippets(自定义代码片段)
  9. TCL电子港股暴涨10% 股价创5年新高
  10. linux 6.4 安装oracle10g,Red Hat Linux 6.4 安装 Oracle 10g 及问题解决
  11. 库克:iPhone虽贵但值得购买,相当于每天仅付1美元
  12. 初学 JAVA ,编程实例【人会说话,中国人说中国话,美国人说英语】
  13. Python实现微信机器人——itchat库
  14. web安全的一些专业术语介绍
  15. Windows下的CMake下载与安装
  16. html5经典教程,40个经典HTML5实例教程.pdf
  17. Java:QQ登录页面的制作(实现成功登录的代码)——含源码
  18. 弘辽科技:想要利用直通车打造爆款,这个技巧一定要把握
  19. 阿里巴巴 研发工程师Java暑期实习一面
  20. 前端面试常问的问题(必须掌握)

热门文章

  1. uniapp push推送服务使用指南
  2. win10官方iso下载
  3. 制作好的种子怎么上传服务器,用BT如何上传自己的文件?
  4. CMP是什么意思?谁能解释下?
  5. 【分享-世界著名的免费摄影图库】 素材中国, 高清壁纸 - PxHere摄影图库
  6. linux 下竟有想大白菜软件,大白菜U盘做PE及CDLINUX镜像共存的启动盘.pdf
  7. win10设置中账户点开闪退问题
  8. 原来网站上可以这样嵌套动态google地图
  9. spring boot + websocket 简单实现斗鱼弹幕功能
  10. 人工智能 | ShowMeAI资讯日报 #2022.06.07