原创 ubuntu 串口通信 应用编程

2009-11-13 21:28 6715 8 9 分类: MCU/ 嵌入式
没找到ubuntu下用的图形串口工具,装一个minicom,使用不太习惯。
就顺便找了下串口编程相关的。
主要参考文档:http://www.ibm.com/developerworks/cn/linux/l-serials/index.html


串口操作需要的头文件

#include     <stdio.h>      /*标准输入输出定义*/
#include <stdlib.h> /*标准函数库定义*/
#include <unistd.h> /*Unix 标准函数定义*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> /*文件控制定义*/
#include <termios.h> /*PPSIX 终端控制定义*/
#include <errno.h> /*错误号定义*/

在 Linux 下串口文件是位于 /dev 下的


串口一 为 /dev/ttyS0


串口二 为 /dev/ttyS1


打开串口是通过使用标准的文件打开函数操作:

int fd; /*以读写方式打开串口*/
fd = open( "/dev/ttyS0", O_RDWR);
if (-1 == fd)
{ /* 不能打开串口一*/
  perror(" 提示错误!");
}


最基本的设置串口包括波特率设置,效验位和停止位设置。


串口的设置主要是设置 struct termios 结构体的各成员值。


struct termio
{ unsigned short c_iflag;/* 输入模式标志 */
unsigned short c_oflag;/* 输出模式标志 */
unsigned short c_cflag;/* 控制模式标志*/
unsigned short c_lflag;/* local mode flags */
unsigned char c_line; /* line discipline */
unsigned char c_cc[NCC]; /* control characters */
};

波特率设置


下面是修改波特率的代码:

struct  termios Opt;

tcgetattr(fd, &Opt);
cfsetispeed(&Opt,B19200); /*设置为19200Bps*/
cfsetospeed(&Opt,B19200);
tcsetattr(fd,TCANOW,&Opt);

在原文中,作者提供了代码下载,http://www.ibm.com/developerworks/cn/linux/l-serials/main.c

直接编译的话,需要自己定义FALSE, TRUE。
#define FALSE 0
#define TRUE  1


我编译后实测,是可以用的,后期主要考虑看有没有办法集成一个界面,
没做过linux下的界面编程,有空了尝试下。



文章评论1条评论)

登录后参与讨论

用户377235 2012-12-4 21:43

我也想做出图形界面。可惜能力有限
相关推荐阅读
walnutcy_696810119 2012-11-21 08:37
Linux下使用smartCOM调试串口
在Windows下的串口调试一直使用sscom,在Linux下只找到一个cutecom,用了几次,很不喜欢,就着手开发了一款自己的串口调试工具,smartCOM。 smartCOM介绍:http...
walnutcy_696810119 2012-03-29 18:12
【博客大赛】原创--测量基础:什么是测量
写在正文之前: 适逢EDNChina搞活动,而我本人也算在测量业工作,就一起作下笔记吧。若有错误,请大家一起斧正。笔者写本文一方面是梳理知识,另一方面也希望与大家探讨有关测量的知识、应用等,希...
walnutcy_696810119 2011-12-20 18:29
GLONASS 15年来,首次实现24颗星在轨可用
  EDN的博客改版后,不太好用,在SINA重开一个,不过重点改为关注GNSS行业新闻 http://blog.sina.com.cn/s/blog_7420cd1701012en9....
walnutcy_696810119 2011-12-20 17:49
逆向工程第一步:通信协议分析
工程中常有这样的事,想分析下其他知名公司产品中的通信协议,以便生产设计兼容产品。 1) 逆向工程,首先要了解产品,知己知彼,百战不怠;     去年受命想仿一款GARMIN的导航盒,但无法...
walnutcy_696810119 2011-11-14 11:30
通用代码调试方法 (Keil, VCC)
调试代码一般需要定位问题,这里给出一个解决方案, 一般的编译器均支持这些宏指令。   #define DEBUG_WALT_1113     1 extern void log_t...
我要评论
1
8
关闭 站长推荐上一条 /2 下一条