当前位置:首页 > 单片机 > 单片机
[导读] 在工业控制中,常需要将单片机采集到的数据传送给PC机处理、显示,并且根据处理结果给单片机发送控制命令。串行通信虽然传送速度相对较慢,但是传送成本低,对实现监视和控制,具有足够的带宽,并且没有

在工业控制中,常需要将单片机采集到的数据传送给PC机处理、显示,并且根据处理结果给单片机发送控制命令。串行通信虽然传送速度相对较慢,但是传送成本低,对实现监视和控制,具有足够的带宽,并且没有过于复杂的编解码,实现自定义的协议也不复杂,因而在工业自动化、通信和军事等领域的应用十分广泛。随着WindowsCE嵌入式操作系统在工业控制中的广泛应用,设计和实现Windows CE下PC与单片机的串行通信具有重要的意义。


1Windows CE.NET 4.2简介

Windows CE 是一个面向移动计算和嵌入式应用的操作系统,其突出优点是模块化、可定制性、完备性、实时性、通信能力强大和基于Win32应用程序编程接口。 Windows CE.N ET 4.2是为嵌入式市场重新设计的Windows CE 3.0的后继产品,为快速建立下一代智能移动和小内存占用的设备提供了一个健壮的实时操作系统。他包括创建一个基于定制设备的Wi ndows CE所需的一切。?

2Windows CE.NET 4.2下的串行通信技术

串行端口在Windows CE.NET 4.2(以下简称Windows CE)下属于流接口设备,他是串行设备接口常规I/O驱动程序的调用与通信相关的具体函数的结合。串行设备被视为用于打开、关闭和读写串行端口的常规的可安装的流设备。Windows CE的串口函数和Windows的串口函数基本相同,但有几点值得注意:

(1)Windows CE只支持UnICode字符集,在编程时必须特别注意。

(2) Windows CE不支持重叠的I/O操作。

2.1打开和关闭串行端口

在所有的流设备驱动程序中,均使用CreateFile来打开串行端口设备,如果这个端口不存在,CreateFile返回 ERROR_FILE_NOT_FOUND。因此,用户指定的端口必须是存在并且可用的,而且要遵循Windows CE流接口设备驱动程序的命名规则,即COM后接要打开的端口号再紧跟一个冒号。
HANDLE hPort = CreateFile (_T("COM1:"),
GENERIC_READ|GENERIC_WRITE, 0,NULL,
OPEN_EXISTING,0,NULL);

关闭串行端口比较简单,调用CloseHandle函数就能关闭一个打开的串行端口。CloseHandle只有一个参数,即调用CreateFile函数打开端口时返回的句柄,方法如下:

CloseHandle (hPort);

2.2读写串行端口

正如使用CreateFile打开串行端口一样,可以使用ReadFile和WriteFile函数来读写串行端 口。假设已经调用CreateFile成功地打开了串行端口,那么只需调用ReadFile即可从串行端口读取数据:

由于Windows CE不支持重叠的I/O操作,所以第5个参数必须设置为NULL。写串行端口也很 简单。调用过程如下:

如果从主线程读、写大量的串行数据,主线程就会因为等待相对较慢的串行读或串行写操作而阻塞,不能即时处理其他的消息。因此最好用单独的线程来读写串行端口。

2.3配置串行端口

读和写串行端口比较简单,但是还需要对端口配置好正确的波特率、字符长度、奇偶校验、传输模式等,端口才能正确通信。可以调用I/O设备控制(IOCTL)来配置串行驱动程序,但此操作需要一些底层的知识,并且要有相应的“嵌入工具包”(ETK),而SDK不能实现该操作。除此之外,还有一种更简单的方法,就是调用GetCommState和SetCommState函数配置串行端口。由于配置端口的DCB结构内容较多,所以使用起来比较麻烦。错误地初始化 DCB结构是配置串行端口常见的问题。如果一个串行通信函数没有产生预期的效果,那么错误很可能是在DCB结构体的赋值。在与单片机实现串行通信的时候,由于只用到了RS 232串行口的RXD,TXD和GND三个引脚,而其他的引脚均舍弃不用,所以DCB的成员变量应该如下设置,否则不能正常通信:

2.4设置超时值

对于串行端口来说,还必须配置超时值,否则程序可能陷入到一个等待来自串口字符的死循环。通常,配置超时值和配置串口类似。首先用 GetCommTimeouts函数获取当前串口的超时值,然后修改CommTimeouts成员变量的值,最后用SetCommTimeouts设置新的超时值。

2.5异步多线程通信

虽然WindowsCE不支持重叠I/O,但还是可以使用多个线程来实现同样的操作。当主线程正忙时,需要做的就是运行单独的线程来处理同步I/O操作。除了使用用于读和写的单独线程以外,Windows CE还支持Win32的WaitCommEvent函数,该函数将线程阻塞,直到预先设定的串行通信事件中的一个发生。该函数一般和函数 SetCommMask配合起来使用,SetCommMask设置WaitCommEvent要等待的串口事件。一般的使用方法是:


先调用SetCommMask函数设定要等待的串口事件,例如串口有数据到来(EV_RXCHAR)事件;然后在读串口线程中调用WaitCommEvent阻塞线程,等待EV_RXCHAR事件的发生。当等

待的EV_RXCHAR事件发生时,调用ClearCommError函数清除通信错误信息,并且获取串口的当前状态,主要是获取串口接收缓冲区中的字节数,然后调用ReadFile函数将接收缓冲区的数据全部读出。最后调用PostMessage函数将这些数据发送给主线程进行处理。

这里存在一个问题:读串口数据操作是在读串口线程中进行的,而处理数据操作是在主线程中进行的,如果上次接收的数据还没处理完,下次的数据又发送给了主线程处理,势必造成混乱。这个问题的解决,涉及到线程间的同步机制。

2.6线程间的同步

在Windows CE中采用同步对象的方法来协调多线程的执行。一个线程监视一个同步对象,当用信号通知该对象时,解除正在阻塞的线程并调度该线程。同步对象包括事件和互斥体两种方式。本文只介绍事件方式。

事件对象是一种有两种信号状态有信号和无信号的同步对象,创建的事件对象可以被不同的线程共享。Windows CE常用等待函数阻塞线程自身的执行,等待其监视的对象产生一定的信号才停止阻塞,继续线程的执行。常用的等待函数有监视单个同步对象的 WaitForSingleObject,和监视多个同步对象的WaitForMultipleObjects。在Windows CE串口通信中,用CreateEvent函数创建事件时,手动设置为有信号状态,以便程序在第一次能够顺利地进入到WaitCommEvent函数处等待串口数据的到来,等到程序读取了串口的数据并发送给主线程处理后,调用ResetEvent函数将事件状态设置成无信号状态,线程就阻塞在 WaitForSingleObject函数处,一直等到主线程把接收到的数据处理完后,再将事件状态用SetEvent函数设置成有信号状态,释放 WaitForSingleObject函数对线程的阻塞,重新进入WaitCommEvent函数处等待串口数据的到来。循环接收、处理串口数据的流程如图1所示。

3完整的串行通信程序

头文件定义:

4结语

为了实现WindowsCE下PC与单片机的串行通信,本串口通信程序采用自定义的通信协议,在运行Windows 2000的PC机上,用Embedded Visual C++4.0编写,在PC机上编译、调试成功后,下载到运行Windows CE.NET 4.2的工控机上运行,实现了和单片机的正确通信,获得了很好的效果。本程序也能够应用于其他类似的测控应用场合。?


参考文献?
[1]傅曦,齐宇.嵌入式系统Windows CE开发技巧与实例[M].北京:化学工业出版社,2003
[2]田东风.Windows CE应用程序设计[M].北京:机械工业出版社,2003
[3][美]Douglas Boling.MICroSOFt Windows CE程序设计[M].北京博彦科技发展有限公司译.北京:北京大学出版社,1999
[4][美]Chris Muench. Windows CE权威指南[M].精英科技译.北京:中国电力出版社,2001.


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭