前提・実現したいこと
Raspberry Pi3 を用いて UART 通信をしようと試みています.
言語は C++ 言語です.
具体的にはセンサから 10 秒ごとに 8 bitのデータが 500 個送られてくるので,その値を表示したいです.
BaudRate は 115200 であり,データビットは 8bit, ストップビットは 1bit です.
Raspberry Pi3 の設定 (UARTの有効化など) は完了しています.
read関数をもちいて該当のソースコードに示すような受信処理のループを作成したのですが,500 個のデータが表示されず,1 個や 2 個といった細切れ状態で表示されてしまいます.
また,表示される値も正確なものでないようです.
発生している問題・エラーメッセージ
length: 1 [0]: 255 length: 2 [0]: 253 [1]: 255 length: 1 [0]: 40
該当のソースコード
C++
1//ポートの設定 2#define PORT "/dev/serial0" 3 4//変数宣言 5uint8_t data[500]; 6int length; 7 8//オープン 9fd = open(PORT, O_RDWR); 10 if (fd < 0) { 11 printf("open error\n"); 12 return -1; 13 } 14 15//BaudRate など設定 (追記) 16struct termios tms; 17 18tms.c_cflag += CREAD; 19tms.c_cflag += CLOCAL; 20tms.c_cflag += CS8; 21tms.c_cflag += 0; 22tms.c_cflag += 0; 23 24cfsetispeed(&tms, 115200); 25cfsetospeed(&tms, 115200); 26 27cfmakeraw(&tms); 28tcsetattr(fd, TCSANOW, &tms); 29ioctl(fd, TCSETS, &tms); 30 31 32//受信処理ループ 33while(1) { 34 length = read(fd, data, sizeof(data)); 35 if (0 < length) { 36 printf(“\n length: %d\n”, length); 37 for(i = 0; i < length; i++) { 38 printf("[%d]: %u\n", i, data[i]); 39 } 40 } 41
試したこと
Raspberry Pi3側,センサ側ともに BaudRate を 56700 に変更したところ全く受信できなくなりました.