分享

nrf51822 入门必备教程(一篇搞定nRF51)

 beginnow1 2022-11-03 发布于广东

微雪 NRF51822 Eval Kit 

开箱检测

部署PC端开发环境

  • nRFgo Studio v1.14或更高版本

  • Keil MDK-ARM Lite v4.54或更高版本

  • J-Link Software v4.52b或更高版本

下载手机端app

  • IOS系统:进入App Store并搜索“nRFToolbox

  • Android系统(4.3或更高):下载nRFToolbox,解压后安装即可

注意:蓝牙4.0和传统蓝牙的开发方法不同,首先需要手机支持蓝牙4.0,并且安装了相应的APP,才可以搜到蓝牙4.0的广播信号

与手机连接(演示蓝牙转串口程序)

a) 安装CP2102驱动

b) 将BLE400的mini USB接口与PC机相连

c) 打开串口调试助手,选择相应的COM口,波特率为38400,8位数据位,1位停止位,点击打开串口

d) 发送字符Yy,如回显Start...则表示蓝牙已经开始发送广播数据,此时可以看到BLE400的LED0亮。

注意:出厂程序的前一部分是模块自检,显示的信息可忽略。

e) 手机端开启蓝牙功能。

f) 打开nRFToolbox,并点击进入UART,单击CONNECT按钮,在列表中选中Nordic_UART,此时BLE400的LED0灭/LED1亮,表明手机与模块连接成功。

g) 按APP上的按钮,在串口上可以收到相应的字符。(APP上的按钮信息需要用户自己定义)

Core51822-01.jpg

h) 点击Show Log,在串口助手中,发送字符串abcdefghijklmnopqrs,在LOG列表中会打印相应的信息。

Core51822-02.jpg

注意:每当蓝牙收到19个字符,在APP上才会回显数据。

程序说明

安装SDK

a) 安装Keil MDK-ARM(v4.54以上)和J-Link for Windows。

b) 保存nRF51 SDK,打开nrf51_sdk_v5_2_0_xxxxx.msi进行安装,并确保选择了KeilMDK-ARM安装选项。

c) 注意:如果SDK安装报错,请下载并安装Microsoft .NET Framework 3.5。

d) 安装nRFgo Studio(32位系统安装nrfgostudio_win-32_1.15.1_installer.msi,64位系统安装nrfgostudio_win-64_1.15.1_installer.msi)。

示例程序下载说明

示例程序下载方法对于不同的程序,有细微的差别。下面两个小节,将用blinky测试程序和ble_app_hrs测试程序为范例,进行下载操作说明。

这两个程序的区别在于:

  • 编译下载blinky测试程序,这个相当于裸机程序,比较简单。下载一个application就能使用。

  • 编译下载ble_app_hrs测试程序,这个可以理解为跑操作系统的程序,需要先下载softdevice,再下载application,才能使用。

编译下载blinky_example测试程序

a) 开发板出厂时已预装程序,下载其他程序之前,需使用nRFgo Studio全部擦除程序。首先点击“nRF51 Programming”,之后点击“Erase all”全部擦除后方可烧写其它程序。


图1. Erase all步骤

b) 在Keil μVision中打开Blinky工程,其路径为: <KEIL path> \ARM\Device\Nordic\nRF51822\Board\PCA10001\blinky_example\arm\blinky.uvproj

或 ...\code\BLE4.0\nrf51822\Board\pca10001\blinky_example\arm\blinky.uvproj

c) 点击Build图标,或者使用快捷键F7编译Blinky工程。

d) 点击Download图标,下载并运行Blinky演示程序。可以看到LED开始闪烁。

NRF51822-Eval-Kit-User-Manual-2.png
图2. 用Keil下载

注意:NRF51822-Eval-Kit-User-Manual-1.jpg

这里可能会出现nrf51.h(119): error:  #5: cannot open source input file "core_cm0.h"报错,解决办法参考后面的常见问题。

由于Jlink固件与nordic SDK配合的问题,部分KEIL无法正常下载。

此时,请使用nRFgo Studio左下的“nRF51 Programming”,之后点击“Program Application”选项框下载。

NRF51822-Eval-Kit-User-Manual-3.jpg
图3. Program Application

编译下载ble_app_hrs测试程序

a) 下载S110 nRF51822 SoftDevice(蓝牙协议栈):

https://download.csdn.net/download/qq648647/86510749

选择nRF51 Programming > Program SoftDevice> Browse(选择相应的蓝牙协议栈) > Program(等待蓝牙协议栈下载完毕)。(我们使用的协议栈文件s110_nrf51822_6.0.0_softdevice.hex,是通过解压\Software\s110_nrf51822_6.0.0.zip得到的。)

NRF51822-Eval-Kit-User-Manual-4.jpg
图4. Program SoftDevice

b) 进入<KEIL path> \ARM\Device\Nordic\nrf51822\Board\pca10001\s110\ble_app_hrs\arm 或<code path>\BLE4.0\nrf51822\Board\pca10001\s110\ble_app_hrs\arm

打开Keil工程文件

c) 按上面的提到的进行编译下载。

各程序功能简介

a) 以下所有程序路径为:<code path>\BLE4.0\nrf51822\Board\pca10001且所有跳线都已连接。

b) 下表中的步骤序号,请参考表格下方的备注栏。

c) 操作涉及步骤②的,下载方法请参考上文“编译下载ble_app_hrs测试程序”。

d) 其他的程序下载方法请参考上文“编译下载blinky_example测试程序”

程序名称操作与主要现象
blinky_exampleLED闪烁
uart_example①,回显串口发送信息
at45dbxx_example①,将AT45DBXX DataFlash Board接到SPI接口

串口将打印该模块的ID

at24cxx_example①,将AT24CXX EEPROM Board接到I2C接口

按开发板的KEY1,串口将打印指定地址的数据

按开发板的KEY2,指定地址的数据加1

button_radio_example\led_radio_example准备两块开发板,分别称之为A和B

开发板A下载button_radio_example

开发板B下载led_radio_example

按下开发板A的KEY1,开发板B的LED0闪烁

按下开发板A的KEY2,开发板B的LED1闪烁

ble_app_beacon②,③,④
ble_app_proximity②,③,④
ble_app_uart①,②,③,④,手机的数据发到串口上

备注: ① 通过数据线将开发板与PC相连,打开串口调试助手,波特率为38400,8位数据位,1位停止位 ② 下载Program SoftDevice ③ 测试软件为:LightBlue(iOS) ④ LightBlue中显示相关信息

表1. 示例程序功能介绍

常见问题

问: nRFgo Studio无法下载,出现报错

This hex file has data in SoftDevice region. Try programming using "Program SoftDevice", or erase all before programming.

  答:这是因为下载的程序地址有冲突,如果没用到蓝牙的程序不需要softdevice协议栈,可以erase all擦除flash后再下载,如果要用softdevice,那么应该是softdevice版本不对,微雪提供的程序例程要用s110_nrf51822_6.0.0_softdevice.hex版本。可以用高版本的功能丰富些,对应的应用程序地址要跟softdevice一致,如下图,softdevice是从0x00开始,接着是应用程序。

问: KEIL无法下载程序?

答: 首先检查系统是否正常供电,之后尝试用nRFgo Studio的nRF51 Prgramming验证一下是否KEIL工程设置问题。

问: 例程编译不通过,报错nrf51.h(119): error:  #5: cannot open source input file "core_cm0.h"

修改包含的头文件路径为..\..\..\..\Include;..\..\..\..\Include\gcc即可   

问: nRFgo Studio可以下载,但KEIL下载报错: Insufficient RAM for Flash Algorithms !

NRF51822-Eval-Kit-User-Manual-5.jpg

NRF51822-Eval-Kit-User-Manual-6.jpg

图5. KEIL下载报错

答: 请确保正确安装SDK,Flash Dodnload设置如下,修改RAM for Algorithms要跟前面IRAM一样:

图6. Flash Dodnload设置

问: 阅读完该手册后,如何进一步学习?

答: 请仔细阅读chip PDF文件夹中相关文档,以及官方提供的参考手册:

示例程序里的BLE4.0\Documentation\index.html。

页面最后有官方提供的参考手册以及程序,可以用浏览器翻译浏览

示例程序里的BLE4.0\Documentation\index.html。

在线版:https://developer./nRF5_SDK/nRF51_SDK_v5.x.x/doc/5.2.0/html/index.html

问:不同版本的SoftDevice有什么区别,如何获取?

答:常见的有以下两个版本,还会有一些特殊版本,可以实现各种你想要的蓝牙功能,所以推荐你下载最新的版本,比如nRF51系列,推荐使用SDK12.3.0(12.3.0已经是nRF51能支持的最高版本SDK了)

  • 比如S110,表示只支持从设备模式的nRF51 BLE协议栈 

  • 比如S130,表示既支持从设备模式又支持主设备模式的nRF51 BLE协议栈

不同sdk,SoftDevice版本获取链接:https://www./Products/Development-software/nrf5-sdk/download#infotabs


nrf51_sdk常用API

IO口控制

#include "boards.h"

#include "nrf51_bitfields.h"

static __INLINE void nrf_gpio_cfg_output(uint32_t pin_number)  //首先初始化IO口

static __INLINE void nrf_gpio_pin_set(uint32_t pin_number)  //IO口开控制

static __INLINE void nrf_gpio_pin_clear(uint32_t pin_number)  //IO口关控制

static __INLINE void nrf_gpio_pin_toggle(uint32_t pin_number)  //IO口开关切换

static __INLINE void nrf_gpio_pin_write(uint32_t pin_number, uint32_t value)  //IO口开关

串口通讯

#include "simple_uart.h"   //加载例程nrf51822\Source\simple_uart.c的文件

simple_uart_config(RTS_PIN_NUMBER, TX_PIN_NUMBER, CTS_PIN_NUMBER, RX_PIN_NUMBER, HWFC);  //一句轻松初始化

void simple_uart_putstring(const uint8_t *str)  //字符串打印,相关API simple_uart.c文件查看

printf打印

//simple_uart.c文件加入此函数

#include "stdio.h"   //keil 设置里勾选MicroLIB 

int fputc(int ch, FILE *f)   

{

  simple_uart_put(ch);

  return (ch);

}


其他有价值的相关链接

Nordic NRF51822 从零开始系列(一)开发环境的搭建

https://blog.csdn.net/Mr_Lyoko/article/details/79506707

Nordic nRF5 SDK和softdevice介绍

https://www.cnblogs.com/iini/p/9095551.html

beautifulzzzz  随笔分类 - 硬件_nRF51822

https://www.cnblogs.com/zjutlitao/category/759832.html

nRF51官方文档及手册

https://infocenter./index.jsp?topic=/struct_nrf51/struct/nrf51.html

nRF51官方SDK文档

https://infocenter./index.jsp?topic=%2Fstruct_sdk%2Fstruct%2Fsdk_nrf5_latest.html

nRF51822之BootLoader

https://blog.csdn.net/qinrenzhi/article/details/88786592

Arduino编译nRF51822,表示不推荐,反正我没搞成功,一直连不上jlink,直接下载编译后的hex也不能成功运行,如果有搞成的留言解答下。

用nRFgo studio 是可以烧写keil的hex文件的,正常运行。貌似需要nRF51822 aduino的BootLoader程序,用了下面几个BootLoader都不行,选择其他板子也试过。

https://github.com/RedBearLab/nRF51822-Arduino/tree/S130/bootloader

https://github.com/redbear/nRF5x/tree/master/nRF51822/arduino/arduino-1.6.x/hardware/RBL/RBL_nRF51822/bootloaders


github资源 nRF51822-Arduino  

https://github.com/sandeepmistry/arduino-BLEPeripheral

https://github.com/RedBear/nRF5x/tree/develop/nRF51822/arduino/

arduino中文社区 nRF51822资源

https://www./thread-92886-1-1.html

带有 Arduino IDE 的 Nordic nRF52840 高级蓝牙 5 – 入门

https:///nordic-nrf52840-advanced-bluetooth-5-arduino-ide/

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多