【N32WB03x SDK使用指南】

news2024/11/28 2:41:35

【N32WB03x SDK使用指南】

  • 1. 简介
    • 1.1 产品简介
    • 1.2 主要资源
    • 1.3 典型应用
  • 2. SDK/开发固件文件目录结构
    • 2.1 doc
    • 2.2 firmware
    • 2.3 middleware
    • 2.4 utilities
    • 2.5 projects Projects
  • 3. 项目配置与烧录
    • 3.1 编译环境安装
    • 3.2 固件支持包安装
    • 3.3 编译环境配置
    • 3.4 编译与下载
    • 3.5 BLE工程目录结构
  • 4 Memory分配
    • 4.1 Flash分配
    • 4.2 RAM
  • 5. 系统时钟
    • 5.1 不带蓝牙协议栈例程
    • 5.2 蓝牙例程

在这里插入图片描述
N32WB031_STB 开发板:https://www.nationstech.com/uploadfile/file/20230206/1675669890941879.zip

1. 简介

此文档的目的在于让使用者能够快速熟悉N32WB03x系列蓝牙SOC芯片的开发套件以及Keil MDK-ARM的相关设定,以减少开发前期的准备时间,降低开发难度。
在这里插入图片描述

官网地址:https://www.nationstech.com/cpjs273/
文档地址:https://www.nationstech.com/uploadfile/file/20230206/1675671659217095.pdf

1.1 产品简介

N32WB03x系列蓝牙芯片是国民技术新一代高性能、超低功耗的蓝牙5.1芯片,采用32位Arm® Cortex®-M0内核,最高工作主频64MHz,片上集成48KB SRAM,256/512KB Flash。芯片集成先进的 BLE5.1射频收发器,符合蓝牙BLE5.1规范,可配置为标准的1Mbps BLE模式,2Mbps增强BLE模式, 125Kbps BLE远程模式(S8),500Kbps BLE远程模式(S2)。支持AOA(到达角)和AOD(离去角),支持 RSS I ( 接 收 器 信 号 强 度 指 示 ),同 时 支 持 主 从 角 色,支 持 多 连 接,支 持 数 据 包 长 度 扩 展,支 持 KEYSCAN,IRC,10位1.33Msps ADC(可配置为16位16Ksps),支持模拟MIC输入,PGA放大,支持基 本、通用、高级TIMER,RTC,WWDG,IWDG,LPUART,USART,SPI,I2C等外设。

1.2 主要资源

在这里插入图片描述

1.3 典型应用

在这里插入图片描述

2. SDK/开发固件文件目录结构

SDK 目录下是一个以固件库版本命名的文件,其中包含五个子文件夹:
在这里插入图片描述

2.1 doc

即SDK相关的说明文档,包含SDK使用指南和固件升级使用指南等。

2.2 firmware

  1. CMSIS:
    微控制器软件接口标准,是Cortex-M处理器系列的与供应商无关的硬件抽象层, CMSIS提供了内核与外设、
    实时操作系统和中间设备之间的通用接口。
  • 包含了用来访问内核的寄存器设备的名称定义,地址定义和配置函数。该接口包括调试通道定义。
  • 提供片上所有外设的定义,包括所有外设寄存器头文件、启动文件、系统初始化模板文件。
  1. n32wb03x_std_periph_driver:
    芯片外设的标准驱动函数,包括.c 的源文件和.h 的头文件。用户可移植到项目中,快速完成对某个外设模块的使用。
    在这里插入图片描述

2.3 middleware

中间层固件,主要如下两个目录:

  1. Third_Party

 FreeRTOS: FreeRTOS 相关库

  1. Nationstech

 ble_library: 蓝牙BLE 相关库
 ns_ble_stack: ble 蓝牙协议栈头文件
 ns_ble_profile: ble profile 库源码
 ns_library: ble 程序其他库源码,包含 log,sleep 和 timer 等

2.4 utilities

工具软件目录, 里面主要包含:

  1. dfu:固件升级相关工具软件目录和调用这些工具的 bat 脚本

 Image:使用 bat 脚本生成的 bin 文件和用于DFU 演示的 bin 文件
 JLink:烧录工具
 Keys:用于生成 dfu 升级 bin 的密匙
 NSAndroidUtil: DFU 测试 APK
 NSUtil:串口升级工具软件和源码

2.5 projects Projects

目录包含开发板目录,开发板目录下包含:

  1. bsp:包含调试串口打印功能的 log 函数,用于外设例程在调试过程答应各种调试信息。
  2. pplication:应用例程,使用了多种外设或者功能需求的综合性例程

 peripheral_alone: 外设综合例程,包含串口通信,TIM 的 PWM 输出,ADC 读取和转为电压,IO 输出,IO输入中断响应和 RTC 休眠唤醒
 ble_hid_rcu:蓝牙遥控器例程,使用 KEYSCAN 模块,ADC PGA 模块读取声音和蓝牙HID 数据发 送
 FreeRTOS:Freertos 相关例程

  1. ble:蓝牙从机例程,通过对具体 profile 的蓝牙例程了解蓝牙程序开发的基本方法

 dis:设备服务例程
 hid_mouse: 蓝牙鼠标例程
 rdtss: 蓝牙数传例程(128bit UUID),包含 DFU空中升级项目选项
 rdtss_16bit: 蓝牙数传例程(16bit UUID),包含 DFU 空中升级项目选项
heart_rate: 蓝牙心率服务例程
 blood_pressure: 蓝牙血压服务例程。

  1. ble_central:蓝牙主机例程

 central_rdtsc:蓝牙数传服务主机例程。可以配合 rdtss 例程使用。
central_rdts_c&s:蓝牙数传服务主机和从机模式切换例程。可以配合rdtss或central_rdtsc例程使用。
central_relay_1m1s:蓝牙数传服务中继例程,即一主一从同时工作。可以配合 rdtss 例程使用。

  1. dfu:设备固件升级例程

 common: dfu 公共库目录
 app_ota:蓝牙空中升级例程
 image_update:单 bank模式下,image_update 例程源码
 app_usart:串口升级例程(跳转 masterboot)
 masterboot:固件升级 boot,包含串口升级,固件校验和跳转

  1. peripheral: 包含各个外设功能模块的例程项目,实现每个外设模块的基本功能应用开发,用户可以通过这些例程项目快速了解芯片外设用法。
    在这里插入图片描述

3. 项目配置与烧录

3.1 编译环境安装

请安装KEIL MDK-ARM开发环境,版本要求为V5.00以上,建议使用V5.24.2.0。从MDK的官网可以下载得到MDK的安装包,然后安装即可,关于的MDK安装请看这个大佬的教程。

MDK安装教程:https://blog.csdn.net/bruceoxl/article/details/108548573

MDK下载地址:https://www.keil.com/download/product/

3.2 固件支持包安装

双击运行N32WB03x_DFP.1.1.0.pack安装Keil芯片支持包。
支持包地址:https://www.nationstech.com/uploadfile/file/20230206/1675669890941879.zip
在这里插入图片描述

3.3 编译环境配置

注:所有例程已经按如下配置完成,所以运行例程不需要重新配置编译环境。

  1. Target页的FLASH和RAM配置

 不包含ble功能项目
在这里插入图片描述

 包含ble功能项目target页
在这里插入图片描述

 带DFU功能项目,请参考《固件升级使用指南.PDF》

  1. Linker页

 勾选使用Target页的memory配置
在这里插入图片描述

 带ble项目需要加middlewares\Nationstech\ble_library\ns_ble_stack\symdef\symbol_g15.obj文件于Misc control,注意包含蓝牙主机功能的程序使用的obj文件是symbol_g15_central.obj
在这里插入图片描述

  1. Debug页

 调试器选择CMSIS-DAP Debugger作为开发板上的NS-Link
在这里插入图片描述

 Setting页面如下图
在这里插入图片描述

3.4 编译与下载

 编译:点击菜单的build按钮在这里插入图片描述

 下载:点击菜单的download按钮在这里插入图片描述

 调试:点击菜单的start/stop debug session按钮在这里插入图片描述

注意:下载程序后无法继续再下载

 可能1: 代码中将SWDIO/SWDCLK用作其他用途,导致仿真接口失效。一般情况下不建议使用仿真引 脚用作其他功能设计
 可能2:芯片进入低功耗sleep模式,此时仿真接口失效,需要在唤醒状态下下载,直接reset然后下载。

3.5 BLE工程目录结构

以rdtss蓝牙项目工程为例
在这里插入图片描述

 Project Target
 N32WB03x: 蓝牙工程,不带DFU配置,一般ble项目只有这个target
 OTA_IMG_1:带蓝牙OTA工程,配置为Bank1地址
 OTA_IMG_2:带蓝牙OTA工程,配置为Bank2地址

目录结构如下
在这里插入图片描述

 STARTUP:芯片启动文件
 CMSIS:芯片内核配置
 FWLB:芯片外设驱动库
 BLE_STACK:蓝牙BLE协议栈
 BLE_PROFILE:蓝牙BLE profile
 NS_DUF(可选):蓝牙OTA固件升级相关库
 Crypto(可选):蓝牙OTA固件升级使用的加密相关库
 NS_LIB:蓝牙应用相关库
 BLE_APP:蓝牙应用代码
 USER:用户应用代码
 CONFIG:配置文件
 DOC:说明文档

1、功能说明
    蓝牙BLE数传服务(rdts)例程,使用128bit UUID。BLE主机连接设备后,下行数据将透传到USART1,USART1收到的数据将透传到BLE主机

2、使用环境
    软件开发环境:  KEIL MDK-ARM V5.24.2.0
    硬件环境:      基于N32WB031_STB开发板
3、使用说明
    系统配置;
        1、时钟源:HSI=64M
        2、调试串口使用的是LPUART(PB1/PB2),波特率是115200,8bit数据位,无校验位,1bit停止位,无流控。
        3、数据串口使用USART1(PB6/PB7),波特率115200,8bit数据位,无校验位,1bit停止位,无流控。
        4、蓝牙BLE名:NS_RDTSS
        5、LED1开机即亮,LED2指示连接状态,蓝牙连上后亮
        
    使用方法:
        1、编译后烧录到开发板
4、注意事项
    由于程序会进入sleep模式,则SWD将不能访问,请按RESET按钮后,在一秒之内执行烧录程序步骤。 

main.c

/*****************************************************************************
 * Copyright (c) 2019, Nations Technologies Inc.
 *
 * All rights reserved.
 * ****************************************************************************
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the disclaimer below.
 *
 * Nations' name may not be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY NATIONS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * DISCLAIMED. IN NO EVENT SHALL NATIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * ****************************************************************************/

/**
 * @file main.c
 * @author Nations Firmware Team
 * @version v1.0.1
 *
 * @copyright Copyright (c) 2019, Nations Technologies Inc. All rights reserved.
 */

/** @addtogroup 
 * @{
 */
 
/* Includes ------------------------------------------------------------------*/
#include "n32wb03x.h"
#include "rwip.h"
#include "ns_ble.h"
#include "ns_sleep.h"
#include "ns_delay.h"
#include "ns_log.h"
#include "app_usart.h"
#include "app_gpio.h"
#include "app_ble.h"
#if  (CFG_APP_NS_IUS)
#include "ns_dfu_boot.h"
#endif

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define DEMO_STRING  "\r\n Nations raw data transfer server(128bit UUID) demo \r\n"

/* Private constants ---------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/


/**
 * @brief  main function
 * @param   
 * @return 
 * @note   Note
 */
int main(void)
{
    //for hold the SWD before sleep
    delay_n_10us(200*1000);
    

    NS_LOG_INIT();

    #if  (CFG_APP_NS_IUS)
    if(CURRENT_APP_START_ADDRESS == NS_APP1_START_ADDRESS){
        NS_LOG_INFO("application 1 start new ...\r\n");
    }else if(CURRENT_APP_START_ADDRESS == NS_APP2_START_ADDRESS){
        NS_LOG_INFO("application 2 start new ...\r\n");
    }
    #endif
    app_ble_init();
    
    NS_LOG_INFO(DEMO_STRING);

    // periph init 
    LedInit(LED1_PORT,LED1_PIN);  // power led
    LedInit(LED2_PORT,LED2_PIN);  //connection state
    LedOn(LED1_PORT,LED1_PIN);    
    app_usart_dma_enable(ENABLE);
    //init text
    usart_tx_dma_send((uint8_t*)DEMO_STRING, sizeof(DEMO_STRING)); 

    delay_n_10us(500);
    //disable usart for enter sleep
    app_usart_dma_enable(DISABLE);
    

    while (1)
    {
        /*schedule all pending events*/
        rwip_schedule();
        ns_sleep();

    }
}

/**
 * @brief  user handle before enter sleep mode
 * @param  
 * @return 
 * @note   
 */
void app_sleep_prepare_proc(void)
{

}

/**
 * @brief  user handle after wake up from sleep mode
 * @param  
 * @return 
 * @note   
 */
void app_sleep_resume_proc(void)
{
    
    
}



/**
 * @}
 */


4 Memory分配

4.1 Flash分配

N32WB031芯片FLASH地址范围是0x01000000 - 0x0107FFFF,总空间为512K字节,分为BankA、BankB两个Bank,空间大小分别是256K字节,BankA地址范围是0x01000000 - 0x0103FFFF,BankB地址范围是0x01040000 - 0x0107FFFF。用户代码运行范围只能是其中一个Bank,默认使用BankA。注意N32WB031KC系列FLASH空间是256K,即只有BankA区域。
需要使用固件升级功能请参考《固件升级使用指南.PDF》里面的FLASH内存分布章节。
在这里插入图片描述

4.2 RAM

N32WB031芯片RAM地址范围是0x20000000 - 0x2000BFFF,可用空间为48K字节

 如果使用蓝牙功能,蓝牙协议栈将占用0x20000000 -
0x20003FFF,总共16K字节RAM,用户代码可以使用0x20004000 - 0x2000BFFF,总共32K字节RAM
 如果不用蓝牙功能,则用户代码可以使用全部48K字节RAM

在这里插入图片描述

5. 系统时钟

5.1 不带蓝牙协议栈例程

系统时钟源可以选择HSE或者HSI,所有外设例程默认使用HSI 64M作为系统时钟源。低速时钟源可以选择外部晶体LSE 32.768K或者内部LSI 32K时钟源。

5.2 蓝牙例程

所有蓝牙例程默认使用HSI 64M作为系统时钟源,使用LSI作为低速时钟源,必须外接32M晶体为蓝牙射频专用时钟源。系统时钟源不建议更改,低速时钟源可以选择外部晶体LSE 32.768K或者内部LSI 32K时钟源,但是只能在蓝牙协议栈初始化函数里配置LSI或者LSE并初始化低速时钟源,用户代码后续不能切换低速时钟源,否则将影响蓝牙协议栈的功能。

参考文献:
官网地址:https://www.nationstech.com/cpjs273/
文档地址:https://www.nationstech.com/uploadfile/file/20230206/1675671659217095.pdf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue.js基础特性、生命周期及常用指令

目录 一、Vue构造选项 el根标签 data数据对象 methods定义方法 二、生命周期 三、常用指令 一、Vue构造选项 选项说明el唯一根标签,决定Vue实例会管理哪一个DOM节点dataVue实例对应的数据对象methods定义Vue实例的方法,可以在其他地方调用&#x…

慢SQL出现原因、优化、开启慢查询日志

文章目录慢SQL:出现原因:解决方式:开启慢查询日志:慢SQL: 出现原因: (1)数据库表索引设置不合理 (2)SQL语句有问题,需要优化 解决方式: (1&am…

Java 抽象类和接口

文章目录一、抽象类1. 抽象类定义2. 抽象类成员特点二、接口1. 接口概述2. 接口成员特点3. 类和接口的关系4. 抽象类和接口的区别5. 接口案例三、形参和返回值一、抽象类 1. 抽象类定义 在 Java 中,一个没有方法体的方法应该定义为抽象方法,而类中如果…

现在转行做程序员的多吗?

曾经有一名程序员说,他在编写程序时,就像一个发明家在做实验;当他把程序编好可以运行时,他就已经是个发明家了。 程序员作为众多转行人员首选的职业,也是被大众熟知了。但我们需要知道的不仅是它作为一个职业的定义&a…

Spring超级全家桶,学完绝对是惊艳面试官的程度

前言Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。有人亲切的称之为:Spring 全家桶。很多研发人员把spring看作心目中最好的java项目,没有之一。所以这是重点…

AtCoder Beginner Contest 290 G. Edge Elimination(思维题 枚举+贪心)

题目 T(T<100)组样例&#xff0c;每次给出一棵深度为d的k叉树&#xff0c; 其中&#xff0c;第i层深的节点个数为 保证k叉树的所有节点个数tot不超过1e18&#xff0c; 求在k叉树上构建一棵大小恰为x的连通块&#xff0c;所需要断开的最少的树边的条数(x<tot<1e18)…

VScode远程连接服务器-过程试图写入的管道不存在-could not establist connection to【已解决】

问题描述 使用服务器的过程中突然与服务器断连&#xff0c;报错如下&#xff1a;could not establist connection to [20:23:39.487] > ssh: connect to host 10.201.0.131 port 22: Connection timed out > [20:23:39.495] > 过程试图写入的管道不存在。 > [20…

hook与mixin

看完vue3就开始看vue3的源码&#xff0c;表示很懵~ 刚把rollup打包搞完&#xff0c;这不响应式就接着来了&#xff01;&#xff0c;还是写篇直接使用vue3的博客清清脑吧&#xff01; 什么是hook、mixin&#xff1f; mixin: Vue2中多个组件内存在重复JS业务逻辑&#xff0c;使…

JavaScript 闭包【自留】

闭包的概念理解 闭包的定义 ✅ 这里先来看一下闭包的定义&#xff0c;分成两个:在计算机科学中和在JavaScript中。 ✅ 在计算机科学中对闭包的定义(维基百科): 闭包(英语:Closure)&#xff0c;又称词法闭包(Lexical Closure)或函数闭包(function closures);是在支持头等函数…

QT之OpenGL模板测试

QT之OpenGL模板测试1. 概述2. 使用步骤及函数介绍3. Demo4. 参考1. 概述 当片段着色器处理完一个片段之后&#xff0c;模板测试(Stencil Test)会开始执行&#xff0c;和深度测试一样&#xff0c;它可能会丢弃片段。被保留下来的片段会进入深度测试。 一个模板缓冲中&#xff…

Web Spider Babel安装 Ast抽象语法 - 基本使用

文章目录一、资源地址二、遍历2.1 树结构遍历模式2.2 案例三、下载安装四、案例操作总结提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、资源地址 Ast反混淆语法在线网址&#xff1a;https://astexplorer.net Babel官方文档&#xff1a;https://ww…

玩转Linux内核进程调度,这一篇就够(所有的知识点)

一&#xff0c;进程的分类 在 CPU 的角度看进程行为的话&#xff0c;可以分为两类&#xff1a; CPU 消耗型&#xff1a;此类进程就是一直占用 CPU 计算&#xff0c;CPU 利用率很高IO 消耗型&#xff1a;此类进程会涉及到 IO&#xff0c;需要和用户交互&#xff0c;比如键盘输…

性能测试流程

性能测试实战一.资源指标分析1.判断CPU是否瓶颈的方法2.判断内存是否瓶颈的方法3.判断磁盘I/O是否瓶颈的方法4.判断网络带宽是否是瓶颈的方法二.系统指标分析三.性能调优四.性能测试案例1.项目背景2.实施规划&#xff08;1&#xff09;需求分析&#xff08;2&#xff09;测试方…

Faster-Rcnn修改转数据集文件

目录 学习python的一些基础知识 argparser assert关键字 让你秒懂Python 类特殊方法__getitem__ lxml.etree.fromstring的使用 统计一下json文件内的种类 正脸红外光 正脸-混合红外光 正脸-交叉偏振光 正脸-平行偏振光 正脸-紫外光 正脸-棕色光 调用mydataset可视化…

我的 System Verilog 学习记录(5)

、 引言 本文简单介绍 System Verilog 语言的 控制流。 前文链接&#xff1a; 我的 System Verilog 学习记录&#xff08;1&#xff09; 我的 System Verilog 学习记录&#xff08;2&#xff09; 我的 System Verilog 学习记录&#xff08;3&#xff09; 我的 System Ver…

算法课堂-分治算法

分治算法 把一任务分成几部分&#xff08;通常是两部分&#xff09;来完成&#xff08;或只完成一部分&#xff09;&#xff0c;从而实现整个任务的完成 或者你可以把递归理解为分治算法的一部分 因为递归就是把问题分解来解决问题 例子 称假币 最笨的方法&#xff1a;两两称…

(三十六)大白话数据库幻读,本质到底是个什么问题?

上一讲我们给大家讲解了不可重复读这个问题&#xff0c;这个问题简单来说&#xff0c;就是一个事务多次查询一条数据&#xff0c;结果每次读到的值都不一样&#xff0c;这个过程中可能别的事务会修改这条数据的值&#xff0c;而且修改值之后事务都提交了&#xff0c;结果导致人…

多变量线性回归模型

多变量线性回归模型 模型参数为n1维向量&#xff0c;此时模型公式为 hθ(x)θ0x0θ1x1θ2x2...θnxnh_{\theta}(x)\theta_{0}x_{0}\theta_{1}x_{1}\theta_{2}x_{2}...\theta_{n}x_{n} hθ​(x)θ0​x0​θ1​x1​θ2​x2​...θn​xn​ 可以简化为 hθ(x)θTXh_{\theta}(x)\th…

Gradle7.4安装与基本使用

文章目录一.前言二.下载Gradle三.Gradle镜像源-全局级配置四.配置Gradle wrapper-项目级配置五.Gradle对测试的支持五.生命周期5.1 settings文件六.Gradle任务入门6.1 任务行为6.2 任务依赖方式七. Dependencies依赖引入7.1 依赖冲突及解决方案八.Gradle整合多模块SpringBoot九…

NLP复习大纲

第一章&#xff1a;概述 1. 什么是自然语言处理&#xff1f; 计算机具备人类的听、说、读、写、译、问、答、搜索、摘要、对话和聊天等能力 知识和常识进行推理和决策 支持客服、诊断、法律、教学等场景 2. 自然语言处理的主要任务有哪些&#xff1f; 分析、理解、转换、…