STM32のネイティブな環境で開発しようと思って、STM32CubeMXとEclipseベースのIDEのSW4STM32やTrueStudioを試していましたが、STMicroよりCubeMXを含めた統合開発環境のSTM32CubeIDEが提供されているので、改めて各種機能を試してみたいと思います。ほぼほぼ自分用のあんちょこです。
トランジスタ技術2020年3月号でSTM32が特集されているので参考になります。
UARTでprintf()を使う
PCとのシリアル通信でprintf()を使う方法です。printf()内部で呼ばれる関数を定義してやることで、mbedのprintf()のように使えます。
STM32CubeIDE: Version: 1.5.1
Target Board: Nucleo-F446RE
手順
ボードを指定してプロジェクトを新規作成します。
特に設定しなくてもUART2が有効化されています。
そのまま「Project」-「Generate Code」(または ツールバーの「ギア」のアイコン)でコードを生成します。
コードが生成されたら「Project Exploer」で<project名>/Core/Src/main.cをダブルクリックして編集します。(すでにEditorで開かれていると思いますが)
printf()を使うために<stdio.h>をインクルードします。
/* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include <stdio.h> /* USER CODE END Includes */
printf()内で間接的に呼ばれる__io_putchar()を定義します。
/* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF); return ch; } /* USER CODE END 0 */
メインループ内でprintf()を呼び出します。
/* Infinite loop */ /* USER CODE BEGIN WHILE */ const char msg[] = "COUNT:"; int cnt = 0; while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ float fv = cnt * 0.01f; printf("%s\t%d\t%f\r\n", msg, cnt, fv); cnt++; HAL_Delay(1000); } /* USER CODE END 3 */
printf()の書式でfloat型を使う
「浮動小数点フォーマットのサポートが有効になっていない」とのエラーメッセージが表示されます。
The float formatting support is not enabled, check your MCU Settings from "Project Properties > C/C++ Build > Settings > Tool Settings", or add manually "-u _printf_float" in linker flags.
以下のようにプロジェクトを設定します。
メニューの「Project」-「Properties」で表示されるダイアログで
画像のように「Use float with printf from newlib-nano(-u _puritf_float)」にチェックを入れます。
プロジェクトのビルドと実行
メニューの「Project」-「Build project」 (またはツールバーの「🔨」のアイコン)でビルドします。
メニューの「Run」-「Run As」-「Stm32 Application」(またはツールバーの「▷」のアイコン)で実行します。
PC上のターミナルで文字列を受信
PC上のターミナルソフトRLoginで受信している様子
ビットレートはDevice Configuration Tool(MX)のConnectivity > USART2 > Parameter Settingsで変更できます。
0 件のコメント:
コメントを投稿