请选择 进入手机版 | 继续访问电脑版

在linux下调试并测试串口驱动

[复制链接]
蝶蝶已蝶已蝶蝶 发表于 2021-1-3 12:02:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
在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;
  1. 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;
  1. 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))
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )