6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

nRF52でBLEデバイスを開発する(3)nRF52840のRTTでログ出力する

Last updated at Posted at 2019-10-07

この記事は、nRF52でBLEデバイスを開発する(2)OTAアップデート Buttonless DFUとSecure DFUの続きです。

はじめに

 nRF52840-DKにFeather nRF52840をSWDケーブルで接続すると、FeatherのUARTはDKのデバッグマイコンには接続されないため、UARTでのログ取りができません。SWDのRTT(Real Time Terminal)機能でログを出力する必要があります。

SDKの設定

 nRF52 SDKの各種設定のために、各プロジェクトは sdk_config.h をインクルードするように設定されています。
image.png

 各モジュールの設定値を変更する際は、この中を書き換えることになります。

RTTログの設定

 RTTログを有効にするためには、sdk_config.h内の以下の部分を変更します。

sdk_config.h
// ログ機能の有効化
#ifndef NRF_LOG_ENABLED
#define NRF_LOG_ENABLED 1
#endif

// RTT ログの有効化
#ifndef NRF_LOG_BACKEND_RTT_ENABLED
#define NRF_LOG_BACKEND_RTT_ENABLED 1
#endif

// UARTログの有効化
#ifndef NRF_LOG_BACKEND_UART_ENABLED
#define NRF_LOG_BACKEND_UART_ENABLED 1
#endif

 ここの設定値に1を定義することで、各機能が有効になります。

 nRF52832では、ここの設定のみでsesのターミナルウインドウにログが出力されるようになります。

nRF52840

 ですが、nRF52840では、上の設定だけではログが出ません。少し前のSDKからのバグのようです。

#ifndef NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED
#define NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED 0
#endif

 上の定義を0にすることで、nRF52840でもログが出るようになります。

ログ機能の初期化

 以下のコードでログ機能の初期化を行います。通常main.cの先頭の方で呼ばれます。

    APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
    NRF_LOG_DEFAULT_BACKENDS_INIT();

 ログ出力は以下のマクロで。

    NRF_LOG_INFO("Application started.");

nrf_log.hに各種マクロが定義されています。

  • NRF_LOG_XXXX() 系はprintf関数として動作します。
  • NRF_LOG_HEXDUMP_XXXX() 系は、ポインタの先をダンプします。
  • NRF_LOG_FLOAT() でfloatの固定フォーマット出力が出来ます。

以上です。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?