NRF52832學習筆記(13)——RTT打印調試日誌

一、背景

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 日

• 參考:青風電子社區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章