У меня серьезные проблемы с связью rs232 в linux, поэтому я написал эту тестовую программу, чтобы убедиться, что другие части моей программы не мешают последовательной связи.
Программа, однако, не работает, так как я боялся, что проблема заключается в коде последовательного порта.
У меня есть ноутбук с Centos, на котором запущена программа, и он подключен к компьютеру с Windows XP, на котором запущен гипертерминал. код выполняется нормально в соответствии с проверкой ошибок, но в huperterminal ничего не отображается.
Последовательная установка пор, которую я пытаюсь достичь, составляет 115200 бод, 8 бит данных, 1 стоп-бит и четность метки.
Это программа:
#include <termios.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <ncurses.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int port, serial, i;
unsigned long nobw;
char buf[10];
struct termios options;
port = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (port == -1)
perror("open_port: Unable to open /dev/ttyS0 - ");
else
printf("port open \n");
tcgetattr(port, &options); // get current settings
cfsetispeed(&options, 115200); // set baud rate
cfsetospeed(&options, 115200); // set baud rate
options.c_cflag &= ~CSIZE; // Mask the character size bits
options.c_cflag |= CS8; // 8 bit data
options.c_cflag &= ~PARENB; // set parity to no
options.c_cflag &= ~PARODD; // set parity to no
options.c_cflag |= CSTOPB;//set mark parity by using 2 stop bits
options.c_cflag |= (CLOCAL | CREAD);
options.c_oflag &= ~OPOST;
options.c_lflag &= 0;
options.c_iflag &= 0; //disable software flow controll
options.c_oflag &= 0;
tcsetattr(port, TCSANOW, &options);// save the settings
ioctl(port, TIOCMGET, &serial);
serial |= TIOCM_DTR; // set DTR to high
ioctl(port, TIOCMSET, &serial);
for(i = 0; i < 10; i++)
{
buf[i] = i;
}
for(i = 0; i < 10; i++)
{
errno = 0;
nobw = write(port, buf, 1);
if(nobw == -1)
perror("WriteComm:");
else
printf("sent character %d \n", i);
}
return 0;
}
Это все сделано из учебников по интернатуре. Я понятия не имею, что я делаю, вы видите, где я ошибся?
также, если кто-нибудь знает, как сделать пространственный паритет, что также будет оценено.