シリアル通信のトラブル ターミナルソフトで、送出データが現れません

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

MCU:RX113

試作機にBluetoothモジュールを組み込むことになり、そのモジュールを繋ぐ前にインターフェースとして使用するシリアルインターフェースの準備を行いました。

ターミナルソフト(Teraterm)で送出されるデータを確認しようとしたのですが、データが現れません。

しかし、ロジアナではデータが見えています。 ※ さらにオシロでも観測してみましたが、振幅に問題点はありませんでした。

ループバックを試したところ、送出したデータは読めました。

割り込みは使っておらず、コード生成における設定では、詳細な設定項目の設定状況は次に示すとおりです。

  ・データ処理設定: DTCで処理する (送信データ・受信データ ともに)

  ・割り込み設定: 「受信エラー割り込み許可」のチェックを外しています。

  ・コールバック機能設定: 送信完了、受信完了 ともに、チェックは外しています。

 

主要なコードは、次の通りです。

//
// イニシャライズ
//

   HardwareSetup();        // ハードウェアセットアップ  <- この中に、R_SCI0_Create(); が書かれています。
   R_SCI0_Start();
   SCI0.SCR.BYTE = 0x70;

 

   if(TC_STATUS1_F & 0x0010){  // LINKボタンのチェック
     TC_STATUS1_F &= ~0x0010;  // LINKボタンフラグのクリア

     delay_ms(150);

     SCI0.TDR = 0x85;

     delay_ms(150);

   }

 

● 動作の説明

  試作機を起動したあと、「LINK」という名前のボタンを押すと、通信を開始するという仕様です。

  LINKボタンが押されるとフラグが立ち、フラグを見てデータを送出する仕組みになっています。

● ハードウェアについて

  TXD0、RXD0ともに、10KΩの外付け抵抗器でプルアップしています。

 

参考までですが、試作機と接続するパソコンのシリアルケーブルの末端のRXとTXを繋いでループバックさせてみましたところ、問題なくやり取りできました。

試作機が送出しているはずのデータがなぜパソコン側で受信されないのか、なにが阻害要因となっているのか、さっぱりわかりません。

大変お手数をおかけしますが、考えられる原因についてコメントをお願いします。

何卒よろしくお願いします。

  • 問題とは関係なさそうですが

       HardwareSetup();        // ハードウェアセットアップ  
    

    HardwareSetup() は r_cg_resetprg.c の PowerON_Reset() の中から呼んでないですか? 都合 2回呼んでないでしょうか?

  • Fujita様

    お世話になっております。
    御回答ありがとうございます。 
    職場の他の方のソースを参考にソースを組んでいたのですが、確かにr_cg_resetprg.cにHardwareSetup();があり、都合2回よんでいますね。
    mainのほうは必要なしとわかりましたので、コメントアウトしました。
    しかし、シリアル通信のデータは未だパソコンで確認できない状況が続いています。
  • 全く原因がわからず、お手上げ状態なのですが、RX113のRXD0(P21)/TXD0(P20)と同時に使用してはいけないピンや機能はありますでしょうか。
  • パールマン様、コード生成担当の鈴木です。
    コード生成が出力するSend関数をご参照ください。
    ノイズを防ぐため、Send関数呼び出し時にポートモードを変更しています。
    send関数を使わない場合、PORT2.PMR.BYTE |= 0x01U; の記述が必要です。
    (TXD0(P20), RXD0(P21)の設定の場合) 

    MD_STATUS R_SCI0_Serial_Send(uint8_t * const tx_buf, uint16_t tx_num)
    {
    MD_STATUS status = MD_OK;

    if (tx_num < 1U)
    {
    status = MD_ARGERROR;
    }
    else
    {
    gp_sci0_tx_address = tx_buf;
    g_sci0_tx_count = tx_num;
    /* Set TXD0 pin */
    PORT2.PMR.BYTE |= 0x01U;
    SCI0.SCR.BIT.TIE = 1U;
    SCI0.SCR.BIT.TE = 1U;
    }

    return (status);
    }
    以上、よろしくお願いします。
  • >試作機と接続するパソコンのシリアルケーブルの末端のRXとTXを繋いでループバック
    PCにUSBじゃないシリアルポートが付いていて当たり前だったころによく聞いたのが、市販ケーブルの「クロス」と「ストレート」を間違えており通信できなかったというものです。昔話ですが思い出したのでご参考まで。
  • わわいです
    >ターミナルソフト(Teraterm)で送出されるデータを確認しようとしたのですが、データが現れません。
    とありますが、PCとCPUはどうやってつないでるのでしょうか?
  • わわい様、じま様、鈴木様
    お世話になっております。
    御回答ありがとうございました。
    原因はどうやら使用していた「シリアルーUSB変換ケーブル」に問題があったようです。
    ADM3202を使用したインターフェースを使用しましたら、何事もなかったかのようにあっさり繋がりました。
    お騒がせしました。