嵌入式系统第十一讲嵌入式串口通信与GPRS模块实验.ppt_第1页
嵌入式系统第十一讲嵌入式串口通信与GPRS模块实验.ppt_第2页
嵌入式系统第十一讲嵌入式串口通信与GPRS模块实验.ppt_第3页
嵌入式系统第十一讲嵌入式串口通信与GPRS模块实验.ppt_第4页
嵌入式系统第十一讲嵌入式串口通信与GPRS模块实验.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十一讲 嵌入式串口通信与GPRS模块实验,电信学院 崔寅鸣 Email: ,本讲主要内容,串口通信原理 GPRS模块 AT指令 参考“实验十二 串口通信实验”,串口通信,串行通信方式,每次传送一个bit的通信方式,字符被分成一串bits来传输。 串行数据的速度通常用每秒传输的字节数bits-per-second(bps)或者波特率(baud)表示。,串口设备,计算机发展历史中,串口广泛用于连接外设;虽然速度慢,却现在仍然广泛使用 某些计算机使用称为UART(Universal Asynchronous Receiver/Transmitter,通用异步接收/发送装置)的集成电路来作为串口设备。它完成计算机内并行数据和设备端口串行数据的转换(输入输出FIFO);并且可以自动地处理数据的时序。而某些低端设备则会让CPU直接来传送数据。,RS-232,RS-232是EIA(Electronic Industries Association)定义的串行通信的电器接口. 分为DB-9和DB-25两种接口。DB-9定义,RS-232,DB-25定义,串行异步通信格式,异步模式: 空闲时串口一直是1;当有数据时,总是以一个start位开始,start位是0;串口随时可进行传输,不需时钟也不用定义同步帧头帧尾,故称异步通信 在start(0)之后,字符编码可以是7bits或者8bits 之后可能有parity奇偶校验位和stop停止位(1,1.5 或者2 bits) 所以通常用8-N-1、7-E-1等方式来描述,流控,两个串口设备之间,可能因为链路差异等原因,需要进行数据流的协调,一般两种方法: 软件流控:以XON(八进制021)标示开始,以XOFF(八进制023)标示结束 硬件流控:RTS(发送方准备好发出Ready to Send)和CTS(接收方准备好发出Clear to Sent)握手信号,Linux下访问串口,设备文件 Linux下设备是以设备文件方式来访问的,串口也是如此。在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面。如linux下的/ttyS0,/ttyS1分别表示的是串口1和串口2。,例,#include #include /* POSIX terminal control definitions */ int open_port(void) int fd; /* File descriptor for the port */ fd = open(“/dev/ttyS0“, O_RDWR | O_NOCTTY | O_NDELAY); if (fd = -1) perror(“open_port: Unable to open /dev/ttyS0 -“); else fcntl(fd, F_SETFL, 0);/*设置串口为阻塞方式*/ return (fd); ,头文件,#include /*标准输入输出定义*/ #include /*标准函数库定义*/ #include /*Unix 标准函数定义*/ #include /*数据类型定义*/ #include /*文件属性定义*/ #include /*文件控制定义*/ #include /*POSIX 终端控制定义*/ #include /*错误号定义*/ #include /*字符串功能函数*/,例解,O_RDONLY(只读)、O_WRONLY(只写)、O_RDWR(读写) 标志O_NOCTTY可以告诉UNIX这个程序不会成为这个端口上的“控制终端”。如果不这样做的话,所有的输入,比如键盘上过来的Ctrl+C中止信号等等,会影响到串口进程。 O_NDELAY:无论是否读到数据,立即返回,否则会一直等待非阻塞方式,串口读写,读: int read (int fd, char *, int length ); 其中fd为设备号;char *为数据缓冲区;length每次读取数据的长度;返回值为实际读取数据的长度。 写例: n = write(fd, “ATZr”, 4);返回写的比特数,如果错误返回负数,关闭串口,关闭: int close(int fd); 参数说明: fd:文件描述符 函数返回值:成功返回0,失败返回-1。,串口配置与终端标准结构体,配置串口主要通过tcgetattr()和tcsetattr()这两个函数。他们均使用一个结构体,该结构体对终端的输入、输出、硬件特性、控制协议等方面进行了定义,具体定义形式如下(见termios.h): struct termios tcflag_t c_iflag; 输入参数 tcflag_t c_oflag; 输出参数 tcflag_t c_cflag; 控制参数 tcflag_t c_lflag; 本地模式 cc_t c_line;行控制 cc_t c_ccNCCS;控制字符;,终端标准结构体说明,其中参数: c_iflag输入参数设置; c_oflag输出参数设置; c_cflag设置决定终端硬件特性的控制标志,包括数据位宽度、停止位、奇偶校验位等 c_lflag存放本地模式(与用户交互)设置 c_cc用来控制数据发送到调用程序的方式,终端设置,设置终端属性的一般方法是: 首先调用tcgetattr()填充上述结构体 对该结构体进行必要修改 最后调用tcsetattr()使新设置生效,输入选项c_iflag,注:NL=new line,输出选项c_oflag,部分参数:,终端速度控制,获取和设置输入、输出速度函数: int cfgetispeed (struct termios *tp) ; int cfsetispeed (struct termios *tp , speed_t speed); int cfgetospeed (struct termios *tp); int cfsetospeed (struct termios *tp , speed_t speed);,速度定义,波特率的设置定义在 例如 B4800-4800 B9600-9600 B19200-19200 B38400-38400 B57600-57600 B115200-115200,速度设置举例,#include /头文件定义 struct termios opt; /*定义指向termios 结构类型的指针opt*/ cfsetispeed(&opt,B9600); /*指定输入波特率,9600bps*/ cfsetospeed(&opt,B9600); /*指定输出波特率,9600bps*/,Cflag设置举例,No parity (8N1) options.c_cflag ,硬件流控设置,开启硬件流控: options.c_cflag |= CNEW_RTSCTS; 关闭硬件流控: options.c_cflag ,软件流控设置,开启: options.c_iflag |= (IXON | IXOFF | IXANY); 关闭: options.c_iflag ,本地模式c_lflag,本地模式成员变量c_lflag可以控制串口驱动怎样控制输入字符 例,经典输入模式: options.c_lflag |= (ICANON | ECHO | ECHOE);经典输入是以面向行设计的。在经典输入模式中输入字符会被放入一个缓冲之中,这样可以以与用户交互的方式编辑缓冲的内容,直到收到CR(carriage return)或者LF(line feed)字符。 需要选择ICANON,ECHO和ECHOE选项,本地模式c_lflag,例,原始输入模式: options.c_lflag 输入字符只是被原封不动的接收 程序中需要去掉ICANON,ECHO,ECHOE和ISIG选项,c_cc,字符数组c_cc里面包括了控制字符的定义和超时参数.,c_cc,VMIN可以指定读取的最小字符数。如果它被设置为0,那么VTIME值则会指定每个字符读取的等待时间。如果VMIN不为零,串口读取VMIN个字符。这样可以明确给出要读取的字符个数,行控制函数(一),行控制函数用来查询和设置各种与数据操作方式、时间等相关的特征: int tcdrain(int fd);所有挂起的输出操作完成,并将一直保持等待,直到所有输出都已经写到文件描述字fd指向的文件为止 int tcflush(int fd , int queue);刷新最新排在文件描述字fd队列中的输入和输出。参数queue用来指定要刷新的数据,如果queue取值为TCIFLUSH,刷新接收到但尚未读取的输入数据;如果取值为TCOFLUSH,刷新被改写但尚未传送的输出数据;如取值为TCILFLUSH,则两者都刷新。,行控制函数(二),int tcflow (int fd , int action);函数tcflow()是流量控制函数,用来启动或停止对文件描述字fd的数据传送和接收,参数action如果为TCOON,表示启动输出,为TCOOFF时表示停止输出;为TCION时启动输入;为TCIOFF时停止输入。,串口函数,串口通信类的封装,设计一个串口类,包含打开串口,设置串口参数、读取串口数据、向串口写数据及关闭串口等功能。 这些功能都是类中的一个方法,而这些方法都由前述的串口操作函数来具体实现。 具体代码参考实验指导书,实验结果,参照实验指导书,进行程序的编译,可得到指导书中结果 针对ARM平台的串口程序,请注意serialarm.desktop要下载到开发板/usr/qpe/apps/applications目录下 开发板上设置QtE环境变量要如下: #export QTDIR=/usr/qpe #export LD_LIBRARY_PATH=/usr/qpe/lib 最后执行./serialarm qws 要加qws参数启动服务才行;或者从qtopia桌面启动,可能使用QT控件介绍,QLabel:静态显示文本字符串, 头文件:#include textLabel2-setText( tr( “send text“ ) ); / 显示文本字符串的内容,QT控件介绍,QString str(recvbuf);/字符串类,QT控件介绍,QPushButton:按钮控件 头文件:#include OpenComBtn = new QPushButton( this, “OpenComBtn“ ); OpenComBtn-setGeometry( QRect( 30, 110, 90, 31 ) ); OpenComBtn-setText( tr( “open com“ ) ); / Sets 显示文本字串的内容 protected slots: void OpenPort(); /声明一个Slot connect( OpenComBtn, SIGNAL( clicked() ), SLOT( OpenPort() ) );/ 建立Signal与Slot之间的链接。,QT控件介绍,QTimer:定时器类 QTimer *ReadComTimer; ReadComTimer = new QTimer(this);/创建一个定时器 ReadComTimer-start(10);/开启一个定时器,定时间隔10毫秒,QT控件介绍,QMultiLineEdit:文本输入和显示控件 头文件:#include receive_textEdit-clear();/清除控件中的文本 receive_textEdit-insert(str);/在当前光标位置插入字符串 (由Qt Designer 3 创建的QTextEdit在开发板上不支持,需要手动改为本控件),GPRS模块,MC35i,GPRS模块采用SIEMENS公司的MC35i模块。MC35i是SIEMENS公司推出的新一代无线通讯GSM/GPRS模块,可以快速安全可靠地实现系统方案中的数据、语言传输、短信息服务(SMS)和传真。模块工作电压为3.3V5.5V,可以工作在900MHz和1800MHz两个频段,所在频段功耗分别为2W(900MHz)和1W(1800MHz)。模块有AT指令集接口,支持文本和PDU模式的短消息、第三组的二类传真、以及2.4k,4.8k,9.6k的非透明模式。此外,该模块还具有电话簿功能、多方通话,漫游检测功能,常用工作模式有省电模式、IDLE、TALK等模式。通过独特的40ZIF连接器及50天线连接器,可分别连接SIM卡支架和天线。,主要构成,MC35i模块主要由GSM/GPRS基带处理器、GSM/GPRS射频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口六部分构成,ZIF解释,ZIF(Zero Insertion Force )Socket是指零插拔力的插座。把这种插座上的搬手轻轻抬起,CPU可以很容易、轻松地插入插座中,然后将搬手压回原处,利用插座本身的特殊结构产生的挤压力,将CPU的管脚与插座牢牢的接触,绝对不会存在接触不良的问题。而拆卸CPU芯片只需将插座的搬手轻轻抬起,则压力解除,CPU芯片即可轻松取出。,与上位机接口,串口,AT指令集,标准AT指令集,SMS相关AT指令集,GPRS相关AT指令集,短信数据格式,见实验指导书“实验十三 GPS和GSM通信实验”,SMS数据编码,根据GSM 07.05的定义,SMS短信息的收

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论