NORDIC
文章平均质量分 67
思途积跬
不积跬步,无以至千里;不积小流,无以成江海。
展开
-
zephyr BLE创建自定义服务
定义 GATT 服务及其特性的 128 位 UUID。包括服务UUID,特征的UUID。0X000015230X12120XEFDE0x15230x000015240x12120xefde0x15230x000015250x12120xefde0x1523创建服务并将其添加到蓝牙 LE 堆栈。通过宏BT_GATT_SERVICE_DEFINE()静态创建和添加服务创建并添加自定义按钮特征。创建自定义LED特征实现上面的read_button和write_led函数。原创 2024-07-17 17:22:08 · 473 阅读 · 0 评论 -
蓝牙BLE的数据交换
不同的 GATT 操作在两个连接的蓝牙 LE 设备之间表示和交换数据GATT分为GATT服务器和GATT客户端。服务器可以直接向客户端发送数据,或者客户端可以从服务器轮询数据。为了让客户端知道从服务器请求什么,它需要知道 GATT 服务器提供哪些服务和特性。因此,客户端将在连接开始时执行服务发现。服务可以有零个或多个特征定义(通常称为特性)。特征至少由两个属性组成,也可以由多个属性组成。特征由三部分组成:特征声明属性:保存有关特征值属性的元数据。特征值属性:保存实际的用户数据。原创 2024-07-17 11:33:18 · 775 阅读 · 0 评论 -
zephyr BLE连接过程和连接参数更新实例
1.引入连接头文件定义连接和断开的回调函数将回调函数放入bt_conn_cb 类型变量,待会注册回调函数需要用到。注册回调函数编译和运行。原创 2024-07-17 10:38:03 · 249 阅读 · 0 评论 -
蓝牙BLE连接过程和参数
低功耗蓝牙中实现双向通信的最常见方式是使用连接对于简单的应用程序,默认连接参数可能工作得很好,但您也可以调整这些参数以最适合您的应用程序,为您提供最低的功耗,或实现您需要的吞吐量。原创 2024-07-17 09:42:43 · 576 阅读 · 0 评论 -
zephyr设置BLE广播数据实例
这个宏,默认会开启广播支持 ( BT_BROADCASTER) ,使用softDevice控制器 ( BT_LL_CHOICE= BT_LL_SOFTDEVICE),发射功率为0dBm( BT_CTLR_TX_PWR = BT_CTLR_TX_PWR_0)。广播参数的控制,广播参数放在bt_le_adv_param变量里面。由于此变量需要初始化内容太多,因此使用宏 BT_LE_ADV_PARAM()来帮助初始化。3.修改广播的内容,主要是修改flag的内容,在第7步,函数是动态更新广播数据。原创 2024-07-16 17:05:34 · 1109 阅读 · 0 评论 -
蓝牙BLE广播
这里只讨论蓝牙BLE广播这部分可以看蓝牙标准Core Specification V5.3的卷3 Host part C。当然广播参数那一块和“控制器”层有关,只需要了解广播参数的含义和设置方法就行,控制器的细节不太容易理解。原创 2024-07-15 11:38:44 · 1221 阅读 · 0 评论 -
心率服务heart rate profile和service解析
用于健身应用的心率传感器主要是两个关键的标准文件prifile是总的:描述要实现心率测量,需要定义两个角色(一个收,一个发)。每个角色要定义什么服务。角色之间是怎么建立连接的,还有安全要求。(这一部分通常有例程,关心的较少)service是分的,讲了怎么表示心率数据。心率服务的数据包含的特征。(一般后面代码用到这一份标准多。所以下面的内容,也是会先profile一个章节,然后service一个章节。我当期看的版本是2011-07-12。原创 2024-07-12 16:11:26 · 986 阅读 · 0 评论 -
ATT 和 GATT:数据表示和交换
BLE的通信和以太网,wifi有个重大的不同是:BLE通信的设备往往有特定的功能。且这个功能不会在运行中发生变化。因此蓝牙设备通信的时候,只能访问预先定义好的(也就是配置文件profile)的功能。那profile里写了啥?写了服务,服务里写了各种功能属性(如温度,湿度,开关状态等非常多)。怎样表示属性,使用ATT(属性协议),很多零散的属性,怎么组织起来,设备之间怎么沟通,就通过GATT协议来实现。所以ATT是GATT协议的基石。GATT实现了通信的整个过程的各种细节。原创 2024-07-11 13:00:47 · 472 阅读 · 0 评论 -
2.GAP:通用访问协议
设备要连接上,必须有人发起连接,有人接收连接。主要是有些场景,设备直接不需要建立连接,他只需要周期性的广播自己的信息,或者持续的监听有没有设备广播新的数据就行。GAP的Peripheral,负责广播自己,让有需要和我通信的人可以连接我,平时无线电关闭状态。这两种角色,可以认为是Central(中央设备)和Peripheral(外围设备)的特殊用法。GAP的Central是负责扫描(或叫接收)蓝牙广播的,常见为手机,PC这种设备。只要是设备之间多起来,就可以形成网络,那么他们就会有网络关系,也就是拓扑结构。原创 2024-07-11 11:54:14 · 407 阅读 · 0 评论 -
1.浅谈蓝牙BLE的总体框架
这里只展开BLE这一部分,框图如下所示蓝牙也是使用分层的结构组织代码。:是自己的业务逻辑实现的地方。当然应用程序需要根据BLE的规定,实现配置文件(profile)、服务(service)和特征(character)。:这一部分实现蓝牙如何存储和交互数据,也涉及到数据加密的部分:控制层将蓝牙数据通过无线电发送出去,这一部分是硬件强相关的,且往往是闭源的。nordic的这部分也是闭源。Controller可以先不研究,一般都挺稳定的,毕竟nordic需要自己负责这部分的稳定性。原创 2024-07-11 11:15:10 · 412 阅读 · 0 评论 -
NRF52 SAADC操作和对输入电压的要求
NRF52 内部的AD是逐次逼近型,差分输入AD。其主要特性记录如下:1.单端模式下的话。反向端N就会接地。2.输入电压不能低于0V。当小幅度低于0V的时候,会产生一个负数的输出。3.输入电压不能超过3.6V。超过之后,就会被内部的电路钳制。导致测量数据出错。4.AD带接口电阻(RESP或RESN)。但是没有看到电阻的阻值。只看到可以上拉,可以下拉。一般都是选择不使用。5.AD带有增益选择GAIN。这个增益是为了测量准确性。当测量信号小(如小于1V)时。可以使用高增益来实现测量。当测量信号比较原创 2021-04-23 17:40:24 · 700 阅读 · 0 评论 -
NRF52832 开启看门狗
配置SDK.CONFIG,如下两个需要使能。添加库文件初始化 //Configure WDT. nrf_drv_wdt_config_t config = NRF_DRV_WDT_DEAFULT_CONFIG; err_code = nrf_drv_wdt_init(&config, wdt_event_handler); APP_ERROR_CHECK(err_code); err_code = nrf_drv_wdt_channel_alloc(原创 2021-04-13 15:33:29 · 384 阅读 · 0 评论 -
NRF52832 错误代码8198的处理
在开发过程中,发生如下错误提示。<error> app: ERROR 8198 [Unknown error code] at F:\project\my-test-embedded\tools\uart_ble_nRF5_SDK_15.2.0_9412b96\examples\ble_peripheral\ble_app_uart\main.c:329PC at: 0x0002E957通过查看代码,发现是进入sleep的时候,发生了错误。此错误的原因是。正在debug的过程中。1.因原创 2021-04-13 12:25:04 · 3833 阅读 · 2 评论 -
NRF52832添加UUID后,提示NRF_ERROR_NO_MEM
通过DEBUG跟踪后,发现是调用函数err_code = sd_ble_uuid_vs_add(&base_uuid, &p_led->uuid_type);是发生错误。提示sd_ble_uuid_vs_add是softdevice的函数。通过查阅资料。发现是sdk_config.h没有相应增加宏NRF_SDH_BLE_VS_UUID_COUNT的数量。导致错误参考资料https://devzone.nordicsemi.com/f/nordic-q-a/36218/sd_原创 2021-04-08 18:03:46 · 775 阅读 · 0 评论 -
NRF52832 BLE手机控制LED灯亮灭
手机APP使用到的是NORDIC官网下载的nRF ConnectBLE通信的载体都是通过数据文件或属性文件来实现。也就是profile。他们的层级关系是这样的在BLE协议栈里面可以定义很多的profile。定义很多的server,每个server也可以定义很多的characteristic。--------------------------------------------------分割线-----------------------------------------例程解析main函数原创 2021-04-08 16:52:52 · 874 阅读 · 0 评论 -
NRF52832串口的使用
在开发nrf52832主要遇到如下问题。但仍然有printf重定向问题未解决。因不影响项目使用。先把过程记录下来。方便日后翻阅。NRF52832的串口有一个例程:nRF5_SDK_15.2.0_9412b96\examples\peripheral\uart\pca10040\blank\ses串口有普通的uart和使用TE的uart。TE就是TASK and event。是IC内部的一个工作机制。将事件和任务关联起来。目的是快速响应。两种串口使用的初始化函数不同。如下是例程的串口初始化代码原创 2021-04-07 10:49:04 · 2419 阅读 · 0 评论 -
NRF52832 ADC的采样触发和采样速度的分析
如何使用ADC 能找到一些例程。但是ADC是怎么控制采样速度的。有两种AD的采样模式:阻塞(blocking mode)和非阻塞(no-blocking mode)阻塞模式:调用函数:nrf_drv_saadc_sample_convert完成采样。采样完成后return采样值。非阻塞模式:此模式触发方式有两种CPU显式触发或使用PPI。1.CPU显式调用函数nrf_drv_saadc_sample实现触发。触发后会调用ADC初始化时写入的回调函数。2.使用PPI,调用函数nrf_drv_sa原创 2021-04-06 15:39:00 · 2965 阅读 · 0 评论 -
nrf52832-SDK 外设例程如何打开RTT调试输出
1.设置编译输出为DEBUG。2.需要配置SDK_CONFIG.h才能设置NRF_LOG_BACKEND_RTT_ENABLED宏为1其初始化代码如下: uint32_t err_code = NRF_LOG_INIT(NULL); NRF_LOG_DEFAULT_BACKENDS_INIT();//输出错误log信息的函数NRF_LOG_ERROR("SAADC HAL simple example started.");...原创 2021-04-06 14:02:33 · 531 阅读 · 0 评论 -
NRF52832 SDK timer函数编译报错的问题总结及对SDK宏套路的理解
在使用nordic官方SDK的时候,尝尝会看到nrf_xxxx和nrfx_xxx这样的函数开头或文件名开头。其区别是nrfx开头的是对以前代码的扩展或升级。这就有个问题。新软件对就软件的兼容性问题。为了解决这个问题。NORDIC的官方SDK的宏定义系统做的非常复杂。 初次看,很让人一头雾水。为了方便日后查看。对这两天的摸索做一个总结。我的SDK版本是15.2。通过研究发现,不同版本,变动还挺大。所以可以仔细研究下。宏定义主要在如下两个文件中1.sdk_config.h :新的SDK配置,基本都原创 2021-04-02 11:00:38 · 574 阅读 · 0 评论