没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux_C_C++串口读写串口读写
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"该标准规定采用一个 25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。传输距离在码元畸变小于 4% 的情况下,传输电缆长度应为 50 英尺。 Linux 操作系统从一开始就对串行口提供了很好的支持
资源详情
资源评论
资源推荐
Linux C/C++串口读写
串口简介
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的
使用。常用的串口是 接口(又称 )它是在 年
由美国电子工业协会()联合贝尔系统、 调制解调器厂家及计算机终端生
产厂家共同制定的用于串行通讯的标准。它的全名是数据终端设备()和
数据通讯设备()之间串行二进制数据交换接口技术标准该标准规定采用
一个 个脚的 连接器,对连接器的每个引脚的信号内容加以规定,还
对各种信号的电平加以规定。传输距离在码元畸变小于 的情况下,传输电
缆长度应为 英尺。
操作系统从一开始就对串行口提供了很好的支持
计算机串口的引脚说明
序号 信号名称 符号 流向 功能
发送数据
发送串行数据
接收数据
接收串行数据
请求发送
请求 将线路切换到
发送方式
允许发送
告诉 线路已接通可
以发送数据
数据设备准备好
准备好
信号地
信号公共地
载波检测
表示 接收到远程载波
数据终端准备好
准备好
振铃指示
表示 与线路接通,出现振
铃
串口操作
串口操作需要的头文件
#include <stdio.h> /*标准输入输出定义*/
#include <stdlib.h> /*标准函数库定义*/
#include <unistd.h> /*Unix 标准函数定义*/
#include <sys/types.h> /*数据类型,比如一些 XXX_t 的那种
*/
#include <sys/stat.h> /*定义了一些返回值的结构,没看明
白*/
#include <fcntl.h> /*文件控制定义*/
#include <termios.h> /*PPSIX 终端控制定义*/
#include <errno.h> /*错误号定义*/
打开串口
在 下串口文件是位于 !"#$下的
串口一 为 !"#$!%%&
串口二 为 !"#$!%%&
打开串口是通过使用标准的文件打开函数操作:
int fd;
/*以读写方式打开串口*/
fd = open( "/dev/ttyS0", O_RDWR);
if (-1 == fd){
/* 不能打开串口一*/
perror(" 提示错误!");
}
设置串口
最基本的设置串口包括波特率设置,效验位和停止位设置。
串口的设置主要是设置 '%()%%#(*+'结构体的各成员值。
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); /*获得当前设备模式,与终端相关的参
数。fd=0 标准输入*/
cfsetispeed(&Opt,B19200); /*设置结构 termios 输入波特率为
19200Bps*/
cfsetospeed(&Opt,B19200); /*fd 应该是文件描述的意思*/
tcsetattr(fd,TCANOW,&Opt);/*设置终端参数,TCANOW 修改立即发生
*/
设置波特率的例子函数:
/**
*@brief 设置串口通信速率
*@param fd 类型 int 打开串口的文件句柄
*@param speed 类型 int 串口速度
*@return void
*/
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 函数刷清(抛弃)输入缓存(终端驱动程序已接收到,但用户程
序尚未读)或输出缓存(用户程序已经写,但尚未发送)。queue 参数应是下
列三个常数之一:
* TCIFLUSH 刷清输入队列。
* TCOFLUSH 刷清输出队列。
* TCIOFLUSH 刷清输入、输出队列。
*/
tcflush(fd, TCIOFLUSH);//设置前 flush
cfsetispeed(&Opt, speed_arr[i]);
cfsetospeed(&Opt, speed_arr[i]);
//通过 tcsetattr 函数把新的属性设置到串口上。
//tcsetattr(串口描述符,立即使用或者其他标示,指向 termios 的
指针)
status = tcsetattr(fd, TCSANOW, &Opt);
if (status != 0)
{
perror("tcsetattr fd1");
return;
}
tcflush(fd,TCIOFLUSH); //设置后 flush
}
}
}
效验位和停止位的设置:
无效验 位
,-%+.)/)012345678
,-%+.)/)012345,68
,-%+.)/)01234598
,-%+.)/)012:458
奇效验;,""< 位
,-%+.)/)012:45678
,-%+.)/)0123456,8
,-%+.)/)012345,68
,-%+.)/)01234598
,-%+.)/)012:458
偶效验;$#< 位
,-%+.)/)012345678
,-%+.)/)012:456,8
,-%+.)/)012345,68
,-%+.)/)01234598
,-%+.)/)012:458
-1)# 效验 位
,-%+.)/)012345678
,-%+.)/)012345,68
,-%+.)/)012343598
,-%+.)/)012:48
设置效验的函数:
/**
*@brief 设置串口数据位,停止位和效验位
*@param fd 类型 int 打开的串口文件句柄
*@param databits 类型 int 数据位 取值 为 7 或者 8
*@param stopbits 类型 int 停止位 取值为 1 或者 2
*@param parity 类型 int 效验类型 取值为 N,E,O,,S
*/
int set_Parity(int fd, int databits, int stopbits, int
剩余18页未读,继续阅读
哥就是神
- 粉丝: 1
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论9