i.MX6ULL终结者RS232驱动测试及RS485测试
文章目录
- 1 RS232驱动测试
- 1.1 编写应用测试程序
- 1.2 运行测试
- 2 RS485测试
1 RS232驱动测试
1.1 编写应用测试程序
本实验例程路径:i.MX6UL终结者光盘资料/06_Linux驱动例程/19_uart
创建uart_test.c应用测试程序,具体内容如下:
1 #include <stdio.h>2 #include <string.h>3 #include <unistd.h>4 #include <sys/types.h>5 #include <sys/stat.h>6 #include <fcntl.h>7 #include <termios.h>8 #include <errno.h>9 #include <poll.h>10 11 int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)12 {13 struct termios newtio,oldtio;14 if ( tcgetattr( fd,&oldtio) != 0) {15 perror("SetupSerial 1");16 return -1;17 }18 bzero( &newtio, sizeof( newtio ) );19 newtio.c_cflag |= CLOCAL | CREAD;20 newtio.c_cflag &= ~CSIZE;21 22 switch( nBits )23 {24 case 7:25 newtio.c_cflag |= CS7;26 break;27 case 8:28 newtio.c_cflag |= CS8;29 break;30 }31 32 switch( nEvent )33 {34 case 'O':35 newtio.c_cflag |= PARENB;36 newtio.c_cflag |= PARODD;37 newtio.c_iflag |= (INPCK | ISTRIP);38 break;39 case 'E':40 newtio.c_iflag |= (INPCK | ISTRIP);41 newtio.c_cflag |= PARENB;42 newtio.c_cflag &= ~PARODD;43 break;44 case 'N':45 newtio.c_cflag &= ~PARENB;46 break;47 }48 49 switch( nSpeed )50 {51 case 2400:52 cfsetispeed(&newtio, B2400);53 cfsetospeed(&newtio, B2400);54 break;55 case 4800:56 cfsetispeed(&newtio, B4800);57 cfsetospeed(&newtio, B4800);58 break;59 case 9600:60 cfsetispeed(&newtio, B9600);61 cfsetospeed(&newtio, B9600);62 break;63 case 115200:64 cfsetispeed(&newtio, B115200);65 cfsetospeed(&newtio, B115200);66 break;67 case 460800:68 cfsetispeed(&newtio, B460800);69 cfsetospeed(&newtio, B460800);70 break;71 default:72 cfsetispeed(&newtio, B9600);73 cfsetospeed(&newtio, B9600);74 break;75 }76 if( nStop == 1 )77 newtio.c_cflag &= ~CSTOPB;78 else if ( nStop == 2 )79 newtio.c_cflag |= CSTOPB;80 newtio.c_cc[VTIME] = 0;81 newtio.c_cc[VMIN] = 0;82 tcflush(fd,TCIFLUSH);83 if((tcsetattr(fd,TCSANOW,&newtio))!=0)84 {85 perror("com set error");86 return -1;87 }88 89 // printf("set done!\n\r");90 return 0;91 }92 int main(int argc , char **argv)93 {94 int fd,wr_static,ret,nread,count=0;95 char *buffer = "hello world!\r\n";96 char buff[8];97 int i;98 99 if(argc < 3)
100 printf("Usage ...");
101
102 printf("\r\n uart__test start\r\n");
103
104 char *uart = argv[1];
105
106 if((fd = open(uart, O_RDWR|O_NOCTTY|O_NDELAY))<0){107 printf("open %s is failed",uart);
108 }
109 else {110 printf("open %s is success\n",uart);
111 set_opt(fd, 115200, 8, 'N', 1);
112 }
113
114 if(atoi(argv[2]) == 0)
115 {116 while(1){117 if (ret == 0)
118 printf("write time out\n");
119 else{120 ret = write(fd,buffer, strlen(buffer));
121 sleep(1);
122 }
123 }
124 }
125
126 else if(atoi(argv[2]) == 1)
127 {128 memset(buff,0,8);
129 while(1){130 while((nread = read(fd,buff,8))>0){131 //count+=nread;
132 //printf("count = %d\r\n",count);
133 printf("read: ");
134 for(i = 0; buff[i] != 0; i++)
135 printf("%c",buff[i]);
136 printf("\r\n");
137 memset(buff,0,8);
138 }
139 }
140 }
141
142 close(fd);
143 return 0;
144 }
第11~91行,用于设置串口的波特率。
第92行,main函数需要两个参数,第一个参数是串口的设备节点文件,比如/dev/ttymxc2,第二个参数选择读写数据,0:写数据,1:读数据。
第111行,当打开串口设备文件成功时,设置串口参数为:115200/8/N/1。用户可以根据实际情况修改。
第114~124行,当指令为写数据时执行。使用sleep函数延时,1s发一次数据。
第126~140行,当指令为读数据时执行。
1.2 运行测试
首先使用下面的命令编译应用测试程序:
arm-linux-gnueabihf-gcc -o uart_test uart_test.c
编译成功,得到uart_test应用程序。
然后开始测试RS232功能,因为RS232是TTL电平所以需要USB转TTL电平设备,然后连接开发板上的uart3引脚,在电脑打开USB转TTL电平设备的终端,如图 1.2.1所示:
图 1.2.1
选择正确的port端口,应用程序中默认波特率为115200,所以设置波特率为115200,然后连接设备。
拷贝编译好的uart_test应用测试程序到开发板中,执行下面命令进行写数据实现:
./uart_test /dev/ttymxc2 0 &
运行结果如图 1.2.2所示:
图 1.2.2
使用下面的命令进行读数据:
./uart_test /dev/ttymxc2 1 &
运行结果如图 1.2.3所示:
图 1.2.3
应用程序每次接受8个字节的数据,可以看出运行正常。
2 RS485测试
其实RS485测试和RS232测试流程一样,只不过接口不一样,需要使用USB转485设备。应用测试程序也是一样的。在这里就不重复测试了,用户可以自己试验一下。
i.MX6ULL终结者RS232驱动测试及RS485测试相关推荐
- i.MX6ULL终结者Linux RS232/485驱动实验i.MX6UL UART驱动分析
文章目录 1 uart的platform驱动框架 2 uart_driver初始化 3 uart_port初始化和注册 4 imx_pops结构体 1 uart的platform驱动框架 首先看一下在 ...
- uart ttl通讯测试可以短接吗_精讲!UART、RS232、RS422、RS485,绝了
有源元件和无源元件的区别 超详细的元器件分类大全-电阻.电容.电感 (点击上方红字,即可获取) 通讯问题,和交通问题一样,也有高速.低速.拥堵.中断等等各种情况.如果把串口通讯比做交通,UART比作车 ...
- rs232串口驱动_RS232与RS485在性能上有啥区别和联系?老电工总结分析,一目了然...
串口是一种非常通用的设备接口,是仪器仪表设备常用的通信接口,常用于远程采集设备数据或者实现远程控制.串口的开发也比较简单,它是很多工程师最喜欢的接口之一. 常见的串口协议有RS-232.RS-422. ...
- 北京迅为i.mx6ull终结者开发板使用手册+嵌入式Linux开发指南+裸机手册下载地址
i.MX6ULL终结者三大手册,加速学习和开发速度,一秒化无形! <嵌入式Linux开发指南>+<开发板使用手册>+<裸机使用手册> 详细手册点击链接下载:http ...
- RS-232、RS-422与RS-485标准
一.RS-232.RS-422与RS-485的由来 RS-232.RS-422与RS-485都是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EI ...
- 422器件与lvds接收器的区别_一文读懂RS232与RS422及RS485三者之间的特性与区别
好多人说,现在都网络时代了,咋还谈到了什么这个话题呢?其实想想很简单,这个是建立在原来工业控制网络基础上. 凡是从业安防十几年以上的基本上都用过485传输设备,那时候云台是需要单独控制线的.即使是在N ...
- 031_Linux驱动下的RS485总线
一.RS485硬件原理 差分对传输数据的原理,IO数据的传输------->差分对. RS232传输的距离在15米以下,RS485传输距离是几十米到1000米以上. 为什么485可以传输这么远? ...
- i.MX6ULL终结者外设模块功能验证
文章目录 1. RC522模块测试 2. 步进电机模块测试 3. GPS模块测试 4. zigbee模块测试 5. 继电器模块测试 1. RC522模块测试 MF RC522 是应用于13.56MHz ...
- 串口/COM口、USB、RS232、RS422、RS485的区别
这些名字初了解总是容易弄混,网上总是没有将这些东西做一个明确的分类.我尝试通过资料进行分类 串口/COM口.USB是物理接口形式,属于硬件物理层面. RS232.RS422.RS485,他们都是由美国 ...
- 详解 - RS232、RS422、RS485 联系与区别
博主福利:100G+电子设计学习资源包! http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5 ...
最新文章
- 11.11大促来袭,京东如何保障云安全?
- SubSonic数据库操作
- SpringMVC(十一) RequestMapping获取Cookie值
- 用户体验设计案例分析
- NeHe OpenGL课程 网址整理
- matlab的diray在哪,matlab笔记
- 第58课 百钱买百鸡(完整) 3.完善程序 (《小学生C++趣味编程》)
- BamlViewer修改
- 微软笔试题 《Image Encryption》
- 微软drive服务器,OneDrive:微软云存储服务
- 实战ASP.NET访问共享文件夹
- matlab 用循环求和,matlab求和不用循环
- JSON在线序列化网站
- 资本运作模式(融资与投资) - 运营管理文章
- matlab ols regress,计量经济学简单线性回归OLS的Matlab程序.pdf
- 【详细】TMS软件十大品牌推荐!
- 计算机超级皇冠关键词是什么,搜狗推广服务
- dell更换硬盘识别不了新的硬盘
- 若用MASM写操作系统的启动部分如何实现? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
- LeetCode Weekly Contest 25 之 545.Boundary of Binary Tree