项目 10 :串行口通信- pda 中的串口( 2 )
DESCRIPTION
项目 10 :串行口通信- PDA 中的串口( 2 ). 本节课程主要知识点 串口的编程 串口通信的扩展使用. 重点和难点. 重点 串口的编程 难点 串口通信的扩展使用. 串口的编程. 串口通信基本过程( 1/2 ). 按协议的设置初始化并打开串行口,如果串口没有被其他应用程序占用,则该应用程序占用该串口。 通知 Windows CE ,本应用程序需要这个串口,并封锁其他应用程序使它们不能使用此串口。 配置该串行口。. 串口通信基本过程( 2/2 ). 在串口上传输数据,根据约定,在传输过程中进行校验。 - PowerPoint PPT PresentationTRANSCRIPT
项目 10:串行口通信- PDA中的串口( 2) 本节课程主要知识点 串口的编程 串口通信的扩展使用
重点和难点重点 串口的编程
难点 串口通信的扩展使用
串口的编程
串口通信基本过程( 1/2 ) 按协议的设置初始化并打开串行口,如
果串口没有被其他应用程序占用,则该应用程序占用该串口。
通知 Windows CE ,本应用程序需要这个串口,并封锁其他应用程序使它们不能使用此串口。
配置该串行口。
串口通信基本过程( 2/2 ) 在串口上传输数据,根据约定,在传输
过程中进行校验。 不需要此串口时,关闭串口,即释放串
口以供其它应用程序使用。
串口通信编程( 1/3 ) 用于串行通信的函数和结构在 winbase.h
头文件中定义。在基于 Windows CE 的设备上通过串行通信端口读写的任务由调用文件读写函数完成。
CreateFile
打开串行口。 GetCommState
获取串口的当前控制设置数据。
串口通信编程( 2/3 ) SetCommState
按照 DCB 结构的数据配置串行口。 GetCommTimeouts
获得指定通信设备上所有读 / 写操作的超时参数。 SetCommTimeouts
设置指定通信设备上所有读 / 写操作的超时参数。 WriteFile
向串行口写数据,这样将把数据传送给串行口连接的另一端设备。
串口通信编程( 3/3 ) ReadFile
从串行口读数据,这样将接收串行口连接另一端的设备传过来的数据。
SetCommMask
指定为通信设备监视的一组事件。 GetComMask
获得指定通信设备的事件掩码值。
初始化串行口 首先用 CreateFile 函数打开指定串口,
设置其中的参数 访问类型为 GENERIC_READ |GENERIC_WRITE
共享模式为 0 创建标志为 OPEN_EXISTING 模板句柄为 NULL
如果端口不存在,则返回 ERROR_FILE_NOT_FOUND
初始化串行口典型代码 hSerial = CreateFile(L"COM1:", GENERIC_REA
D | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
如果能够正常打开串口, hSerial 应该返回的是串口的句柄。
配置串口设置波特率、数据位、奇偶校验位、停止位和流控制方式,并且可以恢复缺省值。
使用 GetCommState(hComm,& dcb)读取当前串口设备控制块 DCB( Device Control Block)设置。
修改后通过 SetCommState(hComm,&dcb)将其写入。
配置串口的代码 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
超时控制 为了防止意外情况使串口读写无休止地
等待,超时设置由 COMMTIMEOUTS 结 构定义 。
通过调用 GetCcommTimeOuts 函数获得当前的设置。
用 SetCommTimeOuts 函数来完成设置。
超时控制的代码 COMMTIMEOUTS CommTimeouts; GetCommTimeouts(m_hSerial, &CommTimeouts);
获得当前超时参数 CommTimeouts.ReadIntervalTimeout = MAXDWORD; CommTimeouts.ReadTotalTimeoutMultiplier = 10; CommTimeouts.ReadTotalTimeoutConstant = 10; CommTimeouts.WriteTotalTimeoutMultiplier = 50; CommTimeouts.WriteTotalTimeoutConstant = 100; SetCommTimeouts(hSerial, &CommTimeouts);
设置当前超时参数
发送超时控制 ReadIntervalTimeout 是指两个字符传送
之间的超时时间。 一次读操作的超时时间等于要接收的字
符数 乘以 ReadTotalTimeoutMultiplier ,再加上 ReadTotalTimeoutConstant 。
发送超时控制 WriteIntervalTimeout 是指两个字符传送
之间的超时时间。 一次写操作的超时时间等于要发送的字
符数 乘以 WriteTotalTimeoutMultiplier ,再加上 WriteTotalTimeoutConstant 。
数据传输 读写串行端口与读写文件采用的函数相
同,即 ReadFile 、 WriteFile 。 Windows CE 不支持重叠 IO 操作,也称
异步操作,当有多个线程进行 IO 操作时,应用程序可以使用 WaitCommEvent 函数阻塞线程,直至发生特定的通讯事件,以协调多个线程。
发送数据的代码 发送数据用以下命令完成
WriteFile (hSerial, &Byte, nByte, &dwNumBytes, NULL);
其中 hSerial 句柄 &Byte 数据缓冲区地址 nByte 数据大小 &dwNumBytes 返回发送出去的字节数 NULL 不支持重叠
接收数据 串口编程最复杂的部份就是接收数据。 串口接收数据常常通过创建一个线程来
完成。 接收线程既要考虑及时的读取数据,还
要解决接收到的数据的处理工作。
关闭串口 程序的终止可以自动关闭串口,也可用
函数 CloseHandle() ,以便释放所占资源。
串口的扩展使用
扩展蓝牙 PXA270 的三个串口中,有一个是专为接
入蓝牙模块设计的,这个串口也是一个标准的串口。
将蓝牙模块接入,按照标准的串口编程方式编程。
扩展 GSM/GPRS
将 GSM/GPRS 模块接入串口。 安装串口驱动程序。利用标准的 AT 指令对 GSM/GPRS 模块
编程。
扩展 GPS
将 GPS 模块接入串口。 安装串口驱动程序。利用 GPS测试程序,观察通过串口接收
到的卫星信息。