nrf52840芯片入门
nRF52840是NORDIC公司基于ARM Cortex-M4 CPU和浮点计算单元(FPU)设计的单片机,具有1MB闪存和256kB RAM。主频速率可以达到64MHz,
无线特性:
(1)数据速率:蓝牙5: 2 Mbps/ 1 Mbps/500 kbps/ 125 kbps
(2)发射功率:可編程:从+8 至 -20 dBm,每步4 dB
(3)接收灵敏度:蓝牙5: 125 kbps 时-103 dBm 1Mbps 时-95 dBm
封装特性:
带有48个GPIO的7 x 7 aQFN73
带有48个GPIO的3.5 × 3.6 WLCSP94
关于nrf52840的详细介绍可以参考官网介绍https://www.nordicsemi.com/Products/nRF52840。
一、协议栈
在使用Nordic 芯片的时候一般都会使用 Nordic 协议栈, 因此评估的时候一定要把协议栈占用的资源扣除, 然后再评估剩下的资源够不够用。
Nordic协议栈,是预编译的二进制文件,并不依赖运行时(runtime)。兼容nrf52840的协议栈有S140和S340
S140是用于nRF52840 SOC的完整蓝牙5协议栈
S340是用于nRF52840 SOC并且结合了蓝牙5和ANT的协议栈
此外,S132协议栈也可适用于nRF52840。
二、蓝牙工程包SDK
由于 nordic Semiconductor 的低功耗蓝牙芯片 NRF52 系列的协议栈是不开源的, 为了鼓励开发者快速进行 nrf52 系列单片机的开发, 节省对基础硬件寄存器的操作的程序编写时间, 使开发者方便快速的编写程序, 官方提供专业的 SDK 工程开发包。
SDK 全程为软件开发工具包(英文全称: Software Development Kit) , 是nordic Semiconductor 设计的为特定的软件包、 软件框架、 硬件平台、 操作系统等建立应用软件时的开发工具的集合。
2.1、SDK开发包的基本结构
官方 SDK 可以在其官网免费下载,下载的网址为:https://www.nordicsemi.com/Products/nRF52840/Compatible-downloads?lang=zh-CN打开官方 SDK 文件包 nRF5_SDK_17.1.0_ddde560, 出现如下图所示的文件夹
2.1.1、components 文件夹
该文件夹存放的是各类驱动、 蓝牙协议栈、 芯片库程序等文件, 是 SDK 的核心部分, 具体说明如下:
802_15_4 文件夹: IEEE 802.15.4 无线通信协议, 该协议栈用于低速无线个人域网(LR-WPAN)的物理层和媒体接入控制层规范。 支持两种网络拓扑, 即单跳星状或当通信线路超过 10 m 时的多跳对等拓扑。 这个协议栈只能使用在 nrf52840 的芯片。
ant 文件夹: nrf52840 系列处理器在蓝牙 5.x 基础上添加了 ANT+的功能, ANT+是运动领域内最通用最普及的无线传输协议。 该协议栈也是以 2.4G 通信为基础的, 本文件夹为官方提供的关于ANT+的驱动文件。
ble 文件夹: ble 蓝牙协议相关的文件, 对接协议栈 softdevice 提供的 API 接口的驱动函数库。编写蓝牙应用的核心部分。
boards 文件夹: 对应的开发板头文件定义, 定义了诸如 nrf51 和 nrf52 的各类开发板的头文件。
device_ext 文件夹: 第三方传感器文件, 一些外接传感器的驱动文件。 比如 mpu6050、 ds1624等的驱动文件。
device_nrf 文件夹: 处理器硬件外设的驱动。 老版本里包含了比如时钟、 串口等外设驱动,新版本 SDK15 把这部分分离到 modules 文件夹中了, 所以这里面只剩下部分驱动, 读者可以直接调用编程。
iot 文件夹: Internet of Things 的缩写, 物联网的一些驱动文件库。
libraries 文件夹: 外设应用的库文件。 以上面 device_nrf 文件和 modules 文件夹为基础来编写的二级应用驱动。 比如串口, PWM, 校验等应用的驱动文件。
nfc 文件夹: NFC 的驱动文件库。
propertary_rf 文件夹: 2.4G 应用的配置文件, nrf5x 系列处理器兼容普通的 2.4G 的通信协议。
serialization 文件夹: 该文件夹主要提供了一下公共配置文件, 包括协议栈不同版本需要使用的配置文件。
softdevice 文件夹: 协议栈的说明文档以及对应 hex, 不同的版本的协议栈的 hex 文件, 以及相关说明文档, 还有相关的头文件。 说明文档对各个版本的协议栈对应程序所需要的 ROM 大小有明确说明:
toolchain 文件夹: 提供给不同开发环境使用的配置文件。 可以用于开发 nRF5x 系列处理器的开发环境包括: keil、 acc、 iar 等环境需要的配置文件。
2.1.2、config 文件夹
Config 文件夹提供开发环境以及库函数的配置, 程序里主要需要使用的是 sdk_config.h 函数, 这个函数在提供一个芯片配置使能模板,
documentaion 文件夹打开后, 里面提供一个 index.html 的网页引导文件。 点开这个文件就可以打开官方对整个 SDK 支持包的说明网站, 说明文档包含了各个函数定义以及官方例程的简介说明, 特别是对应协议栈函数和库函数,
2.1.3、example 文件夹
example 文件夹内包含了官方提供给开发者的应用实例, 通过参考官方的演示实例, 便于开发者快速的开发出自己的应用。 文件夹中根据不同的类型, 把例子分为了多个文件夹:
802_15_4:提供的 nrf52840 的 802_15_4 通信应用实例。
ant:该文件夹提供多个 ANT+通信的应用实例。
ble_central:该文件夹提供多个蓝牙 BLE 主机的应用实例。
ble_central_and_peripheral: 该文件夹提供蓝牙主从一体的应用实例。
ble_peripheral: 该文件夹提供多个蓝牙 BLE 从机的应用实例。
connectivity: 蓝牙直接连接方式的几个测试代码。该文件提供定义官方开发工具的 IO 管脚分配的文件。
dfu: 该文件夹内提供官方 dfu 的 bootloader 工程和 dfu 的演示实例。
dtm: Direct Test Mode, 也就是直接连接测试模式的演示实例。
multiprotocol:混合协议的演示实例。
nfc:提供的 nfc 的演示实例。
peripheral: 该文件夹提供多个 nrf51822 外部设备的应用实例。
Proprietal_rf:2.4G 通信下的演示实例。
Usb_driver:usb 驱动设备声明。
2.1.4、external 文件夹和 external_tool 夹
external 文件夹打开后, 里面包含一些第三方的驱动文件夹。
External_tool 工具包, 放置一些外部工具包, 目前该文件夹里只包含了 CMSIS 的配置向导。
2.2: SDK外设例子和蓝牙例程说明
2.2.1、外设硬件例子
在官方 sdk 中, 外设硬件实例在nRF5_SDK_15.0.0_a53641a/examples 这个文件夹内, 这个文件夹里包含了 nrf5x 系列芯片的硬件外设各种驱动代码实例, 非常丰富, 对我们编写外设代码是一个很好的参考, 基本能够解决我们绝大多数需求。 其中我们打开一个例子 blinky进行说明。打开 sdk 工程 examples/peripheral/blinky
Hex 文件夹: 官方提前发的工程 hex 文件, 可以直接下载。
pca… 文件夹: 提供的是各个芯片 nrf52840 的芯片支持工程, 需要使用的 相应芯片的外设可以打开这个工程。
main.c 文件: 工程的主函数, 工程主函数是几个芯片公用的, 这样非常方便不同芯片之间的移植
我们使用的是 nrf52840,打开 pca10040 工程里的 blank 文件夹,会出现多个工程目录:
arm5_no_packs:keil5 的工程文件包。
armgcc:gcc 的编译支持文件。
config: nrf52840 的配置文件。
iar:IAR 的工程文件包。
ses:segger embedded studio 的工程文件包。
2.2.2 蓝牙例子说明
Nrf52840 芯片实际上是多协议芯片, 我们主要关心其中的蓝牙部分。 蓝牙实例包含三个部分,
ble_central : 主机设备实验
ble_perpheral: 从机设备实验
ble_central_and_perpheral: 主从一体实验, 作为中继节点使用
工程内部的分布和布局和前面的外设部分相同, 可以参考前面的说明。
2.3、基于蓝牙工程包 SDK 的开发环境 keil建立
关于 KEIL MDK 的 pack包的安装。直接 到 MDK 官 方 网 站 上 去 下 载 Pack 支 持 包 , 点 击 安 装 包 的 网 站 地 址 :http://www.keil.com/dd2/Pack/找到nordic Semiconductor的支持包。
三、GPIO应用
GPIO 称为输入输出端口, 根据封装最大具有 32 个 I/O 口, 可以通过 P0 这样一个端口访问和控制多达 32 个端口。 而且每个端口都可以独立访问。 GPIO 可以通过寄存器配置来进行控制。 GPIO 端口的控制十分简单, 官方提供了一个库,对寄存器进行了封装。 我们可以很简单的进行调用。
3.1、结构体和枚举
3.1.1、 nrf_gpio_port_dir_t
nrf52840 官方提供的库函数编程, 可以在"nrf_gpio.h库文件中找到设置 IO 口方向的枚举类型 nrf_gpio_port_dir_t
/** @brief Pin direction definitions. */
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;
GPIO_PIN_CNF_DIR_Input的定义在nrf51_bitfields.h文件内
/* Bit 0 : Pin direction. */
#define GPIO_PIN_CNF_DIR_Pos (0UL)/*!< Position of DIR field. */
#define GPIO_PIN_CNF_DIR_Msk (0x1UL << GPIO_PIN_CNF_DIR_Pos)/*!< Bit mask of DIR field. */
#define GPIO_PIN_CNF_DIR_Input (0UL)/*!< Configure pin as an input pin. */
#define GPIO_PIN_CNF_DIR_Output (1UL)/*!< Configure pin as an output pin. */
3.2、库函数
3.2.1、nrf_gpio_cfg 函数
GPIO 管脚的配置参数都在库函数中封装了一个 nrf_gpio_cfg 函数, 该函数就是来配置 PIN_CNF[n]寄存器的, 通过调用这个函数容易就配置出 GPIO 的端口状态, 代码如下所示:
__STATIC_INLINE void nrf_gpio_cfg(uint32_t pin_number,nrf_gpio_pin_dir_t dir,nrf_gpio_pin_input_t input,nrf_gpio_pin_pull_t pull,nrf_gpio_pin_drive_t drive,nrf_gpio_pin_sense_t sense)
{NRF_GPIO_Type * reg = nrf_gpio_pin_port_decode(&pin_number);reg->PIN_CNF[pin_number] = ((uint32_t)dir << GPIO_PIN_CNF_DIR_Pos)| ((uint32_t)input << GPIO_PIN_CNF_INPUT_Pos)| ((uint32_t)pull << GPIO_PIN_CNF_PULL_Pos)| ((uint32_t)drive << GPIO_PIN_CNF_DRIVE_Pos)| ((uint32_t)sense << GPIO_PIN_CNF_SENSE_Pos);
}
3.2.2、nrf_gpio_cfg_output函数
GPIO 的输出函数:
__STATIC_INLINE void nrf_gpio_cfg_output(uint32_t pin_number)
{nrf_gpio_cfg(pin_number,NRF_GPIO_PIN_DIR_OUTPUT,NRF_GPIO_PIN_INPUT_DISCONNECT,NRF_GPIO_PIN_NOPULL,NRF_GPIO_PIN_S0S1,NRF_GPIO_PIN_NOSENSE);
}
3.2.2、nrf_gpio_cfg_input函数
GPIO 的输入函数:
__STATIC_INLINE void nrf_gpio_cfg_input(uint32_t pin_number, nrf_gpio_pin_pull_t pull_config)
{nrf_gpio_cfg(pin_number,NRF_GPIO_PIN_DIR_INPUT,NRF_GPIO_PIN_INPUT_CONNECT,pull_config,NRF_GPIO_PIN_S0S1,NRF_GPIO_PIN_NOSENSE);
}
3.2.3、NRF_GPIO_PIN_MAP函数
/** @brief Macro for mapping port and pin numbers to values understandable for nrf_gpio functions. */
#define NRF_GPIO_PIN_MAP(port, pin) (((port) << 5) | ((pin) & 0x1F))
四、点亮 LED 灯
一个低电平点亮LED灯的demo:
#include "nrf52840.h"
#include "nrf_gpio.h"
#include "led.h"
#define LED_0 NRF_GPIO_PIN_MAP(0,13)
void LED_Init(void)
{nrf_gpio_cfg_output(LED_0);
}void LED_Open(void)
{nrf_gpio_pin_clear(LED_0);
}void LED1_Close(void)
{nrf_gpio_pin_set(LED_0);}
void LED1_Toggle(void)
{nrf_gpio_pin_toggle(LED_0);
}int main(void)
{LED_Init();while(true){LED1_Open();nrf_delay_ms(500); LED1_Close();nrf_delay_ms(500);}
}
nrf52840芯片入门相关推荐
- FLASH芯片入门资料 原装片与黑白片的区别(转贴)
FLASH芯片入门资料 原装片与黑白片的区别(转帖) 闪存的级别标准是由闪存芯片厂商制订的,目前国内没有国家标准. 最优秀的是A+级,然后是A级和B级.在读写次数/速度.功耗等方面,同种规格的A+ ...
- nRF52840芯片全面支持蓝牙 5.0
随着蓝牙版本的不断更新,大部分用户都倾向于蓝牙5.0.2018年3月28日,Nordic Semiconductor发布了nRF52840低功耗蓝牙系统级芯片(SoC)产品, 这是同级领先的nRF52 ...
- c语言烧录芯片,入门扫盲!芯片程序的烧录过程,没想象那么难跟着走就行!...
大家好!之前就说过从上个月起,创客e工坊在原本讲解电路知识的基础上会逐渐加入单片机的教程. 并且也如约出了三期的单片机视频:什么是单片机:C语言如何控制单片机:单片机小制作自动加湿器: 那么,今天我们 ...
- 甲基化芯片入门学习-基础知识(一)
基本概念梳理 什么是DNA甲基化 DNA甲基化是表观遗传学的中最为常见的一种修饰,其主要形式包括:5-甲基胞嘧啶 (5-mC).少量的N6-甲基腺嘌呤 (N6-mA) 以及7-甲基鸟嘌呤(7-mG). ...
- nRF52840低功耗蓝牙模块芯片
nRF52840是一种先进的.高度灵活的单芯片解决方案,适用于当今要求越来越高的ULP无线应用程序,用于我们个 人的连接设备.连接的生活环境和一般的物联网.它的设计为蓝牙5的主要功能进步做好准备,并利 ...
- 一款强大的芯片nRF52840及利用蓝牙5.0实现数据远程采集
一.nRF52840蓝牙芯片简介 自从nordic在2018年强势推出nRF52840这颗重磅级芯片后,蓝牙5.0技术开始在业界流行起来,随后蓝牙5.0技术开始成为了各大品牌的旗舰手机标配功能. 1. ...
- 好书推荐:21天入门 低功耗蓝牙5.x开发
低功耗蓝牙5 及其后续版本围绕物联网创新应用而不断更新迭代,如何高效的学习低功耗蓝牙5 相关知识,并通过实践来掌握其开发方法,是广大学子和开发人员非常感兴趣的内容.作为低功耗蓝牙技术在国内最早推广及应 ...
- 【学习笔记】人类为什么最终选择了芯片
备注:李铁夫老师的芯片入门常识学习笔记,整理总结,个人学习收藏使用,请CSDN管理员高抬贵手,万分感谢. 人类为什么最终选择了芯片 1822年--巴贝奇发明了机械计算机,能实现精度达到6位小数的运算. ...
- 【转载】单片机入门经验
随着岁月的增长,我学的越来越深,实验也越做越多,我对单片机的了解也越来越深刻.这样心中就会有越来越多的想法. 2004年,12月份,一次偶然的机会,触发了我一年的奋斗的开始. 某一天,我在本地一个准二 ...
- “困”在芯片里的小米、OV,为何集体踏上 ISP 芯赛道?
本文转载自IT之家 过去十多年,中国的手机厂商们借高通和联发科的 SoC 芯片,推动了智能手机的普及,同时也跻身全球手机行业的前列.然而,随着手机市场竞争的加剧,以及消费者对手机使用体验的更高追求,通 ...
最新文章
- 非线性优化:徒手实现LM算法
- 调整图像- 自动对比度、自动色阶算法
- MSM8225 thermal设计
- R树 mysql_为什么MySQL使用B+树作为索引
- Base64Util 用户名和密码Base64编码Java代码
- Working with FBX SDK (2)
- BeanUtils自定义转换器
- 如何在生产中检测和诊断慢速代码
- 实现推拉ui样式_这推拉门隔断,我从没见过!直角设计同时划分3大功能区,太牛了...
- JDBC操作(基础篇)
- Python+django网页设计入门(7):常用ORM操作
- directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
- 求2020 CFA二级notes资源,谢谢!
- Asp.Net Core 系列教程 (一)
- java tic tac toe_Tic Tac Toe java
- Google Chrome崩溃图片
- 企业开源办公虚拟专用网工具
- 案例3-数据驱动测试-从excel导入数据
- 从Java 9 到 Java 17之Java 11
- python练习实例——水仙花数判断