PDG2で生成されるソースコードを用いたシリアル通信について

お世話になっております。

マイコン初心者にアドバイスをお願いいたします。

PDG2(V.2.09)を用いてe2 studio(V.6.0.0)でソースコードを生成し、

マイコン(RX63T)とTeraTerm(V.4.96)でシリアル通信を行っています。

E1デバッガを用いてPDG2のライブラリファイルの動作を確認しているのですが、

TeraTermのマクロで4byteのデータ”ABCD”を送信しても、

ソースコード内のR_PG_SCI_StartReceiving_C1(data, 4);のdata内に1byteしか書き込まれていません。

ソースコード

void main(void)
{
while(1)
{
//R_PG_SCI_ReceiveAllData_C1(data,4);
//R_PG_SCI_SendAllData_C1(data,4);
R_PG_SCI_StartReceiving_C1(data, 4);  ☆ここに1byteのデータしか入っていません。
R_PG_SCI_StartSending_C1(data, 4);    ☆ここに1byteのデータしか入っていません。
}
}

//全データを受信すると呼び出される受信終了通知関数
void Sci1ReFunc(void)
{
//SCI1通信終了
R_PG_SCI_StopCommunication_C1();
}
//全データが送信されると呼び出される送信終了通知関数
void Sci1TrFunc(void)
{
//SCI1通信終了
R_PG_SCI_StopCommunication_C1();
}

想定としては、data内に4byteのデータが格納されるはずなのですが、うまくできません。

分かる方ご教授お願いいたします。

8666.RX63T_3.zip

Parents
  • こんにちは。circleです。

    RX63Nで開発環境はCS+になりますが、過去の投稿にある
    以下が参考になるのではないかと思います。
     ↓
    japan.renesasrulz.com/.../rx63n-sci
  • circleさん
    回答ありがとうございます。
    そちらの投稿を参考にしていましたが、uint8_t send_buf[] =”Hello World"となっており、
    私もuint8_t data[4]=”ABCD"とするとうまく通信できるのですが、
    TeraTermのマクロを使用して”ABCD"を送信しようとするとうまくいかずに困っています…
  • わわいです

    >私もuint8_t data[4]=”ABCD"とするとうまく通信できるのですが、

    あ、それダメですw
    "ABCD" という文字列は5文字分必要です。文字列終端の '\0'が入るところが必要となります。

    #最初の質問の data はどういう定義になってるんだろう。。

    追記:ああ、元の送受信関数は文字列の想定でもないからこれでもいいのか。
    ドキュメント読む限り、コード生成のところで通知関数を登録するようになってるとみえるけど、そこらへんどーしました?
       

Reply
  • わわいです

    >私もuint8_t data[4]=”ABCD"とするとうまく通信できるのですが、

    あ、それダメですw
    "ABCD" という文字列は5文字分必要です。文字列終端の '\0'が入るところが必要となります。

    #最初の質問の data はどういう定義になってるんだろう。。

    追記:ああ、元の送受信関数は文字列の想定でもないからこれでもいいのか。
    ドキュメント読む限り、コード生成のところで通知関数を登録するようになってるとみえるけど、そこらへんどーしました?
       

Children
  • わわいさん
    回答ありがとうございます。
    通知関数の登録はPDG2上で設定を行い、そこで生成される通知関数を用いています。
  • わわいです
    なら、その通知関数が呼び出されるまで待つ処理をあなたのプログラムに追加すれば、あなたの意図通りの動作をするようになります。
  • わわいさん
    回答ありがとうございます。
    そもそも1byteしか”data”の中に格納されていないので、
    全データ受信が完了しておらず、通知関数が呼ばれていません…
  • わわいです
    そりゃ通知関数が呼ばれる前に読みに行ったらそりゃ 1byte でしょ。
    呼ばれるまで待たなきゃ。

    いつまでたっても呼ばれない、というなら、Teratermのマクロがおかしくて4バイト送信してないか、あなたのコードが根本的におかしいか、というはなしになります。

    CPUのRxDをオシロで見て、信号がちゃんと来ているか見てみればどーでしょうか。

  • わわいさん
    回答ありがとうございます。
    TeraTermのマクロは大丈夫だと思いますので、コードの方にミスがあると思います。
    オシロで信号の確認をしてみます。