基于嵌入式WinCE与MSP430单片机多串口通信设计

发布者:Serendipity22最新更新时间:2021-06-09 来源: 21ic关键字:嵌入式WinCE  MSP430  单片机  多串口通信 手机看文章 扫描二维码
随时随地手机看文章

在远程监控和工业自动化系统中,串口通信因其具有连接简单、使用方便、可靠性高的优点,得到越来越广泛的应用。讨论了采用WinCE嵌入式与MSP430单片机构建串口多机通信系统的问题,在分析了WinCE操作系统与MSP430单片机串口模块特性的基础上,给出了进行串口通信的总体框图,针对实际串口通信存在的问题制定串行通信协议,然后在该系统硬件基础上根据需要定制WinCE系统内核,最后实现串口通信设计。实验结果表明:该系统能够达到多串口通信的要求。


目前WinCE嵌入式与MSP430单片机在仪器仪表、工业控制、移动设备等有着广泛的应用。在很多复杂的应用场合比如多点温度采集、多点转速采集,一个单片机不能满足要求,需要多台单片机协同工作,此时,多台单片机通信是实现的关键。以基于WinCE嵌入式设备为核心,取代传统意义上的PC机,采用TCP/IP通信机制搭建的串口通信系统,结合嵌入式设备和网络技术的优点,将各独立系统复杂的通信协议、数据格式进行统一的转化,特别适用于远程、多机串口通信,具有重要的使用价值和应用前景。


1 硬件平台

1)WinCE嵌入式采用友善之臂mini2440开发板作为硬件平台,mini2440开发板主要的硬件资源包括:SamsungS3C2440A,主频400MHz,最高533 MHz;1个100 M以太网RJ-45接口(采用DM9000网络芯片),1个通用异步串行口(UART);2个USB数据接口;1个LCD控制器;1个64MSDRA-M;1个SD卡接口;以及键盘接口和IDE接口等,利用上述的核心硬件资源,根据需要定制相关的内核,在EVC集成开发环境中编写应用程序。


2)MSP430F149单片机是TI公司芯片,它具有集成度高、外围设备丰富、超低功耗、1.8~3.6 V的低电压供电范围,5种可选的低功耗模式,低于6μs的唤醒时间等优点,是设计电池供电系统的极佳选择。由于具有16位RISC结构,16位寄存器和常数寄存器,MSP430达到了最大的代码效率。数字控制的振荡器提供快速从所有低功耗模式苏醒到活动模式的能力,时间少于6ms。MSP430F149带有2个16位定时器(带看门狗功能)、速度极快的8通道12位A/D转换器(ADC)(带内部参考电压、采样保持和自动扫描功能)、1个内部比较器和2个通用同步/异步发射接收器,硬件乘法器提高了单片机的性能并使单片机在编码和硬件上可兼容,所以在很多领域得到了广泛的应用。


3)PC机与WinCE嵌入式通过100 M/S以太网接口连接,WinCE嵌入式与MSP430F149通过RS232进行通信,串口通信总体框图如下图1所示。


a.jpg

2 WinCE嵌入式平台定制

WinCE嵌入式操作系统是一个紧凑、高效、可扩展开放的、可裁减的、32位的实时嵌入式窗口操作系统,其最大的特点是使用了分层结构技术,使系统具有更好的可扩展性和定制性,使应用程序和操作系统独立于具体硬件,以适应各种特殊的应用环境。操作系统从逻辑上可以分为硬件层、OEM层、操作系统层、应用程序层。基于嵌入式WinCE开发平台的定制主要是对操作系统层和OEM层进行定制。


微软提供了PB(Platform Builder)作为定制WinCE操作系统的集成开发环境。PB环境支持多种功能模块和硬件接口,可以根据目标设备的具体硬件配置进行WinCE的裁剪和定制,定制WinCE平台的流程如图2所示。首先,通过安装和创建设备驱动程序对网卡、串口、显示驱动、USB和电源驱动等硬件进行定制;然后,定制系统组件和服务,包括TCP/IP、FTP、MFC、Telnet等,并根据硬件配置和操作系统的应用特性修改配置文件;最后,生成操作系统映像文件,通过网口或串口将其下载到目标设备中运行。定制完成后,导出应用程序开发工具包SDK。


b.jpg

3 串口UART模块

3.1 WinCE操作系统串口

在WinCE下运行的程序,一般是在Windows环境下开发的,然后下载到嵌入式设备中。系统中是在Windows环境下用EVC去开发应用软件,然后下载到设备中去。串口在WinCE中属于流接口设备,可以像对文件一样对串口进行打开、关闭、读写等操作。WinCE下的串口函数和Win-dows下的串口函数基本相同,但在一些方面有所不同:1)WinCE只支持Unicode;2)WinCE中有一些自己特有的控件,可以方便编程;3)EVC不支持重叠I/O操作。


3.2 在WinCE下开发串口通信步骤

1)打开端口并进行初始化 在EVC中把设备当做文件来处理,故使用CreateFile来打开端口。如果打开成功,则会返回打开串口的句柄。成功打开一个端口之后,需要对端口进行初始化。调用串口通信函数SetupComm,设置COM的发送和接收缓冲区的大小。分配好缓冲区以后,调用CetCommTimeouts函数对读写串口进行超时设置。然后调用GetCommState函数获取当前串口的默认参数并返回一个DCB结构体地址,通过给这个DCB结构体各成员赋值来重新设定串口状态。最后调用PurgeComm函数清空串口的发送接收缓冲区。


2)对串口进行读写操作 成功配置好串口参数后即可调用函数ReadFile和WriteFile对串口进行读写操作。在通信的过程中可能出现通信错误导致程序无法继续进行,一般需要调用ClearCommError清除这些错误。


3)关闭串口 使用完串口后必须关闭串口。串口不能像文件一样被共享,不释放别的应用程序不能使用。关闭串口只需使用CloseHandle即可。WinCE串口流程图如图3所示。


c.jpg


3.3 MSP430F149单片机UART模块特点

MSP430单片机的UART模块具有比普通51单片机更完善的特性,如可选择奇偶校验方式、波特率小数部分可编程、提供差错控制及错误状态位、串口中断唤醒CPU等。将这些特点应用于串口通信中可以增强通信的可靠性,比如:UART硬件模块可以被设置为若奇偶校验出错则不接收当前数据,通过设定波特率调制值可使波特率更准确,通过休眠模式的应用可提高CPU工作的效率并降低系统的功耗。对于多机通信,MSP-430单片机内置了空闲式(idle-line)和地址位式(address-bit)两种多机通信模式,为提供可靠高效的多机通信提供了保证。两种模式主要在如何确定地址帧方面存在差别:1)空闲模式:两个数据块之间的传输空闲时间大于或等于10 bit,也即用传输线上大于或等于10 bit空闲之后的第一个数据表示地址。2)地址位模式:通过字节帧中的地址位(1或0)指示该帧是地址帧还是数据帧。一由于空闲模式要求两个数据块之间一定要有大于或等于10 bit的时间间隔,所以在连续传输的场合传输速率会比地址位模式慢,但是编程简单。


4 串口通信协议设计

在WinCE嵌入式和多台MSP430单片机的通讯中,确定一个明确而合理的通讯协议是关键,包括对数据格式、通讯方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定。为了区别不同的分机,必须为每个分机分配一个唯一的地址,此地址唯一区别各单片机。数据格式采用数据包的形式,一次传输一组数据。数据包格式如表1所示。

d.jpg

数据格式中的地址位表示与PC机通讯的单片机地址。操作命令则表示此次通讯要完成的操作。在单片机发送上位机接收的时候,此时数据包中的数据长度、数据内容、和检验3个域便填充实际发送数据的个数、数据及和校验;操作命令域在PC机发送单片机接收的时候也有相似的协议规定。


5 TCP/IP数据通信

TCP/IP数据通信模块用于完成WinCE嵌入式与PC机服务器之间的通信,其主要功能包括,接收下位机发来的信息、发送控制命令,控制程序的运行状态,为多机串口通信提供方便。数据通信模块采用基于WinCE的TCP/IP协议,能够保证在传输过程中数据的准确性和可靠性;嵌入式系统硬件抗干扰能力强,能够保证系统长期稳定运行。客户进程建立连接及通信的程序流程如图4所示。


e.jpg

在基于Wince的TCP/IP协议中,其通信实现流程为:TCP服务器首先调用socket()函数建立流式套接字,然后调用bind()绑定本地地址,调用listen()函数进行客户终端连接,一旦与客户终端连接后,服务器就调用accept()函数接收终端的连接请求,并建立连接,同时服务器端启动一个新线程,建立单独的套接字实例与客户终端进行通讯。


TCP客户端通信实现流程为:调用socket()函数建立流式套接字,然后调用connect()函数,请求与WinCE服务器建立TCP连接,成功建立连接后,同服务器进行数据传输。

服务进程和客户进程通过调用send()和recv()来交换数据,服务器可向客户端传送所收集的数据。客户端则向服务器反馈控制信息和参数调整信息:服务进程或客户进程可通过调用close()来撤消套接字并中断连接。


6 结论

串口通讯方式在计算机控制系统中有着广泛的应用,通过WinCE嵌入式与多台MSP430单片机串口通信研究开发,运用嵌入式、单片机及网络通信技术实现了多机串口通信。本文设计的通讯协议经实践证明稳定可靠,保证了单片机与PC之间数据传输的准确率。本文所采用的技术在远程控制,工业控制等领域具有重要的实用价值和广泛的应用前景。

关键字:嵌入式WinCE  MSP430  单片机  多串口通信 引用地址:基于嵌入式WinCE与MSP430单片机多串口通信设计

上一篇:MSP430系列单片机的加密熔断器设计
下一篇:基于自由摆的平板精确控制与激光追踪系统

推荐阅读最新更新时间:2024-11-07 06:53

跟我学51单片机(二):单片机内部定时/计数器和中断系统
上讲通过讲述用单片机控制一个外部的LED闪烁实验来向读者介绍了单片机的工作原理与开发流程。这一讲将介绍单片机内部非常重要的两个资源——定时/ 计数器和中断系统。通过该讲,读者可以掌握定时器的工作原理和单片机的中断系统。   从而设计定时器计数程序和中断服务程序。   一、原理简介   首先让我们举闹钟为例,将它定时在一分钟后闹铃,这就需要秒针走一圈(60 次)。即一分钟时间转化为秒针走的次数,也就是计数的次数,计数到了60 次然后闹铃,而每一次计数的时间是1 秒。   单片机内部的定时/ 计数器跟闹钟类似,可以通过编程来设定要定时的时间、定时时间到了进行相应的操作。那么在单片机内部计数一次的时间是多少呢,51 单片机输入
[单片机]
跟我学51<font color='red'>单片机</font>(二):<font color='red'>单片机</font>内部定时/计数器和中断系统
无需PLC或微控制器提供比例的电磁阀控制
摘要:线性变化作为一个可变电阻分压器连接到LED的驱动程序(作为电磁PWM驱动器操作)DIM输入,数字电位器的行为。该电路驱动直流电磁铁范围从6V到40V直流注册,只用电磁铁的6V至40V直流电源。   比例控制液压系统中发现一些工业电磁铁通常是驱动微控制器或可编程逻辑控制器( PLC )。这种复杂的驱动程序通常需要几个不同的逻辑和控制电源电压。 (该比例控制的目的是将电磁阀柱塞到任意位置并离开那里。)一套和拉倒电磁驱动,但是,应该不需要昂贵的PLC或一个微控制器的处理能力。理想的情况下,它应该工作在电磁自己的电源电压。   在图1中的电路是否符合这些要求,同时只占用一个小型表面贴装足迹。 U2是350mA的驱动器,带有内置模
[工业控制]
无需PLC或<font color='red'>微控制器</font>提供比例的电磁阀控制
德州仪器推出超低功耗转换技术
北京2014 年9 月17日电 /美通社/ -- 日前,德州仪器(TI)宣布推出业界最小、最低功耗的线性电池充电器以及静态电流流耗仅为 360nA 的全面集成型微型 DC/DC 电源模块,帮助延长可穿戴电子设备、远程传感器以及 MSP430™ 微控制器应用的电池使用寿命,从而可为超低功耗设计实现创新的电源管理方式。 最小、最低功耗的线性充电器 最新 bq25100 单体锂离子电池充电器采用 0.9 毫米 x 1.6 毫米 WCSP 封装,可支持尺寸仅为之前一半的充电器解决方案。该器件支持高达 30V 的输入电压,不仅可对低至 10mA 或和达 250mA 快速充电电流进行准确控制,同时还可实现低至 1mA 的充电终止,
[电源管理]
MSP430F5438A单片机低功耗设置
MSP430F5438A单片机低功耗设置,以进入LPM3为例: 1、MSP430F5438A外部时钟分别为8M和32.768,程序正常运行时选择8M主时钟,当程序需要进入低功耗时,需要将主时钟切换为32.768,代码如下(自己试着改的。。) void InitClock() { WDTCTL = WDTPW + WDTHOLD; // Stop WDT //P11DIR |= 0x07; // ACLK, MCLK, SMCLK set out to pins //P11SEL |= 0x07; // P11.0,1,2 for debugging purposes. __bis_SR_regist
[单片机]
基于MCU的抽油机节能控制仪表与控制技术
  为了实现抽油机能自动根据负载需要实时进行 /Y双向切换和间歇定时控制的目标,采用嵌入式控制技术设计了如图1所示的控制电路。 ?   智能功率控制器的硬件系统以新华龙电子公司为C8051F206配套的实验板为基础,新增输出电路和键盘显示电路后形成。直接利用实验板上的C8051F206MCU、JTAG接口、晶振、复位及电源电路,大大降低了硬件设计工作量。   (1)输出电路   本系统的被控对象是电机的开关。为满足星角切换和开机/停机要求,需要对3只交流接触器(C1~C3)按一定组合关系进行控制,其电路原理和控制真值表如图2(a)和图2(b)所示。考虑到现场抗干扰的需要,在输出端口P0.1,P0.3和P0.5后采用了光电隔离
[单片机]
基于<font color='red'>MCU</font>的抽油机节能控制仪表与控制技术
关于单片机STM32裸机程序架构设计
本着授人以渔的原则,既提供我一直在用的程序架构,也讲程序架构的设计思路。 如果本文内容,你都能领悟并做到,不管项目多复杂,都将游刃有余。 我研发的那几年,接触大多数工程师,都没有程序架构的概念,基本一个while死循环干到底。 模块之间也没有封装好,导致代码写好以后,扩展性和维护性太差,类似的功能代码,也很难移植到新项目去复用。 早期我也是这样写的,反正实现功能就行了,代码好不好,功能上又看不出区别。 不过,等你接触到复杂的项目时,这招就行不通了,没设计好程序架构,根本做不稳定。 我意识到这个问题,是碰到两种需求的时候: 1.是做一个基于STM32的网关项目,项目做完以后,客户老是要改功能,客户不懂技术,在客户眼里,觉得改一个
[单片机]
关于<font color='red'>单片机</font>STM32裸机程序架构设计
单片机入门教程第22课-串行口应用编程实例
1. 串口方式0应用编程 8051单片机串行口方式0为移位寄存器方式,外接一个串入并出的移位寄存器,就可以扩展一个并行口。 例:用8051串行口外接CD4094扩展8位并行输出口,如图所示,8位并行口的各位都接一个发光二极管,要求发光管呈流水灯状态。 串行口方式0的数据传送可采用中断方式,也可采用查询方式,无论哪种方式,都要借助于TI或RI标志。串行发送时,可以靠TI置位(发完一帧数据后)引起中断申请,在中断服务程序中发送下一帧数据,或者通过查询TI的状态,只要TI为0就继续查询,TI为1就结束查询,发送下一帧数据。在串行接收时,则由RI引起中断或对RI查询来确定何时接收下一帧数据。无论采用什么方式,在开始通讯之前,都要先对控制
[单片机]
<font color='red'>单片机</font>入门教程第22课-串行口应用编程实例
你了解GD32 MCU上下电要求吗
你了解GD32 MCU的上下电要求吗?MCU的上下电对于系统的稳定运行非常重要。 以GD32F30X为例,上电/掉电复位波形如如下图所示。 上电过程中,VDD/VDDA电压上电爬坡,当电压高于VPOR(上电复位电压)MCU开始启动,之后内部逻辑电路延迟2ms后NRST引脚拉高,MCU正式启动,此为上电过程。上电过程中,对于上电爬坡斜率没有要求,对于电源稳定性有要求,上电过程中尽量避免电源波动以及突然的跌落,比如上电到2.6V以后再次跌落到POR附近,但没有跌破PDR,则有可能造成MCU加载代码异常进而导致启动失败。 掉电过程中,当电压低于VPDR后,NRST拉低,MCU完成掉电。掉电电压需要跌落到VPDR以下,尽量跌落到0V
[单片机]
你了解GD32 <font color='red'>MCU</font>上下电要求吗
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved