[STM32CubeIDE] printf を USART2 に出力させる

背景)

STM32CubeIDE で 作成したプロジェクトでデバッグ表示させようと思った時に、選択肢がいくつかあることがわかったが、出力書式指定ができる printf 文を使えると都合がいいので、printf 文を使えるようにする。

前提条件)

STM32CubeIDEでプロジェクトを生成し、USART2の初期化コードが生成されている(自動で 115200 [bps] で初期化するコードが生成されているので気にする必要はないハズ。。。)

main.c に 記述すべき処理)

/* USER CODE BEGIN 0 */
int _write(int file, char *ptr, int len) {
	HAL_UART_Transmit(&huart2, (uint8_t *)ptr, len, 10);
	return len;
}
/* USER CODE END 0 */

注意)

標準だとprintf文は必要に応じて内部でバッファリングするようだ。
改行するとシリアルに出力されるが、即時に出力させたい場合はバッファリングを無効化する処理が必要。

バッファリングを無効化するための処理)

  /* USER CODE BEGIN 2 */
  setbuf(stdout, NULL);
  setbuf(stderr, NULL);

※stdout / stderr どちらかの バッファだけ無効化しておけば良っぽい(

コメントを残す

メールアドレスが公開されることはありません。