크 랜 베 리 파이 4 직렬 설정 및 사용
6121 단어 linux
sudo nano /boot/cmdline.txt
console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
꿰매다
sudo nano /boot/config.txt
:
dtoverlay=pi3-miniuart-bt
enable_uart=1
크 랜 베 리 파이 다시 시작
minicom 설치
sudo apt-get install minicom
minicom 통신 사용
minicom -b 9600 -o -D /dev/ttyAMA0
-b -D -o ,
트 리 베 리 파 이 를 연결 하 는 코드 를 작성 합 니 다.
직렬 코드 열기
int uart_open(int fd,const char *pathname)
{
assert(pathname);
/* */
fd = open(pathname,O_RDWR|O_NOCTTY|O_NDELAY|O_NONBLOCK);
if(fd == -1)
{
perror("Open UART failed!");
return -1;
}
/* , , 0*/
if(fcntl(fd,F_SETFL,0) < 0)
{
fprintf(stderr,"fcntl failed!
");
return -1;
}
return fd;
}
직렬 코드 설정
// 115200,0,8,'N',1
int uart_set(int fd,int baude,int c_flow,int bits,char parity,int stop)
{
struct termios options;
/* */
if(tcgetattr(fd,&options) < 0)
{
perror("tcgetattr error");
return -1;
}
/* */
switch(baude)
{
case 4800:
cfsetispeed(&options,B4800);
cfsetospeed(&options,B4800);
break;
case 9600:
cfsetispeed(&options,B9600);
cfsetospeed(&options,B9600);
break;
case 19200:
cfsetispeed(&options,B19200);
cfsetospeed(&options,B19200);
break;
case 38400:
cfsetispeed(&options,B38400);
cfsetospeed(&options,B38400);
break;
case 115200:
cfsetispeed(&options,B115200);
cfsetospeed(&options,B115200);
break;
case 230400:
cfsetispeed(&options,B230400);
cfsetospeed(&options,B230400);
break;
default:
fprintf(stderr,"Unkown baude!
");
return -1;
}
/* */
options.c_cflag |= CLOCAL;//
options.c_cflag |= CREAD;//
/* */
switch(c_flow)
{
case 0://
options.c_cflag &= ~CRTSCTS;
break;
case 1://
options.c_cflag |= CRTSCTS;
break;
case 2://
options.c_cflag |= IXON|IXOFF|IXANY;
break;
default:
fprintf(stderr,"Unkown c_flow!
");
return -1;
}
/* */
switch(bits)
{
case 5:
options.c_cflag &= ~CSIZE;//
options.c_cflag |= CS5;
break;
case 6:
options.c_cflag &= ~CSIZE;//
options.c_cflag |= CS6;
break;
case 7:
options.c_cflag &= ~CSIZE;//
options.c_cflag |= CS7;
break;
case 8:
options.c_cflag &= ~CSIZE;//
options.c_cflag |= CS8;
break;
default:
fprintf(stderr,"Unkown bits!
");
return -1;
}
/* */
switch(parity)
{
/* */
case 'n':
case 'N':
options.c_cflag &= ~PARENB;//PARENB: ,
options.c_iflag &= ~INPCK;//INPCK:
break;
/* , 2 */
case 's':
case 'S':
options.c_cflag &= ~PARENB;//PARENB: ,
options.c_cflag &= ~CSTOPB;//CSTOPB:
break;
/* */
case 'o':
case 'O':
options.c_cflag |= PARENB;//PARENB: ,
options.c_cflag |= PARODD;//PARODD: ,
options.c_cflag |= INPCK;//INPCK:
options.c_cflag |= ISTRIP;//ISTRIP: 7 , 8
break;
/* */
case 'e':
case 'E':
options.c_cflag |= PARENB;//PARENB: ,
options.c_cflag &= ~PARODD;//PARODD: ,
options.c_cflag |= INPCK;//INPCK:
options.c_cflag |= ISTRIP;//ISTRIP: 7 , 8
break;
default:
fprintf(stderr,"Unkown parity!
");
return -1;
}
/* */
switch(stop)
{
case 1:
options.c_cflag &= ~CSTOPB;//CSTOPB:
break;
case 2:
options.c_cflag |= CSTOPB;//CSTOPB:
break;
default:
fprintf(stderr,"Unkown stop!
");
return -1;
}
/* */
options.c_oflag &= ~OPOST;//OPOST: , c_oflag
/* */
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
/*
*ICANON:
*ECHO:
*ECHOE: EPASE Backspace,Space,Backspace
*ISIG:
*/
/* */
options.c_cc[VTIME] = 0;
options.c_cc[VMIN] = 1;//
/* , , */
tcflush(fd,TCIFLUSH);
options.c_iflag = 0;
options.c_oflag = 0;
options.c_lflag = 0;
/* */
if(tcsetattr(fd,TCSANOW,&options) < 0)
{
perror("tcsetattr failed");
return -1;
}
return 0;
}
크 랜 베 리 파이 수신 설정 완료 후 options.c 가 없 으 면iflag = 0; options.c_oflag = 0; options.c_lflag = 0;이 세 줄 의 코드 는 데이터 수신 이 불안정 할 수 있다.
직렬 코드 닫 기
int uart_close(int fd)
{
assert(fd);
close(fd);
return 0;
}
읽 기와 쓰기 직렬 포트
linux 인터페이스 함수 read 와 write 함 수 를 사용 하면 직렬 읽 기와 쓰 기 를 실현 할 수 있다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.