IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> nrf52840芯片入门 -> 正文阅读

[嵌入式]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);
  }
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 09:00:42  更:2021-11-26 09:02:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/8 4:55:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码