문제

나는 XBEE 라디오를 사용하고 있으며 Linux (Ubuntu 9.10)를 사용하고 있으며 XBEE는 코드를 사용할 때 직렬 포트를 통해 NULL 값을 보내는 것으로 보이지 않습니다. XCTU 프로그램 (별도 Wind

7E 00 20 95 00 13 A2 00 40 3B

등 ... 완벽합니다. 그러나 내 코드를 사용하여 새 XBEE가 네트워크에 가입하면 다음을 볼 수 있습니다.

7E 20 95 13 A2 40 3B

직렬 포트를 여는 방법은 다음과 같습니다

struct termios options;
int port;

port = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK);
tcgetattr(port, &options);
bzero(&options, sizeof(options));

options.c_cflag = B9600 | ~CRTSCTS | CS8 | CLOCAL | CREAD;

tcsetattr(port, TCSANOW, &options);

나는 그 코드가 무엇을하는지에 대한 나의 이론을 가지고 있지만, 나의 이론은 분명히 틀렸다. 9600, 8N1, 흐름 제어가없는 포트를 열려고합니다. 당신은 내가 또한 Serial-> USB 드라이버를 사용하고 있음을 알 수 있지만, 데이터를 얻는 것처럼 보이기 때문에 부분이 작동한다고 확신합니다.

내 추측은 내가 bzero 옵션을 할 때 0x00을 제어 숯으로 만들고 있습니까? 잘 모르겠습니다. Bzero 옵션이 없으면 한 번에 5 바이트 만 읽을 수 있으며 데이터를 잃을 수 있습니다. 흐름 제어 또는 보드 속도 문제가있는 것 같은 느낌이 들기 때문에 bzero () 그리고 이제는 널을 얻지 못합니다.

또한 Linux 시스템에서 Minicom을 사용하고 출력을 캡처했습니다. 나는 동일한 정보를 얻지 못합니다. 내 코드가 직렬 포트를 Minicom이 변하지 않는 상태로 설정했을 수 있습니까? 나는 길을 잃었다.

도와 주셔서 감사합니다!

도움이 되었습니까?

해결책

초기화 c_cflags 기본적으로 설정 한 비트 음성을 사용하여 틀린 것 같습니다. 모두 옆에 비트 CRTSCTS:

options.c_cflag = ... | ~CRTSCTS | ...;

당신은 그냥 나가야합니다 CRTSCTS 해당 플래그를 설정하지 않아야하는 경우.

다른 팁

Digi가 출시되었습니다 XBEE_ANSIC_LIBRARY, API 모드에서 XBEE 모듈과 통신하기위한 ANSI C 코드의 오픈 소스 (MPL 2.0) 라이브러리. POSIX (Linux, BSD, Mac OS X, Cygwin), Windows (Mingw/MSYS), DOS (OpenWatcom) 및 일부 임베디드 플랫폼을 지원합니다.

Ubuntu에서 여전히 C 코드를 작성하는 경우 관심이있을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top