Linux串口编程详解(5)
{
char buffer[255]; /* Input buffer */
char *bufptr; /* Current char in buffer */ int nbytes; /* Number of bytes read */ int tries; /* Number of tries so far */
for (tries = 0; tries < 3; tries ++) {
/* send an AT command followed by a CR */ if (write(fd, \ continue;
/* read characters into our string buffer until we get a CR or NL */ bufptr = buffer;
while ((nbytes = read(fd, bufptr, buffer + sizeof(buffer) - bufptr - 1)) > 0) {
bufptr += nbytes;
if (bufptr[-1] == '\\n' | bufptr[-1] == '\\r') break; }
/* nul terminate the string and see if we got an OK response */
*bufptr = '\\0';
if (strncmp(buffer, \ return (0); }
return (-1); }
↑
标准调制解调器命令 ?
大多数调制解调器都支持“AT”命令集。之所以这样叫是因为这个命令集中的每个命令都是以“AT”字符开头。每个命令都是以第一列的AT开头字符后面跟上特殊命令参数和一个回车符CR(八进制015)。调制解调器处理完这条命令之后会根据命令回复一些文本消息。
?
ATD 拨号 [#b39592a6]
通过ATD命令可以拨打一个指定号码。除过号码和分隔符(-)以外,你还可以指定以音频(\)或者脉冲(\)方式拨号,暂停一秒(\)和等待拨号音(\):
ATDT 555-1212
ATDT 18008008008W1234,1,1234 ATD T555-1212WP1234
调制解调器可能回复下面列出的某个消息:
NO DIALTONE BUSY
NO CARRIER CONNECT
CONNECT baud
?
ATH 挂断
通过ATH命令可以让调制解调器挂断。因为,调制解调器如果在“命令”模式的话,你可能就不能打普通电话了。
如果DTR信号线掉了的话,大部分调制解调器也会挂断。你可以将波特率设置成0并且持续至少1秒来做到这一点。再次让DTR掉落同样也可以把调制解调器重新拉回命令模式。 调制解调器成功挂断以后,它会回复一个\回来。如果调制解调器仍然保持连接,它则会发送\或者\这样的消息。
?
ATZ 重置调制解调器
通过ATZ命令可以重置调制解调器。重置之后它会回复字符串\。
?
与调制解调器通讯的常见问题
首先,也是最重要的一点,千万不要使用回声输入(input echoing)。回声输入会导致调制解调器和计算机之间产生反馈循环。
其次,当发送调制解调器命令时,命令必须以回车(CR)而不是换行(NL)结束。C语言中回车的字符常量是\。
最后,处理调制解调器通讯的时候,要一定保证你使用了调制解调器支持的波特率。虽然大多数调制解调器都支持自动探测波特率,但你也会注意到某些(通常是19.2kbps或者比较老的调制解调器)有局限性。
↑
高级串口编程 ?
所谓高级串口编程其实说的就是使用更直接的底层的ioctl(2)和select(2)系统调用来操作串口。
↑
串口的ioctl ?
前文中曾经提到使用tcgetattr和tcsetattr函数来配置串口。UNIX环境下,这些函数都是使用ioctl(2)系统调用来实现的。 系统调用ioctl可以带三个参数:
int ioctl(int fd, int request, ...);
显然,fd参数对于串口编程来说就是串口设备文件的文件描述符咯。而request参数是在
串口的IOCTL请求
REQUEST TCGETS TCSETS
描述
Gets the current serial port settings. Sets the serial port settings immediately.
POSIX函数 tcgetattr
tcsetattr(fd, TCSANOW, &options)
TCSETSF
Sets the serial port settings after flushing the input tcsetattr(fd, and output buffers.
TCSAFLUSH, &options)
TCSETSW TCSBRK TCXONC TCFLSH
Sets the serial port settings after allowing the input tcsetattr(fd, and output buffers to drain/empty. Sends a break for the given time. Controls software flow control.
Flushes the input and/or output queue.
TCSADRAIN, &options) tcsendbreak, tcdrain tcflow tcflush None None None
↑
TIOCMGET Returns the state of the \TIOCMSET Sets the state of the \
FIONREAD Returns the number of bytes in the input buffer.
取得控制信号 ?
TIOCMGET ioctl可以取得当前调制解调器的状态位。这个状态位囊括了除去RXD和TXD信号线的所有RS-232信号,这些都在下表中列出。
控制信号常量
常量 TIOCM_LE
描述
DSR (data set ready/line enable)
TIOCM_DTR DTR (data terminal ready) TIOCM_RTS RTS (request to send) TIOCM_ST TIOCM_SR
Secondary TXD (transmit) Secondary RXD (receive)
TIOCM_CTS CTS (clear to send) TIOCM_CAR DCD (data carrier detect) TIOCM_CD
Synonym for TIOCM_CAR
TIOCM_RNG RNG (ring) TIOCM_RI
Synonym for TIOCM_RNG
TIOCM_DSR DSR (data set ready)
例如下面这个程序片段,你可以通过给ioctl带一个用来保存状态位的整形变量的指针来取得状态位。
#include
int fd;
int status;
ioctl(fd, TIOCMGET, &status);
↑
设置控制信号 ?
TIOCMSET ioctl可以设置上面定义的调制解调器状态位。下面的例子展示如何使用它来将DTR信号线设成掉线状态。
#include
int fd;
int status;
ioctl(fd, TIOCMGET, &status);
status &= ~TIOCM_DTR;
ioctl(fd, TIOCMSET, &status);
可能被设置的状态位取决于操作系统,驱动和正在使用的模式。关于更详细的信息应该去看以下你所使用的操作系统的文档。
…… 此处隐藏:590字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [综合文档]应答器设备技术规范(征求意见稿)A1
- [综合文档]教师 2012年高考政治试题按考点分类汇
- [综合文档]保险公司的总经理助理竞职演说
- [综合文档]卫生应急大练兵大比武活动考试--题库(
- [综合文档]徐州经济技术开发区总体规划环境影响报
- [综合文档]汉语拼音表(带声调)
- [综合文档]二年级 上 思维训练( 1~18)
- [综合文档]特色学校五年发展规划
- [综合文档]机床经常出现报警“X1轴定位监控”
- [综合文档]《电子技术基础》21.§5—2、3、4 习题
- [综合文档]浙江省深化普通高中课程改革
- [综合文档]CRISP原理 - 图文
- [综合文档]2017年电大社会调查研究与方法形考答案
- [综合文档]浅析建筑施工安全毕业论文
- [综合文档]《回忆我的母亲》名师教案
- [综合文档]装饰装修工程监理规划
- [综合文档]三下乡心得体会-文艺
- [综合文档]柱计算长度系数 - 图文
- [综合文档]全流程思考,提高燃电系统热电转换率--
- [综合文档]2018年嘉定区中考物理一模含答案
- 433M车库门滚动码遥控器
- 8、架空线路施工规范
- 大学四年声乐学习的体会
- 新北师大版五年级数学上册《轴对称再认
- 部编版五年级上册语文第六单元小结复习
- 小学六年级英语形容词用法
- 第2课 抗美援朝保家卫国 课件01(岳麓版
- 2015年天津大学运筹学基础考研真题,考
- 微机计算机控制技术课后于海生(第2版)
- 安全教育实践活动
- Delphi程序设计教程_第1章_Delphi概述
- 第八讲 工业革命与启蒙运动
- 《中华人民共和国药典》2005年版二部勘
- 科粤版九年级化学2.3构成物质的微粒(1)
- 西师大版数学三年级下册《长方形、正方
- ch6_冒泡排序演示
- 第4章 冲裁模具设计
- 浙江中小民营企业员工流失论文[终稿]
- 再议有线数字电视市场营运模式
- 昆明供水工程监理大纲




