资源描述:
《第三讲 嵌入式Linux串口程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第三讲嵌入式Linux串口程序设计华中科技大学电信系鄢舒E-mail:yan0shu@gmail.com内容提纲(1/4)•1.嵌入式Linux串口编程概述•2.嵌入式Linux串口详细配置•3.嵌入式Linux串口编程示例•4.实验内容与要求EIDept.,HuazhongUniversityofScienceandTechnology21.1数据通信的基本方式用户常见的数据通信的基本方式有两种:¢并行通信;¢串行通信;•串行通信是计算机常用的接口,如:RS-232-C接口。该标准规定采用一个DB25芯引
2、脚连接器或DB9芯引脚连接器。•芯片内部常具有UART控制器,其可工作于Interrupt(中断模式)或DMA(直接内存访问)模式。EIDept.,HuazhongUniversityofScienceandTechnology31.2串行通信原理¢采用异步串行I/O方式;¢将传输数据的每一个字符一位接一位地传送;¢各个不同位分时地使用同一传输通道;¢开始时,线路处于空闲状态,送出连续“1”;¢传送开始时,首先发送一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据,每个字符的数据位长度可以为5
3、、6、7位或8位,一般采用ASCII编码。后面是奇偶校验位。最后是表示停止位的“1”信号,这个停止位可持续1、1.5、2位的时间宽度。¢每个数据位的宽度等于波特率的倒数。EIDept.,HuazhongUniversityofScienceandTechnology41.3UART的操作•UART的操作主要包括以下几个部分:¢数据发送;¢数据接收;¢产生中断;¢产生波特率;¢Loopback模式;¢红外模式;¢自动流控模式;•串口参数的配置主要包括:波特率、数据位、停止位、流控协议。EIDept.,Huaz
4、hongUniversityofScienceandTechnology51.4Linux中的串口设备•Linux中的串口设备文件存放于/dev目录下,其中串口一(COM1),串口二(COM2)对应设备名依次为“/dev/ttyS0”、“/dev/ttyS1”。•在Linux下操作串口与操作文件相同。EIDept.,HuazhongUniversityofScienceandTechnology61.5串口通信的流程START打开串口1open(“/dev/ttyS0”,O_RDWR);保存COM1属性tc
5、getattr(fd,&oldterm);设置COM1属性tcsetattr(fd,&newterm);串口通信及其他Programfunctions保存COM1属性tcsetattr(fd,&oldterm);关闭COM1close(fd);EIDept.,HuazhongUniversityofScienceandTechnology7内容提纲(2/4)•1.嵌入式Linux串口编程概述•2.嵌入式Linux串口详细配置•3.嵌入式Linux串口编程示例•4.实验内容与要求EIDept.,Huazhon
6、gUniversityofScienceandTechnology82.1串口设置结构•在使用串口之前必须设置相关配置,包括:波特率、数据位、校验位、停止位等。串口设置由下面结构体实现:EIDept.,HuazhongUniversityofScienceandTechnology92.2c_cflag成员变量•termios结构中c_cflag最为重要,可设置波特率、数据位、校验位、停止位。在设置波特率时需在数字前加上‘B’,如B9600。B19200。使用其需通过“与”“或”操作方式。EIDept.,H
7、uazhongUniversityofScienceandTechnology102.3c_iflag成员变量•输入模式c_iflag成员控制端口接收端的字符输入处理。EIDept.,HuazhongUniversityofScienceandTechnology112.4串口控制函数tcgetattr取属性(termios结构)tcsetattr设置属性(termios结构)cfgetispeed得到输入速度cfgetospeed得到输出速度cfsetispeed设置输入速度cfsetospeed设置输出
8、速度tcdrain等待所有输出都被传输tcflow挂起传输或接收tcflush刷清未决输入和/或输出tcsendbreak送BREAK字符tcgetpgrp得到前台进程组IDtcsetpgrp设置前台进程组IDEIDept.,HuazhongUniversityofScienceandTechnology122.5串口配置流程(1/4)1.保存原先串口配置使用tcgetattr(fd,&oldtio)函数stru