没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Linux 串口编程分析
这个话题,大家可能再熟悉不过了,网上资料很多,因为这是 linux 下编程比较重要的一个方面,懂这
方面的人很多;这里我只是想给初学者简单的介绍下这方面的知识:
串口编程其实说白了, 是拿根串口线把电脑和所要控制的机器连接起来,然后在通过编程的方式对
下位机进行发送指定的数据或进行控制,或进行传输,然后在接受下位机反馈回来的信息提示是否已
经正确。是不是好俗!
串口是计算机上一种非常通用设备通信的协议,常用 PC 机上包含的是 RS232 规格的串口,当然,除了
RS232 ,还有 RS485 和 RS422 两种规格,用于不同的设备通信;这里主要是介绍 RS232 串口编程。
在串口编程中, 比较重要的是串口的设置,我们要设置的部分包括 波特率,数据位,停止位,奇偶
校验位;要注意的是,每台机器的串口默认设置可能是不同的,如果你没设置这些,仅仅按照默认设
置进行发送数据,很可能出现 n 多异想不到而又查不出来的情况;所以,在真正通讯前,我们必须设
置这些:
下面就开始介绍这些基本设置的函数,(其实都是些固定框架,程序中稍微改改就行)~o~
1.设置波特率
注 意每台机器都有输出和输入接受信息的速度 ,所以用 cfsetispeed 和 cfsetospeed 来分别设置;注
意到 struct termios 这样一个结构,它包括了串口端所有的设置,下面还要用到。它在 termios.h 中被
定义。。还有一个地方比较难以理解,为什么设置了 speed_arr 和 name_arr 两个数组,这是因为在
linuxe 下,系统为波特率专门准备了一张表用 B38400,B19200......代替,而我们实际上传进 去的只能是
38400,19200 这些值,所以我们拿我们传进去的和 name_arr 进行比较,如果相等则从系统对照表中取出
相应值进行设置,如果不等证 明传的值在系统对照表中没有,则不进行设置。
int speed_arr[] = { B38400, B19200, B9600, B4800, B2400, B1200, B300,//
B38400, B19200, B9600, B4800, B2400, B1200, B300, };
int name_arr[] = {38400,19200,9600,4800,2400,1200,300,
38400,19200,9600, 4800, 2400, 1200,300, };
void set_speed(int fd, int speed)
{
int i;
int status;
struct termios Opt; //定义了这样一个结构
tcgetattr(fd, &Opt); //用来得到机器原端口的默认设置
for ( i= 0;i < sizeof(speed_arr) / sizeof(int);i++)
{
if(speed == name_arr[i]) //判断传进来是否相等
{
tcflush(fd, TCIOFLUSH); //刷新输入输出缓冲
cfsetispeed(&Opt, speed_arr[i]); //这里分别设置
cfsetospeed(&Opt, speed_arr[i]);
status = tcsetattr(fd, TCSANOW, &Opt); //这是立刻把 bote rates 设置真正写到串口中去
if(status != 0)
perror("tcsetattr fd1"); //设置错误
return;
资源评论
- 虎墩2014-09-06上传资源最大的问题是没有对资源做说明! 所以,不能点评一颗星
me1001
- 粉丝: 59
- 资源: 65
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功