在linux下调试并测试串口
在一般的驱动中都有串口驱动一般都是在menuconfig中选中,然后在dts中写下对应引脚就可以了,驱动的话一般对应板子都带了,本文就不外得讨论了,本文主要写如何测试串口是否正常工作。
总结:
1.将要驱动的串口硬件脚TX、RX和GND连线到串口板上,将串口板接上电脑。
2.打开串口调试助手,

3.写串口app测试步调,uart_recv和uart_send函数并执行某个步调,通过串口调试助手吸收或发送信息
附代码:
uart_recv.c
#include
#include
#include
#include
#include
#include
#include
#include
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
struct termios newtio,oldtio;
if ( tcgetattr( fd,&oldtio) != 0) {
perror(“SetupSerial 1”);
return -1;
}
bzero( &newtio, sizeof( newtio ) );
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE;
- switch( nBits ){ case 7: newtio.c_cflag |= CS7; break; case 8: newtio.c_cflag |= CS8; break;}switch( nEvent ){case 'O': newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); break;case 'E': newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; break;case 'N': newtio.c_cflag &= ~PARENB; break;}switch( nSpeed ){ case 2400: cfsetispeed(&newtio, B2400); cfsetospeed(&newtio, B2400); break; case 4800: cfsetispeed(&newtio, B4800); cfsetospeed(&newtio, B4800); break; case 9600: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break; case 115200: cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); break; case 460800: cfsetispeed(&newtio, B460800); cfsetospeed(&newtio, B460800); break; default: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break;}if( nStop == 1 ) newtio.c_cflag &= ~CSTOPB;else if ( nStop == 2 ) newtio.c_cflag |= CSTOPB; newtio.c_cc[VTIME] = 0; newtio.c_cc[VMIN] = 0; tcflush(fd,TCIFLUSH);if((tcsetattr(fd,TCSANOW,&newtio))!=0){ perror("com set error"); return -1;}// printf("set done!\n\r");return 0;
复制代码 }
void main()
{
int fd,nByte;
char *uart3 = “/dev/ttyS1”;
char buffer[512];
char *uart_out = “please input\r\n”;
memset(buffer, 0, sizeof(buffer));
if((fd = open(uart3, O_RDWR|O_NOCTTY))0){
buffer[nByte+1] = ‘\0’;
write(fd,buffer,strlen(buffer));
memset(buffer, 0, strlen(buffer));
nByte = 0;
}
}
}
}
uart_send.c
#include
#include
#include
#include
#include
#include
#include
#include
int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)
{
struct termios newtio,oldtio;
if ( tcgetattr( fd,&oldtio) != 0) {
perror(“SetupSerial 1”);
return -1;
}
bzero( &newtio, sizeof( newtio ) );
newtio.c_cflag |= CLOCAL | CREAD;
newtio.c_cflag &= ~CSIZE;
- switch( nBits ){case 7: newtio.c_cflag |= CS7; break;case 8: newtio.c_cflag |= CS8; break;}switch( nEvent ){case 'O': newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_iflag |= (INPCK | ISTRIP); break;case 'E': newtio.c_iflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; break;case 'N': newtio.c_cflag &= ~PARENB; break;}switch( nSpeed ){case 2400: cfsetispeed(&newtio, B2400); cfsetospeed(&newtio, B2400); break;case 4800: cfsetispeed(&newtio, B4800); cfsetospeed(&newtio, B4800); break;case 9600: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break;case 115200: cfsetispeed(&newtio, B115200); cfsetospeed(&newtio, B115200); break;case 460800: cfsetispeed(&newtio, B460800); cfsetospeed(&newtio, B460800); break;default: cfsetispeed(&newtio, B9600); cfsetospeed(&newtio, B9600); break;}if( nStop == 1 ) newtio.c_cflag &= ~CSTOPB;else if ( nStop == 2 )newtio.c_cflag |= CSTOPB;newtio.c_cc[VTIME] = 0;newtio.c_cc[VMIN] = 0;tcflush(fd,TCIFLUSH);if((tcsetattr(fd,TCSANOW,&newtio))!=0){ perror("com set error"); return -1;}return 0;
复制代码 }
void main()
{
int fd,wr_static,i=10;
char *uart3 = “/dev/ttyS1”;
char *buffer = “hello world!\n”;
[code]printf("\r\nitop4412 uart3 writetest start\r\n");if((fd = open(uart3, O_RDWR|O_NOCTTY|O_NDELAY)) |