在程序中,很容易配置串口的属性,这些属性定义在结构体struct termios中。

关于termios的详细介绍,可以另行查资料,或者参考:详解linux下的串口通讯开发:http://blog.itpub.net/24790158/viewspace-1041147/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<termios.h>
#include<string.h>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; //CLOCAL:忽略modem控制线  CREAD:打开接受者newtio.c_cflag &= ~CSIZE; //字符长度掩码。取值为:CS5,CS6,CS7或CS8switch( 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); // INPACK:启用输入奇偶检测;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; //CSTOPB:设置两个停止位,而不是一个else if ( nStop == 2 )newtio.c_cflag |=  CSTOPB;newtio.c_cc[VTIME]  = 0; //VTIME:非cannoical模式读时的延时,以十分之一秒位单位newtio.c_cc[VMIN] = 0; //VMIN:非canonical模式读到最小字符数tcflush(fd,TCIFLUSH); // 改变在所有写入 fd 引用的对象的输出都被传输后生效,所有已接受但未读入的输入都在改变发生前丢弃。if((tcsetattr(fd,TCSANOW,&newtio))!=0) //TCSANOW:改变立即发生{perror("com set error");return -1;}printf("set done!\n\r");return 0;
}int main(void)
{int fd1,nset,nread,ret;char buf[100]={"test com data!...........\n"};char buf1[100];fd1 = open( "/dev/ttySAC0", O_RDWR);if (fd1 == -1)exit(1);printf("open  SAC0 success!!\n");nset = set_opt(fd1, 9600, 8, 'N', 1);if (nset == -1)exit(1);printf("SET  SAC0 success!!\n");printf("enter the loop!!\n");while (1){ memset(buf1, 0, sizeof(buf1));ret = write(fd1, buf, 100);if( ret > 0){printf("write success!  wait data receive\n");}nread = read(fd1, buf1, 100);if(nread > 0){printf("redatad: nread = %s\n\n\r", buf1);}sleep(1);//nread = read(fd1, buf1,1);//if(buf1[0] == 'q')//break;}close(fd1);return 0;
}

用arm-linux-gcc交叉编译后在开发板上运行,将9口串口的2 3短接:

/ # ./com
open  SAC0 success!!
set done!
SET  SAC0 success!!
enter the loop!!
write success!  wait data receive
write success!  wait data receive
write success!  wait data receive
write success!  wait data receive
write success!  wait data receive
write success!  wait data receive
redatad: nread = test com data!...........write success!  wait data receive
redatad: nread = test com data!...........write success!  wait data receive
redatad: nread = test com data!...........

Linux tty串口测试程序相关推荐

  1. linux练习 串口跟进程6,linux下串口测试程序

    linux下串口测试程序 通过简单的参数配置,执行文件+串口号+波特率 #include stdio.h #include stdlib.h #include unistd.h #include sy ...

  2. linux设备驱动,tty串口编程 如何查看linux下串口是否可用?串口名称等

    如何查看linux下串口是否可用?串口名称等? http://zhidao.baidu.com/question/419148559.html 查看串口是否可用,可以对串口发送数据比如对com1口,e ...

  3. Linux:TTY串口接收中断

    Linux的串口接收中断一般都是使能的,无论是否是DMA接收. 当串口接收到数据的时候,会调用 stm32_usart_push_buffer_dma函数.在这个函数内部向用户层发送信号,然后就可以调 ...

  4. linux 控制虚拟串口,linux虚拟串口控制器实现-适用于无开发板学习tty driver-好向圈...

    在前面几章,我们介绍了tty子系统的框架.数据结构.tty驱动的注册与注销等内容,本章我们借助 之前学习的内容开发一个虚拟的串口控制器驱动,以便我们理解开发串口驱动的步骤及驱动开发实践. 本次实现的虚 ...

  5. linux内核串口调试,linux 串口调试方法

    linux 串口调试方法 作者:syhdjf 发布于:2015-4-8 16:41 最近项目上用到linux下的串口,与下级模块的通信出了些问题,所以写了个小程序想要测试下串口,物理连接是PC端串口调 ...

  6. 树莓派slam_SLAM+语音机器人DIY系列:(五)树莓派3开发环境搭建——6.树莓派USB与tty串口号绑定...

    摘要 通过前面一系列的铺垫,相信大家对整个miiboo机器人的DIY有了一个清晰整体的认识.接下来就正式进入机器人大脑(嵌入式主板:树莓派3)的开发.本章将从树莓派3的开发环境搭建入手,为后续ros开 ...

  7. read接收不全linux,linux下串口读写有关问题 read 一次读不全(5)

    当前位置:我的异常网» Linux/Unix » linux下串口读写有关问题 read 一次读不全 linux下串口读写有关问题 read 一次读不全(5) www.myexceptions.net ...

  8. linux虚拟串口及远程访问

    1. 虚拟终端概念 linux中有很多终端,如下简单介绍下各种终端或串口的概念. 1.1 tty:终端设备的统称 tty是Teletype或TeletypeWriter的缩写,中文翻译为电传打字机.电 ...

  9. Linux 下串口编程(C++ 程序设计)

    串口通信是最简单的通信方式.即使在USB 非常流行的今天,依然保留了串行通信的方式.网络上已经有大量关于Linux下 C++ 串口编程的文章,但是我依然要写这篇博文.因为网络上的资料不是内容太多,就是 ...

最新文章

  1. 数据中心“泡澡”散热,阿里云启用全球最大液冷数据中心支撑双11
  2. 转:国外科技论文写作资源
  3. PHP支付接口教程,详解微信支付(二)
  4. 深入理解JVM原理之编译openjdk7
  5. Triangle Leetcode
  6. Android学习问题:关于AlertDialog中自定义布局带有的EditText无法弹出键盘
  7. 手机来电秀怎么开启_360手机卫士怎么设置来电秀 360手机卫士来电秀设置方法...
  8. 昆明大学津桥学院计算机科学与技术,昆明理工大学津桥学院计算机科学与技术专业2015年在河南理科高考录取最低分数线...
  9. kdj指标主要看哪个值_悟空CRM:在线crm主要看这两个指标,都非常重要!
  10. android paint 线宽_android Paint 设置线宽setStrokeWidth()的单位
  11. IO之StringIO和BytesIO
  12. 如何在Swift中使用CoreData设置有用的自动完成UITextField
  13. vb access mysql_vb连接access数据库
  14. Inno Setup 简体中文语言包
  15. Java中计算包含汉字字符串长度的方法
  16. word打开wps文件乱码_金山wps2007打开word2007文件为什么是乱码
  17. 解决Markdown在线编辑器不能换行的问题
  18. 学员心声--元气少女缘结华为
  19. python 使用精灵代理
  20. 凭算法突围,一战赚了 1090 亿,“恐怖” 的张一鸣!

热门文章

  1. 整理38款国外的一些免费虚拟主机,云计算,看看你使用过哪几个
  2. iptable详细配置
  3. 大数据入门第零天——总体课程体系概述
  4. 线性回归原理及实现(一):最小二乘法
  5. js 的数组怎么push一个对象
  6. 测试技术-测试策略与类型
  7. 创建桌面快捷方式及锁定到任务栏
  8. WS2812原理及实现
  9. 发送邮件服务器错误怎么更改,邮件发不出去 服务器错误550怎么解决?
  10. 计算机操作员 word2003 设置表格的跨页断行属性,不可以,word中的表格属性不勾选“允许跨页断行”为什么还是断行了?-为什么word跨页表格,word表格不能跨页...