1 / 24

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

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

marged
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 重点和难点 重点 • 串口的编程 难点 • 串口通信的扩展使用

  3. 串口的编程

  4. 串口通信基本过程(1/2) • 按协议的设置初始化并打开串行口,如果串口没有被其他应用程序占用,则该应用程序占用该串口。 • 通知Windows CE,本应用程序需要这个串口,并封锁其他应用程序使它们不能使用此串口。 • 配置该串行口。

  5. 串口通信基本过程(2/2) • 在串口上传输数据,根据约定,在传输过程中进行校验。 • 不需要此串口时,关闭串口,即释放串口以供其它应用程序使用。

  6. 串口通信编程(1/3) • 用于串行通信的函数和结构在winbase.h头文件中定义。在基于Windows CE的设备上通过串行通信端口读写的任务由调用文件读写函数完成。 • CreateFile 打开串行口。 • GetCommState 获取串口的当前控制设置数据。

  7. 串口通信编程(2/3) • SetCommState  按照DCB结构的数据配置串行口。 • GetCommTimeouts 获得指定通信设备上所有读/写操作的超时参数。 • SetCommTimeouts  设置指定通信设备上所有读/写操作的超时参数。 • WriteFile 向串行口写数据,这样将把数据传送给串行口连接的另一端设备。

  8. 串口通信编程(3/3) • ReadFile  从串行口读数据,这样将接收串行口连接另一端的设备传过来的数据。 • SetCommMask  指定为通信设备监视的一组事件。 • GetComMask  获得指定通信设备的事件掩码值。

  9. 初始化串行口 • 首先用CreateFile 函数打开指定串口,设置其中的参数 • 访问类型为GENERIC_READ |GENERIC_WRITE • 共享模式为0 • 创建标志为OPEN_EXISTING • 模板句柄为NULL • 如果端口不存在,则返回 • ERROR_FILE_NOT_FOUND

  10. 初始化串行口典型代码 • hSerial = CreateFile(L"COM1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); • 如果能够正常打开串口,hSerial应该返回的是串口的句柄。

  11. 配置串口 • 设置波特率、数据位、奇偶校验位、停止位和流控制方式,并且可以恢复缺省值。 • 使用GetCommState(hComm,&dcb)读取当前串口设备控制块DCB(Device Control Block)设置。 • 修改后通过SetCommState(hComm,&dcb)将其写入。

  12. 配置串口的代码 • 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

  13. 超时控制 • 为了防止意外情况使串口读写无休止地等待,超时设置由COMMTIMEOUTS 结 构定义 。 • 通过调用GetCcommTimeOuts 函数获得当前的设置。 • 用SetCommTimeOuts 函数来完成设置。

  14. 超时控制的代码 • COMMTIMEOUTS CommTimeouts; • GetCommTimeouts(m_hSerial, &CommTimeouts); 获得当前超时参数 • CommTimeouts.ReadIntervalTimeout = MAXDWORD; • CommTimeouts.ReadTotalTimeoutMultiplier = 10; • CommTimeouts.ReadTotalTimeoutConstant = 10; • CommTimeouts.WriteTotalTimeoutMultiplier = 50; • CommTimeouts.WriteTotalTimeoutConstant = 100; • SetCommTimeouts(hSerial, &CommTimeouts); 设置当前超时参数

  15. 发送超时控制 • ReadIntervalTimeout 是指两个字符传送之间的超时时间。 • 一次读操作的超时时间等于要接收的字符数 乘以ReadTotalTimeoutMultiplier ,再加上ReadTotalTimeoutConstant。

  16. 发送超时控制 • WriteIntervalTimeout 是指两个字符传送之间的超时时间。 • 一次写操作的超时时间等于要发送的字符数 乘以WriteTotalTimeoutMultiplier ,再加上WriteTotalTimeoutConstant。

  17. 数据传输 • 读写串行端口与读写文件采用的函数相同,即ReadFile、WriteFile。 • Windows CE不支持重叠IO操作,也称异步操作,当有多个线程进行IO操作时,应用程序可以使用WaitCommEvent函数阻塞线程,直至发生特定的通讯事件,以协调多个线程。

  18. 发送数据的代码 • 发送数据用以下命令完成 • WriteFile (hSerial, &Byte, nByte, &dwNumBytes, NULL); • 其中 • hSerial 句柄 • &Byte 数据缓冲区地址 • nByte 数据大小 • &dwNumBytes 返回发送出去的字节数 • NULL 不支持重叠 

  19. 接收数据 • 串口编程最复杂的部份就是接收数据。 • 串口接收数据常常通过创建一个线程来完成。 • 接收线程既要考虑及时的读取数据,还要解决接收到的数据的处理工作。

  20. 关闭串口 • 程序的终止可以自动关闭串口,也可用函数CloseHandle(),以便释放所占资源。

  21. 串口的扩展使用

  22. 扩展蓝牙 • PXA270的三个串口中,有一个是专为接入蓝牙模块设计的,这个串口也是一个标准的串口。 • 将蓝牙模块接入,按照标准的串口编程方式编程。

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

  24. 扩展GPS • 将GPS模块接入串口。 • 安装串口驱动程序。 • 利用GPS测试程序,观察通过串口接收到的卫星信息。

More Related