nRF51822蓝牙开发

一、nRF51822芯片介绍

低功耗蓝牙和2.4 GHz SoC。nRF51822是一款通用的超低功耗SoC,非常适合Bluetooth®低功耗和2.4 GHz专有无线应用。它基于具有256/128KB闪存和32/16KB RAM32位ARM®Cortex™-M0CPU构建。灵活的2.4 GHz无线电支持蓝牙低功耗和2.4 GHz专有协议,例如Gazell。它集成了丰富的模拟和数字外设,可以通过可编程外设互连(PPI)系统直接进行交互,而无需CPU干预。灵活的GPIO使您可以将SPI主/从,TWI主和UART等数字接口连接到设备上的31个GPIO中的任何一个

资源:

  • 16 MHz Cortex-M0
  • 256/128 KB闪存,32/ 16 KB RAM
  • 2.4 GHz收发器
  • 2Mbps,1 Mbps,250 kbps
  • 蓝牙低功耗+4 dBm TX功率
  • 128位AES CCM
  • UART,SPI,TWI
  • 10位ADC

其他资料如下:

产品介绍

产品规格书

二、Keil环境搭建

1、下载软件包

在这里插入图片描述

也可以下载下面的SDK进行软件包的下载,但是我下载不了就用这个方法了。

nRF5 SDK

2、选择设备

在这里插入图片描述

3、配置JLINK

在这里插入图片描述
在这里插入图片描述

三、nRFgo的下载

nRFgo用于设备的烧录,当然也可以直接用jlink把协议栈、应用程序和bootloader烧录进去,但官方软件相对来说更加专业和好用。

nRFgo Studio下载链接

打开的烧录页面如下:

在这里插入图片描述
烧录的地址顺序为:
在这里插入图片描述

四、蓝牙协议栈

关于蓝牙协议的文章

协议栈的文档和下载地址:
蓝牙外围协议栈S110
蓝牙外围协议栈S120
蓝牙外围协议栈S130

官方SoftDevice(协议栈)说明文档

下面说明几个协议栈的适用方向:

(一)、S110

在这里插入图片描述

S110是用于nRF51系列的Bluetooth 4.1认证的外围协议栈。

  • 作为外围设备和广播器的并发链接
  • 可配置的ATT表
  • 隐私协议 1.1
  • 安全模式1 - 1、2和3级
  • 支持自定义UUID
  • 支持具有 2.4GHz专有协议的并发多重协议

简单来说就是S110是针对外围设备(终端节点)的协议栈,也就是说只能广播,不能扫描,用于从设备。

不同版本的协议栈所占用的大小不用,如当前最新版本s110_nrf51_8.0.0为例(数据来自于官方文档),Application项目部分ROM和RAM起始地址设置如下:

在这里插入图片描述

在这里插入图片描述

具体所需内存的值还要根据你所选择的功能决定,上图所示值仅仅是默认值,下面的协议栈同理。

(二)、S120

在这里插入图片描述
S120是用于nRF51系列的Bluetooth 4.1认证的中央或外围协议栈。

  • 作为充当观察者的中心设备或者充当广播员的外设的8个并发链接
  • 可配置的ATT表
  • 隐私协议1.1
  • 安全模式1 - 1、2和3级
  • 支持自定义UUID
  • 支持具有 2.4GHz专有协议的并发多重协议

简单来说就是S120是针对中心设备的协议栈,就是说可以扫描,用于主设备。

当前最新版本s120_nrf51_2.1.0所占大小为:

在这里插入图片描述

(三)、S130

在这里插入图片描述

S130是nRF51系列的蓝牙4.2认证的中央和外围协议栈

  • 作为中心设备的观察者和外围设备的广播员的8个并发链接
  • 可配置的ATT表
  • 隐私协议1.1
  • 安全模式1 - 1、2、3和4级
  • 支持自定义UUID
  • 支持具有 2.4GHz的专有协议的并发多重协议
  • LE安全连接

S130即可作为主设备,又可作为从设备。

当前最新版本s130_nrf51_2.0.1所占大小为:

在这里插入图片描述

五、串口透传例程

该程序可以通过下载nRF_SDK下载nRF_SDK说明文档来获取,下载不了的话可以采用科学上网工具。

下面我大概说一下配置的地方。

(一)、应用程序定时器(心跳)初始化

该函数原型为APP_TIMER_INIT(PRESCALER, OP_QUEUES_SIZE, SCHEDULER_FUNC) 。
它是一个宏定义,用于定义RTC1定时器的预分频值PRESCALER、持有挂起执行的计时器操作的队列的大小OP_QUEUES_SIZE和是否开启指向调度程序事件处理程序的指针。

#define APP_TIMER_INIT(PRESCALER, OP_QUEUES_SIZE, SCHEDULER_FUNC)                                  \
    do                                                                                             \
    {                                                                                              \
        static uint32_t APP_TIMER_BUF[CEIL_DIV(APP_TIMER_BUF_SIZE((OP_QUEUES_SIZE) + 1),           \
                                               sizeof(uint32_t))];                                 \
        uint32_t ERR_CODE = app_timer_init((PRESCALER),                                            \
      
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值