nRF51 SDK 例程分析——Blinky Example
来源:互联网 发布:求100以为的质数 java 编辑:程序博客网 时间:2024/06/05 23:43
本人采用的是WaveShare的BLE400扩展板和Core51822核心板链接,例程中的Evaluation Board PCA10001上的程序可以完全不加修改移植到此板上。
功能
顾名思义,此例程的功能就是两个灯交替闪烁。
源码分析
首先从main()函数看起
int main(void){ // Configure LED-pins as outputs nrf_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
- CC3200学习——blinky资料
- AddGesture增添手势——例程分析
- USB的“JoyStickMouse”例程分析——学习笔记(2)__例程结构分析+芯片的接口
- Android SDK Simple 例程分析之 ApiDemos 的 ApiDemos.java 分析
- Flex——example
- NRF51-SDK的低功耗蓝牙广播包的单通道扫描实现
- 浅谈msp430f5529入门(2)——时钟配置、例程分析
- quartus时序分析文档理解与翻译(2) ——一个设置约束的例程
- USB的“JoyStickMouse”例程分析——学习笔记(1)__目录
- USB的“JoyStickMouse”例程分析——学习笔记(3)__初始化过程
- USB的“JoyStickMouse”例程分析——学习笔记(4)__枚举过程
- BluetoothChat 例程分析
- QML-计算器例程分析
- KSDK USB 例程分析
- 注入例程分析
- SD 例程——VOFM
- 数据结构例程——哈夫曼树
- php基础函数
- Android中跳转到相应的系统界面
- 今天是五四青年节,我的博客开通啦!
- 使用volley请求数据,Gson解析json的时候出现中文乱码问题
- C# 入门(13) 泛型(generic)、协变(convariance)、逆变(contravariance)
- nRF51 SDK 例程分析——Blinky Example
- 遇到16进制0x00 AES 128 加密不了的问题
- ADC电路设计详解
- Permutations
- 使用Jmeter进行http接口测试
- 清除浮动
- Linux环境变量配置总结
- java连接mysql数据库java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
- js替换字符