打开主菜单

谷雨文档中心 β

更改

NRF52832DK协议栈实验

删除41字节2019年8月19日 (一) 14:51
无编辑摘要
2.了解如何进行低功耗处理(main()函数中while循环的idle_state_handle空闲任务处理函数)。
=== LOG打印实验 ===
==== 实验简介 ====
LOG打印实验1.1_ble_central_log与2.1_ble_peripheral_log,LOG打印实验是在低功耗实验的基础上,新增了LOG打印部分。
{{Note|text=注意:我们的LOG工程,仅针对RTT部分,没有介绍UART,UART的使用大家可以查看基础实验部分|type=warning}}
==== 实验现象 ====
我们打开J-Link RTT Viewer,选择我们的Jlink仿真器,可以看到log打印如下。
[[文件:Nrf rtt 11.png|边框|居中|无框|656x656像素]]
==== 工程及源码讲解 ====
===== 主机部分 =====
====== 工程说明 ======
我们在工程中,新增加了nRF_Log与nRF_Segger_RTT分组,这两个分组中分别包含了log打印的相关函数,以及RTT的相关函数。
{{Note|text=使用RTT,可以从目标微控制器输出信息,并以非常高的速度向应用程序发送输入,而不会影响目标的实时行为。
默认实现每个方向使用一个通道,用于可打印的终端输入和输出。使用J-Link RTT Viewer,该通道可用于多个“虚拟”终端,允许使用一个目标缓冲区打印到多个窗口(例如一个用于标准输出,一个用于错误输出,一个用于调试输出)。例如,可以使用附加的up(到主机)通道来发送分析或事件跟踪数据。|type=info}}
====== main()函数 ======
log打印实验相对于前一章节的低功耗实验,新增的功能并不多,我们仅仅添加了LOG的RTT打印功能,这边我们首先还是看下mian函数。
</syntaxhighlight>
====== log_init()函数以及底层调用 ======
我们查看到log_init()函数,先调用NRF_LOG_INIT()函数初始化LOG,然后我们调用NRF_LOG_DEFAULT_BACKENDS_INIT()函数来决定LOG的底层调用。<syntaxhighlight lang="c" line="1" start="140">
//******************************************************************
</syntaxhighlight>
====== NRF_LOG_XX()函数说明 ======
上面说明了如何去初始化LOG向RTT打印的功能,下面我们将给大家介绍一下LOG打印的函数,毕竟这个才是我们真正要用到的部分。
</syntaxhighlight>
===== 从机部分 =====
从机部分与主机部分新增log功能相同,这边不再赘述。
==== 实验总结 ====
LOG打印实验,大家需要掌握的三个要点如下:
3.要善于使用log功能,这样有利于我们程序的流程开发及异常问题的查找和处理。
=== 通用扫描实验 ===
==== 实验简介 ====
通用扫描实验1.2_ble_central_scan_all与2.2_ble_peripheral_adv_all,给大家带来的是主机的扫描功能展示,以及从机的广播功能展示。
大家都清楚,低功耗蓝牙主从机间交互数据的方式一般来说是有两种,一种是连接之后通信(这个是蓝牙的主要功能),另一种就是本实验带来的主机扫描获取从机的广播数据。而上述的两种方式,不管是哪一种,都是需要扫描功能的,毕竟连接通信之前,我们的主机也是需要扫描到从机设备才可以发起连接。
==== 实验现象 ====
主机log打印如下,先打印当前例程的名称'''1.2_ble_central_scan_all''',然后将会打印扫描到的从机设备的信息,格式如下:<syntaxhighlight lang="c">
Device MAC: 0x010203040506 // 从机设备MAC地址
[[文件:Nrf rtt 22.png|边框|居中|无框|656x656像素]]
==== 工程及源码讲解 ====
===== 工程说明 =====
相对于LOG打印的工程,我们新增了nRF_BLE分组,这个分组下包含的就是BLE协议相关的文件,我们在本实验中只使用了nrf_ble_scan.c下的扫描功能函数。
[[文件:Nrf group nrf ble.png|边框|居中|无框|296x296像素]]
===== 主机部分 =====
====== main()函数 ======在mian函数中,我们新增了扫描功能的scan_init()初始化函数,并且在初始化所有功能之后,我们调用了发起扫描的函数scan_start初始化函数,并且在初始化所有功能之后,我们调用发起扫描的函数scan_start()。<syntaxhighlight lang="c" line="1" start="296">
//******************************************************************
// fn : main
</syntaxhighlight>
====== scan_init()函数及scan_evt_handler()回调函数 ======
首先我们看一下我们的扫描功能的初始化函数,可以看到我们最终调用的是库函数中的nrf_ble_scan_init()去初始化我们扫描,在这个函数中,有两个参数需要我们关注,一个是init_scan(这个参数携带的我们对于扫描的设置),另一个是scan_evt_handler(当我们扫描到设备之后,将会由这个回调函数返回事件信息给我们)。<syntaxhighlight lang="c" line="1" start="155">
//******************************************************************
510
个编辑