0

ubuntuのシリアル通信に問題があります。Zigbee ノードに接続する C++ コードを書いていますが、問題は Zigbee の構成ではありません。GTKTERM(ubuntu用の通常のシリアル端末)がデータを正しく読み込むので。

シリアル接続の構成は簡単です。

8N1 9600 ボー、CTSRTS なし、ソフトウェア フロー制御なし。ほとんどの文字は正しいですが、一部が間違っているため、私の設定には小さなエラーがあるはずです。

これは、接続をセットアップするためのコードです。

int fd = open(adres , O_RDWR | O_NOCTTY | O_NDELAY);

struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
options.c_cflag |= (CLOCAL | CREAD);
// no parity 8N1
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;

tcsetattr(fd, TCSANOW, &options);

また、これらの構成を変更し、プログラムを変更して再度実行すると、これらの構成がデフォルトに設定されていないことに気付きました。したがって、それらを変更しない限り、プログラムの独立した実行間で同じになります。たぶん、誰かがすべてのデフォルトのリストを持っているので、起動時にいつでもデフォルト値を復元できます。(シリアル通信ストリームから読み取るために fopen() を使用する 2 番目のプログラムを取得しました。このプログラムは、このコードを最初に実行して正しい構成を設定したときにのみ「機能」します)

ここで何がうまくいかないのですか?私はこれを読みました: http://www.easysw.com/~mike/serial/serial.html しかし、それを理解することはできません.

私も試したフラグは次のとおりです。

options.c_cflag |= CRTSCTS;   // hardware flow control
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); //raw input mode
options.c_oflag &= ~OPOST;                  // raw output mode
options.c_iflag |= (INPCK | ISTRIP);    // parity check
options.c_iflag &= ~(IXON | IXOFF | IXANY); //disable flow control

良い結果がなければ。さらに詳しい情報が必要な場合は、お尋ねください。

4

1 に答える 1

0

XBee モジュールを使用している場合は、Digi が XBee ハードウェアと通信するためにオープン ソースとしてリリースしたANSI C XBee ホスト ライブラリを参照してください。XBee を使用していない場合でも、おそらくシリアル ライブラリを再利用できます。これらは POSIX、Win32、さらには DOS (COM1 のみ) をサポートしています。

于 2013-02-02T05:19:33.360 に答える