R5F1006AでUART送信が上手くいかない

お世話になります。

若山です。

R5F1006Aのプログラムを作成しています。

CS+のコード生成ツールを使用してプログラムを作成していますが、

UART1でR_UART1_Send()関数を使用して8バイト送信しようとしていますが、

波形を確認すると、1バイトor2バイトしか送信されておりません。

UARTの設定は下記の通りです。

ボーレート:115200bps

ストップビット:1bit

パリティ:偶数

データ長:8bit

データ送信方向:MSB

今までに他のRL78でプログラムを作成を何回も行っていますが、

こんな事は初めてです。

Top Replies

  • UART1.zip

    チョコです。

    簡単なプロジェクトを作成してみました。

    コード生成では、通信完了を明確にはサポートしていないので、そこを普通の変数を使ったフラグではなく、P30を使用しています。これをシミュレータのタイミングチャートで確認することで、8バイトが送信され、P30がハイになっていることを確認できました。詳細は添付のzipファイルを参照してください。

    以上

Parents
  • チョコです。

    これは、コード生成されたAPI関数の仕様を誤解しているのが原因ではないかと思われます。

    若山さんは、「R_UART1_Send()関数から戻ってきたら、送信は完了している」と考えてはいないでしょうか。

    コード生成されたR_UART1_Send()関数は、最初の送信データをUART1に書き込んだらすぐに関数から戻ってきます。決して、全てのデータの送信が完了した訳ではありません。

    全ての送信データの送信が完了するまで待つ必要があります。全データの送信完了を確認するには、(1キャラクタの)送信完了割り込みの中のcallback関数で送信完了フラグをセットして、そのフラグを確認する必要があります。手元にはUART0のプログラムしかありませんでしたので、その内容を以下に示します。ここで、if文のelse側が指定したデータが全て送信された場合の処理です。ここで呼び出しているr_uart1_callback_sendend();でフラグをセットしてください。main処理ではR_UART1_Send()関数を呼び出すときにフラグをクリアしておいてください。

    R_UART1_Send()関数を呼び出した後で、そのフラグがセットされるのを待ってください。

    以上

  • UART1.zip

    チョコです。

    簡単なプロジェクトを作成してみました。

    コード生成では、通信完了を明確にはサポートしていないので、そこを普通の変数を使ったフラグではなく、P30を使用しています。これをシミュレータのタイミングチャートで確認することで、8バイトが送信され、P30がハイになっていることを確認できました。詳細は添付のzipファイルを参照してください。

    以上

  • UART1B.zip

    チョコです。

    プロジェクトで、UART1の設定がおかしかったので、wakaさんの設定に合わせておきました。

    また、タイミングチャートの設定方法も追加しておきました。

    以上

Reply Children
No Data