一、

基础、环境搭建,sdk等仔细看 iini - 博客园​​​​​

基础、环境搭建,sdk等仔细看 iini - 博客园​​​​​

基础、环境搭建,sdk等仔细看 iini - 博客园​​​​​ 

弃用nRFgo studio Nordic NRF51822 从零开始系列(一)开发环境的搭建_闲人-CSDN博客_nrf51822NRFGO STUDIO无法识别板子 – 电子创客营

关于nRF connect遇到的问题

nRF connect for Desktop 配置_MEMORY_2016的博客​​​​​

C:\Users\username\.nrfconnect-apps  username->Administrator apps.json添加

{"pc-nrfconnect-ble": {"displayName": "Bluetooth Low Energy","description": "General tool for development and testing with Bluetooth Low Energy","homepage": "https://github.com/NordicSemiconductor/pc-nrfconnect-ble","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-ble"},"pc-nrfconnect-rssi": {"displayName": "RSSI Viewer","description": "Live visualization of RSSI per frequency for nRF52832","homepage": "https://github.com/NordicSemiconductor/pc-nrfconnect-rssi","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-rssi"},"pc-nrfconnect-ppk": {"displayName": "Power Profiler","description": "App for use with Nordic Power Profiler Kits","homepage": "https://github.com/NordicSemiconductor/pc-nrfconnect-ppk","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-ppk"},"pc-nrfconnect-programmer": {"displayName": "Programmer","description": "Tool for flash programming of nRF SoCs","homepage": "https://github.com/NordicSemiconductor/pc-nrfconnect-programmer","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-programmer"},"pc-nrfconnect-linkmonitor": {"displayName": "LTE Link Monitor","description": "Link monitor and AT command terminal","homepage": "https://github.com/NordicSemiconductor/pc-nrfconnect-linkmonitor","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-linkmonitor"},"pc-nrfconnect-tracecollector": {"displayName": "Trace Collector","description": "Capture nRF91 modem trace","homepage": "https://github.com/NordicSemiconductor/pc-nrfconnect-tracecollector","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-tracecollector"},"pc-nrfconnect-tracecollector-preview": {"displayName": "Trace Collector V2 preview","description": "EXPERIMENTAL: Capture and convert nRF91 modem traces","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-tracecollector-preview"},"pc-nrfconnect-gettingstarted": {"displayName": "Getting Started Assistant","description": "Guide to set up the nRF Connect SDK","homepage": "https://github.com/NordicSemiconductor/pc-nrfconnect-gettingstarted","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-gettingstarted"},"pc-nrfconnect-dtm": {"displayName": "Direct Test Mode","description": "RF PHY testing of Bluetooth Low Energy devices","homepage": "https://github.com/NordicSemiconductor/pc-nrfconnect-dtm","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-dtm"},"pc-nrfconnect-toolchain-manager": {"displayName": "Toolchain Manager","description": "Install and manage tools to develop with the nRF Connect SDK (NCS)","homepage": "https://github.com/NordicPlayground/pc-nrfconnect-toolchain-manager","url": "https://developer.nordicsemi.com/.pc-tools/nrfconnect-apps/pc-nrfconnect-toolchain-manager"}
}

nRF Connect for Desktop下载程序初探_wxlscm的博客-CSDN博客

但是现在还是在nRF connect中无法检测到Jlink

安装nrf-connect 和 nrf-command-line-tools后 添加nrfjprog路径 C:\Program Files\Nordic Semiconductor\nrf-command-line-tools\bin\ 到系统环境变量 PATH (计算机属性->高级->环境变量->PATH)中

cmd中

nrfjprog --eraseall 擦除芯片

nrfjprog --verify --program your_softdevice_hex_file

keil编译下载应用程序

二、

蓝牙串口透传记录

1) 修改nordic串口透传服务为sig标准服务:

首先设置串口透传服务为sig标准服务

#define BLE_UUID_TYPE_BLE           0x01 // Bluetooth SIG UUID (16-bit) ble_types.h
#define NUS_SERVICE_UUID_TYPE           BLE_UUID_TYPE_BLE //main.c
#define NUS_BASE_UUID                  {{0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}//   ble_nus.c              

ble_nus.h 中设置服务uuid

ble_nus.c 中设置uuid of tx rx characteristic

#define BLE_UUID_NUS_TX_CHARACTERISTIC 0xffe1               /**< The UUID of the TX Characteristic. */
#define BLE_UUID_NUS_RX_CHARACTERISTIC 0xffe2               /**< The UUID of the RX Characteristic. */

Nordic的NUS服务工程修改UUID为SIG UUID

2)

nrf52832 sdk 排错定位:

使能RTT LOG

keil添加DEBUG宏在J-LINK RTT VIEWER中可以收到debug打印信息

使能串口不使能RTT可以将debug信息打印至串口

debug排错定位参考

协议栈内存分配不够问题

Insufficient RAM allocated for the SoftDevice with Relay Application - Nordic Q&A - Nordic DevZone - Nordic DevZonex​​​​​​

3)

问题:keil下载程序到nrf52810中后有广播可以正常提供蓝牙服务,断电再上电后无蓝牙服务,keil再下载又有

DEBUG 下在jlink rtt viewer中收到打印debug信息报错位置在:

还有报错信息 NRF_ERROR_DATA_SIZE 12

nordic查找APP_UART_COMMUNICATION_ERROR

APP_UART_COMMUNICATION_ERROR

修改uart rx引脚为上拉,在nrfx_uart.c中修改

nrf_gpio_cfg_input(p_config->pselrxd, NRF_GPIO_PIN_PULLUP);

还是报错,发现uart rx 用的是dma,在nrfx_uarte.c中修改

nrf_gpio_cfg_input(p_config->pselrxd, NRF_GPIO_PIN_PULLUP);

程序运行正常,掉电上电后运行正常。分析问题原因是nordic sdk在初始化串口 rx 时设置nopull

在上电nrf52810时会对 rx 造成干扰,引起 APP_UART_COMMUNICATION_ERROR 报错

参考:

nRF52832频繁打印“APP_UART_COMMUNICATION_ERROR”的问题

nRF52832 频繁进入 app_error_fault_handler 定位方法

4)

上电设置ble fast advertising,设置由快速广播切换到慢速再到sleep

static void advertising_init(void)
{uint32_t               err_code;ble_advertising_init_t init;memset(&init, 0, sizeof(init));init.advdata.name_type          = BLE_ADVDATA_FULL_NAME;init.advdata.include_appearance = false;init.advdata.flags              = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE;init.srdata.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]);init.srdata.uuids_complete.p_uuids  = m_adv_uuids;init.config.ble_adv_fast_enabled  = true;init.config.ble_adv_fast_interval = APP_ADV_INTERVAL;init.config.ble_adv_fast_timeout  = APP_ADV_DURATION;init.config.ble_adv_slow_enabled  = true;init.config.ble_adv_slow_interval = APP_ADV_INTERVAL1;init.config.ble_adv_slow_timeout  = 0;// 0不进入sleep,一直慢速广播;任意非0时间代表慢速广播时长init.evt_handler = on_adv_evt;err_code = ble_advertising_init(&m_advertising, &init);APP_ERROR_CHECK(err_code);ble_advertising_conn_cfg_tag_set(&m_advertising, APP_BLE_CONN_CFG_TAG);
}

ble_nus.c中添加串口透传 rx tx 的 proprietary

// 添加RX特性memset(&add_char_params, 0, sizeof(add_char_params));add_char_params.uuid                     = BLE_UUID_NUS_RX_CHARACTERISTIC;//特性UUIDadd_char_params.uuid_type                = p_nus->uuid_type;//UUID类型add_char_params.max_len                  = BLE_NUS_MAX_RX_CHAR_LEN;//最大的数据长度add_char_params.init_len                 = sizeof(uint8_t);//初始化数据长度add_char_params.is_var_len               = true;//可变数据长度add_char_params.char_props.write         = 1;//写属性add_char_params.char_props.write_wo_resp = 1;//没有回复的写add_char_params.read_access  = SEC_OPEN;//安全级别add_char_params.write_access = SEC_OPEN;err_code = characteristic_add(p_nus->service_handle, &add_char_params, &p_nus->rx_handles);if (err_code != NRF_SUCCESS){return err_code;}// 添加TX特性/**@snippet [Adding proprietary characteristic to the SoftDevice] */memset(&add_char_params, 0, sizeof(add_char_params));add_char_params.uuid              = BLE_UUID_NUS_TX_CHARACTERISTIC;//特性UUIDadd_char_params.uuid_type         = p_nus->uuid_type;//UUID类型add_char_params.max_len           = BLE_NUS_MAX_TX_CHAR_LEN;//最大数据长度add_char_params.init_len          = sizeof(uint8_t);//初始化长度add_char_params.is_var_len        = true;//数据长度可变add_char_params.char_props.notify = 1;//通知add_char_params.read_access       = SEC_OPEN; add_char_params.write_access      = SEC_OPEN;add_char_params.cccd_write_access = SEC_OPEN;//主机描述符

3个设置参数

#define APP_ADV_INTERVAL                40                                          /**< The advertising interval (in units of 0.625 ms. This value corresponds to 25 ms). 快速广播*/
#define APP_ADV_INTERVAL1               80//慢速广播间隔
#define SLAVE_LATENCY                   0 //从机潜伏时间间隔数

5)

蓝牙连接开灯,断开灭灯,在 处理ble event的回调函数中ble_evt_handler

        case BLE_GAP_EVT_CONNECTED:NRF_LOG_INFO("Connected");err_code = bsp_indication_set(BSP_INDICATE_CONNECTED);//led onAPP_ERROR_CHECK(err_code);m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle;err_code = nrf_ble_qwr_conn_handle_assign(&m_qwr, m_conn_handle);APP_ERROR_CHECK(err_code);break;case BLE_GAP_EVT_DISCONNECTED:NRF_LOG_INFO("Disconnected");// LED indication will be changed when advertising starts.bsp_board_led_off(0);//led offm_conn_handle = BLE_CONN_HANDLE_INVALID;break;

6)

关于官方蓝牙透传demo接收完成判断问题:

if ((data_array[index - 1] == '\n') || (data_array[index - 1] == '\r') ||(index >= m_ble_nus_max_data_len))//244字节

是通过接收到回车换行或者接收长度大于244字节来判断接收是否完成

更通用情况修改:

加定时器,超过30ms没接收到数据就判断接收完成

1.定义定时器句柄和超时处理函数

APP_TIMER_DEF(my_timer_id);   //定义timer ID
uint16_t my_timer_ms_count;
bool my_timer_running;
static void my_timeout_handler(void *p_context)
{//add your code heremy_timer_ms_count++;}

2.创建用户定时器

uint32_t err_code = app_timer_create(&my_timer_id, APP_TIMER_MODE_REPEATED, my_timeout_handler);
APP_ERROR_CHECK(err_code);
my_timer_running = false;

3.串口接收event中处理代码,注意这里app_uart_get读取串口数据一定要放在前面,否则接收不到第一个字节

case APP_UART_DATA_READY://串口接收中断,PC发数据给从机UNUSED_VARIABLE(app_uart_get(&data_array[index]));index++;if(!my_timer_running){err_code = app_timer_start(my_timer_id, APP_TIMER_TICKS(10), NULL);APP_ERROR_CHECK(err_code);my_timer_running = true;}my_timer_ms_count = 0;

4.main中循环判断是否接收完成

if ((my_timer_ms_count >= 3) || (index >= m_ble_nus_max_data_len))//244字节{err_code = app_timer_stop(my_timer_id);APP_ERROR_CHECK(err_code);my_timer_running = false;if (index > 1){NRF_LOG_DEBUG("Ready to send data over BLE NUS");NRF_LOG_HEXDUMP_DEBUG(data_array, index);do{uint16_t length = (uint16_t)index;err_code = ble_nus_data_send(&m_nus, data_array, &length, m_conn_handle);//从机数据上传函数if ((err_code != NRF_ERROR_INVALID_STATE) &&(err_code != NRF_ERROR_RESOURCES) &&(err_code != NRF_ERROR_NOT_FOUND)){APP_ERROR_CHECK(err_code);}} while (err_code == NRF_ERROR_RESOURCES);}index = 0;}

7)

添加对串口AT指令AT+ADDR?\r\n的响应

                 if(!strncmp("AT+ADDR?\r\n", (char *)data_array, 10)){for (uint32_t i = 1; i < sizeof(specific_addr); i++){do{err_code = app_uart_put(*((uint8_t *)&specific_addr+i));//PC机打印,主机发过来的数据if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY)){NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code);APP_ERROR_CHECK(err_code);}} while (err_code == NRF_ERROR_BUSY);}}else{do{uint16_t length = (uint16_t)index;err_code = ble_nus_data_send(&m_nus, data_array, &length, m_conn_handle);//从机数据上传函数if ((err_code != NRF_ERROR_INVALID_STATE) &&(err_code != NRF_ERROR_RESOURCES) &&(err_code != NRF_ERROR_NOT_FOUND)){APP_ERROR_CHECK(err_code);}} while (err_code == NRF_ERROR_RESOURCES);}memset(data_array, 0, BLE_NUS_MAX_DATA_LEN);

比较函数strstr改为strncmp,严格对比

添加清BUFF函数,避免意外如第一次发AT_ADDR?\r\n第二次发AT+ADD也能读mac

mac地址设置 服务名设置 等 待补充

nrf51822 52832学习汇总相关推荐

  1. stm32怎么加载字库_收藏 | STM32单片机超详细学习汇总资料(二)

    点击"蓝字"关注我们 3110月 收藏 | STM32单片机超详细学习汇总资料(一) ◆41.DMA仲裁器分为软件和硬件两种.软件部分分为4个等级,分别是很高优先级.高优先级.中等 ...

  2. 【C++学习汇总】【黑马程序员】

    [C++学习汇总] 1 黑马程序员 2 深蓝学院 3 自发式收集学习 1 黑马程序员 [C++][第一篇][黑马 p84 - p105 ][引用][重载][类和对象-struct.class] [C+ ...

  3. Java基础学习汇总

    Java基础学习汇总 java语言基础 java函数和数组 java面向对象 java异常 整理用,早就停更... 写作不易,如果您觉得写的不错,欢迎给博主点赞.收藏.评论.收藏来一波~让博主更有动力 ...

  4. 蓝牙芯片NRF51822入门学习:时间管理

    前言 如果你跟我一样是一个蓝牙新手,并且还没有买nrf51822的开发板的话,推荐先学cc2541,如果已经买了开发板,那就看我的<蓝牙芯片NRF51822入门学习>系列文章吧,祝你尽早出 ...

  5. 【廖雪峰Java入门】学习汇总

    [廖雪峰Java入门]学习汇总 一.快速入门 1. 基本概念 2. 语言基础 3. 流程控制 4. 数组操作 二.面向对象编程 1. 面向对象基础 2. Java核心类 三.The End 网址:Ja ...

  6. nRF51822 TWI学习

    由于nRF51822与模块之间通过IIC总线通信,在解决问题的时候学习了TWI,现在将其总结一下. TWI(Two-wire interface),即两线通信接口,也就是我们平时常说的IIC接口. I ...

  7. Java学习第七天 ———— 第一周学习汇总(粗略)

    Java学习第七天 ---- 第一周学习汇总 第一章Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大 ...

  8. 自我学习汇总:SpringBoot篇

    自我学习汇总:SpringBoot篇 什么是SpringBoot?为什么要用SpringBoot? SpringBoot是一款基于Spring的轻量化技术框架,SpringBoot便于搭建环境,省略了 ...

  9. 学习经验总结(2)xjview学习汇总,一个看脑激活结果的好工具。

    [转载]学习经验总结(2)xjview学习汇总,一个看脑激活结果的好工具. (2014-08-09 15:57:09) 转载▼ 标签: 转载 分类: fMRI-EEG 原文地址:学习经验总结(2)xj ...

最新文章

  1. Python 33(1) UDP协议 数据报协议 socketsever模块
  2. 企业实战案例02_Jenkins_连接远程GitLab拉取代码
  3. python开发-常见面试题
  4. spring之初识IocAop
  5. 代码整洁之道读书笔记----第一章---综述--第一节-混乱代码和华丽的新系统
  6. 腾讯云短信 Node.js SDK
  7. 同济线性代数教材(第五版)-第1章 行列式
  8. 小米路由器mini刷lede_小米路由3刷LEDE/OpenWrt 固件
  9. 实验吧:欢迎来到地狱
  10. BERT简介及中文分类
  11. Macbook pro通过蓝牙连接BlackBerry拨号上网
  12. Linux Shell 极简教程:一个例子
  13. 量化框架backtrader之一文读懂Indicator指标
  14. 阿里云ODPS升级为一体化大数据平台 满足用户多元化数据计算需求
  15. Excel拆分合并数据,使用vb编程,效率提高50倍
  16. 北师大 外国教育史-6(新教育运动)
  17. 【信息安全技术】实验报告:木马及远程控制技术
  18. 音频电平vu显示表软件下载_正点原子开拓者 Nios II资料连载第十章MCU TFT-LCD图片显示实验...
  19. 【XAI】Nettack IG-JSMA
  20. 球半篮球分析,NBA总决赛第四场:顿凯尔特人VS勇士

热门文章

  1. django框架中嵌入容联云sdk实现短信发送接口
  2. 使用线程实现电子时钟
  3. 安装opencv3.4遇到Download: opencv_ffmpeg.dll、ippicv等失败的解决方法
  4. 维护一个大型开源项目,例如vscode是怎样的体验?
  5. 如何在 Linux 中使用 Calibre 将 PDF 文件转换为 EPUB 格式?
  6. CSS3选择器(全)
  7. Qt连接MySql数据库(本地和远程数据库均可)
  8. visio的使用技巧
  9. 极速office怎么才能自定义PPT幻灯片大小
  10. 在线教育20年:在线教育的未来发展趋势