お世話になっております。
マイコン初心者にアドバイスをお願いいたします。
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
わわいです そりゃ通知関数が呼ばれる前に読みに行ったらそりゃ 1byte でしょ。 呼ばれるまで待たなきゃ。 いつまでたっても呼ばれない、というなら、Teratermのマクロがおかしくて4バイト送信してないか、あなたのコードが根本的におかしいか、というはなしになります。
CPUのRxDをオシロで見て、信号がちゃんと来ているか見てみればどーでしょうか。
TOKさん、こんにちは。NoMaYです。(以前の別のスレッドの時から2ヶ月ほどでしょうか。)以前に関わったスレッド(PDG2+RX62N)でも、うまく受信が出来ない(その時は全く(?)受信出来ず)がありました。そのスレッドでは、最後どうなったかは分からなかったのですが、今回はひとまず1バイト受信出来ているということですね。ここまでの流れで、現在、以下のような状況なのだと考えています。・単に"ABCD"の送信は出来る・TeraTermからの"ABCD"を受信してTeraTermへエコーバックしようして、4バイト受信時に受信終了通知関数が呼び出されるようにした筈が、TeraTermから"ABCD"を送信した(筈)なのに呼び出されない・暫く待ってからデバッガでブレークさせて受信バッファを確認したら1バイトしか入っていなかったデバッガが使えるということですので、オシロで通信を確認してTeraTermから4バイト送信されていたら、以下を確認してみてはどうでしょうか?(もし、まだ確認されていなければ、ですが。)・単に"ABCD"を受信させようとした時には受信終了通知関数が呼び出されるのかどうか(デバッガでブレークポイントを設定してブレークするかどうか)
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); //4バイトのデータを受信する //R_PG_SCI_StartSending_C1(data, 4); //4バイトのデータを送信する }}//全データを受信すると呼び出される受信終了通知関数void Sci1ReFunc(void){ //SCI1通信終了 R_PG_SCI_StopCommunication_C1();}//全データが送信されると呼び出される送信終了通知関数void Sci1TrFunc(void){ //SCI1通信終了 R_PG_SCI_StopCommunication_C1();}
TOKさん、こんにちは。NoMaYです。先ほどの話の前に、TOKさんが投稿されたコードですが、while(1)の最後で受信完了待ちも送信完了待ちもしていませんね。これって、R_PG_SCI_StartReceiving_C1()やR_PG_SCI_StartSending_C1()が繰り返し呼ばれてしまうことになりませんか?
TOKさん、こんにちは。NoMaYです。もしかすると投稿が行き違ったかも知れませんので、(while(1)の最後ではありませんが、) 受信完了待ちさせる例を別スレッド(PDG2+RX63N+RSPI)に投稿したことがありますので、参考になれば。