2014-01-18 3 views
0

Я новичок во встроенной системе на Linux. Я начинаю с простой программы последовательной связи на моем дружественном KIT, tiny6410, и у меня есть эта проблема. Это мой код:Последовательная связь с FriendlyARM KIT на Linux

#include <stdio.h> // standard input/output functions 
#include <stdlib.h> 
#include <string.h>  // string function definitions 
#include <unistd.h>  // UNIX standard function definitions 
#include <fcntl.h> // File control definitions 
#include <errno.h> // Error number definitions 
#include <termios.h> // POSIX terminal control definitionss 
#include <sys/time.h> // time calls 
#include <string.h> 

/* Ten file thiet bi cong com 
- tren PC: /dev/ttyUSB0 (USB2COM) 
- tren KIT: /dev/ttyS0; 
*/ 

int main(int argc, char** argv) 
{ 
    char ch; 
    int fd;// n; 
    char *DeviceName; 
    struct termios port_settings; //Cau truc de luu tru cau hinh uart 

if(argc>1) 
{ 
    DeviceName = (char*)malloc(strlen(argv[1])+1); 
    strcpy(DeviceName, argv[1]); //Lay tham so nhap vao 
    //printf("Device Name=%s\n", DeviceName); 
} 
else 
    DeviceName = "/dev/ttyUSB0"; //Cong com mac dinh 
//Open com port 
fd = open(DeviceName, O_RDWR | O_NOCTTY | O_NDELAY); 
if(fd<0) 
{ 
    printf("Open com port %s failed\n", DeviceName); 
    return fd; 
} 
fcntl(fd, F_SETFL, FNDELAY); /* Configure port reading */ 

//Cau hinh tham so com port 
//baudrate 9600, 8N1 
cfsetispeed(&port_settings, B9600); 
cfsetospeed(&port_settings, B9600); 

port_settings.c_cflag &= ~PARENB; //Set no parity 
port_settings.c_cflag &= ~CSTOPB; //Set 1 stop bit 
port_settings.c_cflag &= ~CSIZE; //Set 8 bit data using mask bit 
port_settings.c_cflag |= CS8; 
port_settings.c_cflag &= ~CRTSCTS; //No hadware hanshaking 

tcsetattr(fd, TCSANOW, &port_settings); // apply the settings to the port 

while(1) 
{ 
    char key = getchar(); 
    ch = key; 
    write(fd, &ch, 1); 
} 

close(fd); 
return 0; 

}

И я получил "открытый порт COM/DEV/ttyUSB0 не удалось" сообщение об ошибке.

+1

Проверьте значение 'errno' после' open' вызова , Не уверен в '/ dev/ttyUSB0', но для обычных COM-портов, таких как'/dev/ttyS0', вы должны запускаться как root, чтобы их можно было открыть. – mathematician1975

+0

Значение errno равно 16. Что это значит? –

+0

Используйте этот http://man7.org/linux/man-pages/man3/strerror.3.html, чтобы получить строку, которая сообщает вам, что ошибка основана на значении errno. – mathematician1975

ответ

0

Вы должны попытаться запустить свой код с указанием /dev/ttyS0, потому что обычно последовательный порт платы имеет это имя устройства, и вы должны запустить исполняемый файл с привилегиями суперпользователя

+0

Thx для ответа на ур. Я использовал конвертер USB в COM, поэтому я определил этот порт/dev/ttyUSB0. –

Смежные вопросы