文章目录

  • 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测试相关推荐

  1. i.MX6ULL终结者Linux RS232/485驱动实验i.MX6UL UART驱动分析

    文章目录 1 uart的platform驱动框架 2 uart_driver初始化 3 uart_port初始化和注册 4 imx_pops结构体 1 uart的platform驱动框架 首先看一下在 ...

  2. uart ttl通讯测试可以短接吗_精讲!UART、RS232、RS422、RS485,绝了

    有源元件和无源元件的区别 超详细的元器件分类大全-电阻.电容.电感 (点击上方红字,即可获取) 通讯问题,和交通问题一样,也有高速.低速.拥堵.中断等等各种情况.如果把串口通讯比做交通,UART比作车 ...

  3. rs232串口驱动_RS232与RS485在性能上有啥区别和联系?老电工总结分析,一目了然...

    串口是一种非常通用的设备接口,是仪器仪表设备常用的通信接口,常用于远程采集设备数据或者实现远程控制.串口的开发也比较简单,它是很多工程师最喜欢的接口之一. 常见的串口协议有RS-232.RS-422. ...

  4. 北京迅为i.mx6ull终结者开发板使用手册+嵌入式Linux开发指南+裸机手册下载地址

    i.MX6ULL终结者三大手册,加速学习和开发速度,一秒化无形! <嵌入式Linux开发指南>+<开发板使用手册>+<裸机使用手册> 详细手册点击链接下载:http ...

  5. RS-232、RS-422与RS-485标准

    一.RS-232.RS-422与RS-485的由来 RS-232.RS-422与RS-485都是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EI ...

  6. 422器件与lvds接收器的区别_一文读懂RS232与RS422及RS485三者之间的特性与区别

    好多人说,现在都网络时代了,咋还谈到了什么这个话题呢?其实想想很简单,这个是建立在原来工业控制网络基础上. 凡是从业安防十几年以上的基本上都用过485传输设备,那时候云台是需要单独控制线的.即使是在N ...

  7. 031_Linux驱动下的RS485总线

    一.RS485硬件原理 差分对传输数据的原理,IO数据的传输------->差分对. RS232传输的距离在15米以下,RS485传输距离是几十米到1000米以上. 为什么485可以传输这么远? ...

  8. i.MX6ULL终结者外设模块功能验证

    文章目录 1. RC522模块测试 2. 步进电机模块测试 3. GPS模块测试 4. zigbee模块测试 5. 继电器模块测试 1. RC522模块测试 MF RC522 是应用于13.56MHz ...

  9. 串口/COM口、USB、RS232、RS422、RS485的区别

    这些名字初了解总是容易弄混,网上总是没有将这些东西做一个明确的分类.我尝试通过资料进行分类 串口/COM口.USB是物理接口形式,属于硬件物理层面. RS232.RS422.RS485,他们都是由美国 ...

  10. 详解 - RS232、RS422、RS485 联系与区别

    博主福利:100G+电子设计学习资源包! http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5 ...

最新文章

  1. 11.11大促来袭,京东如何保障云安全?
  2. SubSonic数据库操作
  3. SpringMVC(十一) RequestMapping获取Cookie值
  4. 用户体验设计案例分析
  5. NeHe OpenGL课程 网址整理
  6. matlab的diray在哪,matlab笔记
  7. 第58课 百钱买百鸡(完整) 3.完善程序 (《小学生C++趣味编程》)
  8. BamlViewer修改
  9. 微软笔试题 《Image Encryption》
  10. 微软drive服务器,OneDrive:微软云存储服务
  11. 实战ASP.NET访问共享文件夹
  12. matlab 用循环求和,matlab求和不用循环
  13. JSON在线序列化网站
  14. 资本运作模式(融资与投资) - 运营管理文章
  15. matlab ols regress,计量经济学简单线性回归OLS的Matlab程序.pdf
  16. 【详细】TMS软件十大品牌推荐!
  17. 计算机超级皇冠关键词是什么,搜狗推广服务
  18. dell更换硬盘识别不了新的硬盘
  19. 若用MASM写操作系统的启动部分如何实现? 其他开发语言 / 汇编语言 - CSDN社区 community.csdn.net
  20. LeetCode Weekly Contest 25 之 545.Boundary of Binary Tree

热门文章

  1. 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
  2. Java程序设计(基础)- 概述
  3. 《Java基础入门第2版》--黑马程序员 课后答案及其详解 第1章 Java开发入门
  4. FashionMNIST数据集国内可以用的下载地址
  5. 网络安全:9次实验带你学会网安
  6. 软件著作权申请教程模板材料下载
  7. 西安理工大学计算机考研备考指南(863数据结构)
  8. Java实现两个文件夹之间的同步(改进版)
  9. Java程序员必备的一些流程图/架构图(拿走不谢)
  10. MATLAB实现FFT算法