一、背景
Log 信息输出可以方便调试者观察程序运行状态,和常用的串口 printf 的功能相似。但是在 nrf5x 芯片串口只有一个的状态下,如果你已经使用了串口,者时候 Log 显示提供一种不占用串口的方式,也就是仿真器 JLink 的 RTT Viewer 输出方式。
二、初始化打印功能
在主函数 main 中,第一步就是初始化打印日志功能 log_init()
,该函数实际上既可以触发串口打印,也可以触发 RTT 打印。
/**@brief Application main function.
*/
int main(void)
{
bool erase_bonds;
// Initialize.
log_init();
timers_init();
buttons_leds_init(&erase_bonds);
power_management_init();
ble_stack_init();
gap_params_init();
gatt_init();
services_init();
advertising_init();
conn_params_init();
// Start execution.
NRF_LOG_INFO("Blink example started.");
advertising_start();
// Enter main loop.
for (;;)
{
idle_state_handle();
}
}
三、SDK配置
点击 sdk_config.h 文件
选择 Configuration Wizard
3.1 配置串口打印
nRF_Log 中勾选 UART 选项
切换回 Text Editor 界面,可以发现已经把 NRF_LOG_BACKEND_UART_ENABLE 设置为 1,也就是使能了串口。
在 nrf_log_default_backends.c 文件中,当我们使能了 NRF_LOG_BACKEND_UART_ENABLE 后,对应会修改文件中对串口初始化
在 nrf_log_backend_uart.c 文件中
这里初始化串口的串口参数,是按照 config.h 文件里的内容进行的,同时管脚只配置了一个打印输出引脚。
注意:如果你在配置文件中已经把 NRF_LOG_BACKEND_UART_ENABLE 设置为 1,这时候就不再次初始化配置串口。
3.2 配置RTT打印
nRF_Log 中勾选 RTT 选项
切换回 Text Editor 界面,可以发现已经把 NRF_LOG_BACKEND_RTT_ENABLE 设置为 1,也就是使能了 RTT。
在 nrf_log_default_backends.c 文件中,当我们使能了 NRF_LOG_BACKEND_RTT_ENABLE 后,对应会修改文件中对 RTT 初始化
四、开始打印日志
4.1 串口打印
打开串口调试助手,波特率设置为 115200
4.2 RTT打印
找到你的 SEGGER 的安装位置,找到驱动版本下的 JLinkRTTViewer.exe
打开后弹出选择界面。这个功能我们必须接上 JLink,设置参数如下,使用 USB 端口输出,目标设备选择 nRF52832_xxAA
五、API调用
5.1 打印普通信息
函数名:
NRF_LOG_INFO
用法:
NRF_LOG_INFO("Template example started.");
5.2 打印浮点数
函数名:
NRF_LOG_FLOAT
用法:
/**
* @brief Macro to be used in a formatted string to a pass float number to the log.
*
* Use this macro in a formatted string instead of the %f specifier together with
* @ref NRF_LOG_FLOAT macro.
* Example: NRF_LOG_INFO("My float number" NRF_LOG_FLOAT_MARKER "\r\n", NRF_LOG_FLOAT(f)))
*/
#define NRF_LOG_FLOAT_MARKER "%s%d.%02d"
/**
* @brief Macro for dissecting a float number into two numbers (integer and residuum).
*/
#define NRF_LOG_FLOAT(val) (uint32_t)(((val) < 0 && (val) > -1.0) ? "-" : ""), \
(int32_t)(val), \
(int32_t)((((val) > 0) ? (val) - (int32_t)(val) \
: (int32_t)(val) - (val))*100)
• 由 Leung 写于 2020 年 2 月 25 日
• 参考:青风电子社区
Leung_ManWah 发布了91 篇原创文章 · 获赞 136 · 访问量 7万+ 私信 关注