项目 10 :串行口通信- PDA 中的串口( 2 )

24
项项 10 项项项项项项 :- PDA 项项项项2 项项项项项项项项项 串串串串串 串串串串串串串串串

description

项目 10 :串行口通信- PDA 中的串口( 2 ). 本节课程主要知识点 串口的编程 串口通信的扩展使用. 重点和难点. 重点 串口的编程 难点 串口通信的扩展使用. 串口的编程. 串口通信基本过程( 1/2 ). 按协议的设置初始化并打开串行口,如果串口没有被其他应用程序占用,则该应用程序占用该串口。 通知 Windows CE ,本应用程序需要这个串口,并封锁其他应用程序使它们不能使用此串口。 配置该串行口。. 串口通信基本过程( 2/2 ). 在串口上传输数据,根据约定,在传输过程中进行校验。 - PowerPoint PPT Presentation

Transcript of 项目 10 :串行口通信- PDA 中的串口( 2 )

Page 1: 项目 10 :串行口通信- PDA 中的串口( 2 )

项目 10:串行口通信- PDA中的串口( 2) 本节课程主要知识点 串口的编程 串口通信的扩展使用

Page 2: 项目 10 :串行口通信- PDA 中的串口( 2 )

重点和难点重点 串口的编程

难点 串口通信的扩展使用

Page 3: 项目 10 :串行口通信- PDA 中的串口( 2 )

串口的编程

Page 4: 项目 10 :串行口通信- PDA 中的串口( 2 )

串口通信基本过程( 1/2 ) 按协议的设置初始化并打开串行口,如

果串口没有被其他应用程序占用,则该应用程序占用该串口。

通知 Windows CE ,本应用程序需要这个串口,并封锁其他应用程序使它们不能使用此串口。

配置该串行口。

Page 5: 项目 10 :串行口通信- PDA 中的串口( 2 )

串口通信基本过程( 2/2 ) 在串口上传输数据,根据约定,在传输

过程中进行校验。 不需要此串口时,关闭串口,即释放串

口以供其它应用程序使用。

Page 6: 项目 10 :串行口通信- PDA 中的串口( 2 )

串口通信编程( 1/3 ) 用于串行通信的函数和结构在 winbase.h

头文件中定义。在基于 Windows CE 的设备上通过串行通信端口读写的任务由调用文件读写函数完成。

CreateFile

打开串行口。 GetCommState

获取串口的当前控制设置数据。

Page 7: 项目 10 :串行口通信- PDA 中的串口( 2 )

串口通信编程( 2/3 ) SetCommState

 按照 DCB 结构的数据配置串行口。 GetCommTimeouts

获得指定通信设备上所有读 / 写操作的超时参数。 SetCommTimeouts

 设置指定通信设备上所有读 / 写操作的超时参数。 WriteFile

向串行口写数据,这样将把数据传送给串行口连接的另一端设备。

Page 8: 项目 10 :串行口通信- PDA 中的串口( 2 )

串口通信编程( 3/3 ) ReadFile

 从串行口读数据,这样将接收串行口连接另一端的设备传过来的数据。

SetCommMask

 指定为通信设备监视的一组事件。 GetComMask

 获得指定通信设备的事件掩码值。

Page 9: 项目 10 :串行口通信- PDA 中的串口( 2 )

初始化串行口 首先用 CreateFile 函数打开指定串口,

设置其中的参数 访问类型为 GENERIC_READ |GENERIC_WRITE

共享模式为 0 创建标志为 OPEN_EXISTING 模板句柄为 NULL

如果端口不存在,则返回 ERROR_FILE_NOT_FOUND

Page 10: 项目 10 :串行口通信- PDA 中的串口( 2 )

初始化串行口典型代码 hSerial = CreateFile(L"COM1:", GENERIC_REA

D | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

如果能够正常打开串口, hSerial 应该返回的是串口的句柄。

Page 11: 项目 10 :串行口通信- PDA 中的串口( 2 )

配置串口设置波特率、数据位、奇偶校验位、停止位和流控制方式,并且可以恢复缺省值。

使用 GetCommState(hComm,& dcb)读取当前串口设备控制块 DCB( Device Control Block)设置。

修改后通过 SetCommState(hComm,&dcb)将其写入。

Page 12: 项目 10 :串行口通信- PDA 中的串口( 2 )

配置串口的代码 DCB PortDCB; PortDCB.DCBlength = sizeof(DCB); GetCommState(hSerial, &PortDCB);// 读 DCB PortDCB.BaudRate = 115200; // 波特率 PortDCB.ByteSize = 8; // 数据位 PortDCB.Parity = NOPARITY; // 校验位 PortDCB.StopBits = ONESTOPBIT;// 停止位 SetCommState(hSerial, &PortDCB);// 写 DCB

Page 13: 项目 10 :串行口通信- PDA 中的串口( 2 )

超时控制 为了防止意外情况使串口读写无休止地

等待,超时设置由 COMMTIMEOUTS 结 构定义 。

通过调用 GetCcommTimeOuts 函数获得当前的设置。

用 SetCommTimeOuts 函数来完成设置。

Page 14: 项目 10 :串行口通信- PDA 中的串口( 2 )

超时控制的代码 COMMTIMEOUTS CommTimeouts; GetCommTimeouts(m_hSerial, &CommTimeouts);

获得当前超时参数 CommTimeouts.ReadIntervalTimeout = MAXDWORD; CommTimeouts.ReadTotalTimeoutMultiplier = 10; CommTimeouts.ReadTotalTimeoutConstant = 10; CommTimeouts.WriteTotalTimeoutMultiplier = 50; CommTimeouts.WriteTotalTimeoutConstant = 100; SetCommTimeouts(hSerial, &CommTimeouts);

设置当前超时参数

Page 15: 项目 10 :串行口通信- PDA 中的串口( 2 )

发送超时控制 ReadIntervalTimeout 是指两个字符传送

之间的超时时间。 一次读操作的超时时间等于要接收的字

符数 乘以 ReadTotalTimeoutMultiplier ,再加上 ReadTotalTimeoutConstant 。

Page 16: 项目 10 :串行口通信- PDA 中的串口( 2 )

发送超时控制 WriteIntervalTimeout 是指两个字符传送

之间的超时时间。 一次写操作的超时时间等于要发送的字

符数 乘以 WriteTotalTimeoutMultiplier ,再加上 WriteTotalTimeoutConstant 。

Page 17: 项目 10 :串行口通信- PDA 中的串口( 2 )

数据传输 读写串行端口与读写文件采用的函数相

同,即 ReadFile 、 WriteFile 。 Windows CE 不支持重叠 IO 操作,也称

异步操作,当有多个线程进行 IO 操作时,应用程序可以使用 WaitCommEvent 函数阻塞线程,直至发生特定的通讯事件,以协调多个线程。

Page 18: 项目 10 :串行口通信- PDA 中的串口( 2 )

发送数据的代码 发送数据用以下命令完成

WriteFile (hSerial, &Byte, nByte, &dwNumBytes, NULL);

其中 hSerial 句柄 &Byte 数据缓冲区地址 nByte 数据大小 &dwNumBytes 返回发送出去的字节数 NULL 不支持重叠 

Page 19: 项目 10 :串行口通信- PDA 中的串口( 2 )

接收数据 串口编程最复杂的部份就是接收数据。 串口接收数据常常通过创建一个线程来

完成。 接收线程既要考虑及时的读取数据,还

要解决接收到的数据的处理工作。

Page 20: 项目 10 :串行口通信- PDA 中的串口( 2 )

关闭串口 程序的终止可以自动关闭串口,也可用

函数 CloseHandle() ,以便释放所占资源。

Page 21: 项目 10 :串行口通信- PDA 中的串口( 2 )

串口的扩展使用

Page 22: 项目 10 :串行口通信- PDA 中的串口( 2 )

扩展蓝牙 PXA270 的三个串口中,有一个是专为接

入蓝牙模块设计的,这个串口也是一个标准的串口。

将蓝牙模块接入,按照标准的串口编程方式编程。

Page 23: 项目 10 :串行口通信- PDA 中的串口( 2 )

扩展 GSM/GPRS

将 GSM/GPRS 模块接入串口。 安装串口驱动程序。利用标准的 AT 指令对 GSM/GPRS 模块

编程。

Page 24: 项目 10 :串行口通信- PDA 中的串口( 2 )

扩展 GPS

将 GPS 模块接入串口。 安装串口驱动程序。利用 GPS测试程序,观察通过串口接收

到的卫星信息。