PCのターミナルソフトでUARTのデータを受信し、そのデータを画面上に表示する場合、ASCIIコードでないと読み取れません。
しかし、マイコン内部(または外部)の通信では、1または0のバイナリデータを直接やりとりするため、そのままターミナルソフトに送っても、ASCIIコードではないため読めません。
そこで、C言語の標準入出力関数「printf」を使います。「printf」を使用すれば、浮動小数点の値もターミナルソフトで表示できます。
実際のコーディングでは、「#include “arm_math.h” 」の下に「#include <stdio.h>」を入れます。これは、printf用のarmの標準ファイルです。次にprintfを使用するときのidefの記述を記入する必要があります。idefの記述は、使用する統合開発ツールによって若干異なるため、各ツールの仕様をマニュアルなどで確認してください。
そして、printf("%f\n\r", 変数);の記述を入れます。変数には出力したい値を入れておきます。
最後に、PUTCHAR_PROTOTYPEを入れます。例えば、次のような記述です。
// brief Retargets the C library printf function to the USART.
PUTCHAR_PROTOTYPE
{
HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
printfを使う際、統合開発ツールのオプション設定を行う必要がある場合があります。特に、浮動小数点演算値を取り扱う時には、オプション設定が必要になります。オプション設定については各ツールの仕様をマニュアルなどで確認してください。
PC側のターミナルソフトの設定を行います。ここでは、Tera Termを例にして説明します。
シリアルポートは、STM32 Nucleoボードにつながっているシリアルポートを選びます。この例では「COMn:STMicroelectronics STLinkVirtual COM Port」です。設定からシリアルポートを選び、スピードを115200に設定します。Tera Termのデフォルトのスピードは9600ビット/秒(bps)の場合が多いですが、せっかくマイコンが115200bpsの高速通信(12倍)に対応しているので、115200bpsで通信した方が、反応が良くなります。このスピードは、STM32CubeMXでUSART2の設定を行った通信速度と合わせる必要があります(図5)
プログラムを実行すると、printfで出力された変数の値がPC側のターミナルソフトの画面上に表示されます。
図6は温度センサーで、室温をA-Dコンバーターで繰り返し測定し、その値をprintfで出力したものです。Tera Termの画面には、測定された温度が次々と表示されます。
Copyright © ITmedia, Inc. All Rights Reserved.