蓝牙芯片nRF51822开发系列(一):环境搭建和GPIO使用(点亮LED)
前言(文章末尾获取工程源码)
nRF51822是一款性价比较高的低功耗蓝牙(BLE)SoC,搭载ARM Cotex-M0内核,拥有丰富的外设:UART、I2C、SPI、8位可配置的ADC等等,可以满足大多数近距离无线通信的需求。但唯一不太好的地方是开发难度相对过高,对新手入门很不友好。
一、开发必备
需要准备以下工作:
- ARM MDK Version 5,并从官网(https://www.keil.com/dd2/pack/)下载芯片支持包和安装;
- nRFgo Studio,用于下载程序;
- nRF51系列SDK开发工具,可从Nordic官网下载,如下图
二、开发环境搭建
1.创建文件
创建新的文件夹,其中component是SDK压缩包解压后的文件。config文件里面是sdk_config.h文件,是从SDK中examples复制过来(可以搜索一下查找)。Users是MDK工程存放的文件夹。
2.新建工程
选择芯片型号。
如图所示,选中CORE内核文件和Startup启动文件。 最简单的工程如下图所示。
三、编写代码
GPIO详解
nrf_gpio.h库文件内有对GPIO的详细介绍,下面列举几个主要的函数。
//输入输出
typedef enum
{
NRF_GPIO_PIN_DIR_INPUT = GPIO_PIN_CNF_DIR_Input, ///< Input.
NRF_GPIO_PIN_DIR_OUTPUT = GPIO_PIN_CNF_DIR_Output ///< Output.
} nrf_gpio_pin_dir_t;
//上拉下拉
typedef enum
{
NRF_GPIO_PIN_NOPULL = GPIO_PIN_CNF_PULL_Disabled, ///< Pin pull-up resistor disabled.
NRF_GPIO_PIN_PULLDOWN = GPIO_PIN_CNF_PULL_Pulldown, ///< Pin pull-down resistor enabled.
NRF_GPIO_PIN_PULLUP = GPIO_PIN_CNF_PULL_Pullup, ///< Pin pull-up resistor enabled.
} nrf_gpio_pin_pull_t;
//输入输出初始化配置
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_pin_set(uint32_t pin_number);
void nrf_gpio_pin_clear(uint32_t pin_number);
void nrf_gpio_pin_toggle(uint32_t pin_number);
//读输入输出电平
uint32_t nrf_gpio_pin_read(uint32_t pin_number);
uint32_t nrf_gpio_pin_out_read(uint32_t pin_number);
使用的开发板介绍
本次使用的是某宝上带LIS3DH三轴加速度传感器的最小系统板,原理图大概如下(真正的原理图并没有提供)
编写主函数
由上面的原理图可知,P0.07管脚连接LED。
#include "nrf_delay.h"
#include "nrf_gpio.h"
#define LED 7
int main(){
nrf_gpio_cfg_output(LED);
nrf_gpio_pin_clear(LED); //输出低电平
while(1){
nrf_gpio_pin_toggle(LED); //翻转电平
nrf_delay_ms(1000);
}
}
引入头文件路径
编写完主函数后,会发现编译报错,是因为没有引入头文件路径。将头文件路径引入,如下图。 并设置宏定义,如下图 最后编译通过,创建了HEX文件。
四、下载程序
J-Link的SW方式连接开发板和PC,打开nRFgo Studio。
- 点击nRF5x Programming;
- 点击Erase all清空存储器;
- 选择hex文件;
- 下载
下载成功!
五、源码获取
关注公众号,查看相关文章获取源码
|