LoginSignup
0
1

More than 1 year has passed since last update.

STM32で Printf() を使い Teraterm で デバッグ

Last updated at Posted at 2021-11-03

はじめに
1年以上前の 2020年8月にSTM32L432 を用いた開発環境をWindows上で構築した。
この時 非常に参考になったのは、この記事 です。

ここでは、STM32で printf() を使える様にしたので メモ書きとして記します。


Printf()を用いて Tera Term で デバッグ(文字出力)

参考にした記事に Lチカ(STM32 のLEDを点滅) を実現する ソースコードが記載されている。
今回、ここに Printf() を実装した。もちろん、Lチカ 以外でも 同じ方法で Printf()が実現出来る。
※STM32 のUART 設定は、usert.c で行われているので ソースコードを見てください。
 デフォルトのままであれば、Terminal Adapter側で下図の設定で動作します。
2021-11-03 (1).png

◎syscalls.cの追加
 \Src フォルダーの中に syscalls.c を置く。
 syscalls.cは、STM32CubeMX と STM32L4用のパッケージをインストールした時点で下記に
 サンプルコードとして置かれているので これをコピーして使う。

C:\Users\xxxx\STM32Cube\Repository\STM32Cube_FW_L4_V1.17.0\Projects\NUCLEO-L432KC\Examples\PWR\PWR_ModesSelection\SW4STM32\syscalls.c

◎main.c のソースコードを変更

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
------- 省略 -------

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
------- 省略 -------

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    printf("LED Toggle!!\r\n");
    HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
    HAL_Delay(5000);//ms

  }
  /* USER CODE END 3 */
------- 省略 -------

◎usert.c のソースコードを変更

/**
  ******************************************************************************
  * @file    usart.c
  * @brief   This file provides code for the configuration
  *          of the USART instances.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
------- 省略 -------

/* USER CODE BEGIN 1 */
/* Add by My.Name for Printf */
#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 1 */
------- 省略 -------

☆2021年11月 3日(水) 午後18時40分 初版(Ver1.00) 作成


0
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
0
1