文章目录
一、nRF51822芯片介绍
低功耗蓝牙和2.4 GHz SoC。nRF51822是一款通用的超低功耗SoC,非常适合Bluetooth®低功耗和2.4 GHz专有无线应用。它基于具有256/128KB闪存和32/16KB RAM的32位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进行软件包的下载,但是我下载不了就用这个方法了。
2、选择设备
3、配置JLINK
三、nRFgo的下载
nRFgo用于设备的烧录,当然也可以直接用jlink把协议栈、应用程序和bootloader烧录进去,但官方软件相对来说更加专业和好用。
打开的烧录页面如下:
烧录的地址顺序为:
四、蓝牙协议栈
协议栈的文档和下载地址:
蓝牙外围协议栈S110
蓝牙外围协议栈S120
蓝牙外围协议栈S130
下面说明几个协议栈的适用方向:
(一)、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), \