2016年09月15日

UART設定とPrintf

STM32で使用可能な開発環境の1つのSW4STM32を使用して、
Nucleoボード版STM32F303K8のUartについて、
戸惑った点含めて備忘録として軽くまとめます。


STM32CubeMXでUART1を有効にして、
ボーレートを9600で自動でコードを生成したコードを使用しました。

自動生成する際のUart設定でWord Lengthに注意が必要です。HALのバージョンによってはWord Lengthの初期値がなぜか7bitになっています。

これに気付かず、なぜかUartが文字化けるという不具合に遭遇。結局、Word Lengthを8bitにするとビット欠けずにUARTの送信ができました
7bitなんて普通では使わないので、なぜデフォルトが7bitなのか不明です。

UART送信ができると、次にやりたいのはPrintfです。「STM32 printf」で検索するといろいろなやり方が出てきて、古いやり方だったり、環境が違ったりとうまくできない感じでした。

#ifdef __GNUC__
 /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
    set to 'Yes') calls __io_putchar() */
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
上記のやり方はうまくいきませんでした。


当方のSW4STM32とHAL、STM32CubeMXという環境では、
下記の関数をmain関数の手前で宣言することで、
UART1へ出力されることを確認しました。

int _write( int file, char *ptr, int len )
{
   HAL_UART_Transmit(&huart1, ptr, len, 1000);
  return len;
}



STM32やARM系の場合、開発環境やコンパイラの組み合わせが1種類ではないため、
なかなかGoogle先生に聞いてもジャストな回答を得られないのが難点です。

posted by Crescent at 00:00| Comment(1) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
「UART設定とPrintf」は、助かりました。
”syscalls.cファイル”を使う方法は、私の理解を超えていて分かりませんでしたので。
Posted by tomio at 2021年02月02日 18:41
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック