基于WinCE和ARM的多串口扩展及485通信设计

合集下载

WINCE实验4-串口通讯实验

WINCE实验4-串口通讯实验

WINCE嵌入式系统实验——基于ARM11 DMA6410xp平台四串口通讯实验4.1 实验目的(1) 了解ARM中串口通讯基本原理(2) 利用VS2005实现UART串口通讯4.2 实验内容(1) WinCE6.0下实现串口通讯(2) 利用VS2005制作串口通讯测试程序4.3 实验步骤(1)第一步:建立Uart工程。

首先打开桌面上的Visual Studio 2005,选择File→New →Project建立名为Uart的MFC程序,添加Button与Edit Control控件。

界面如下:其中Button ID分别为:IDC_BUTTON_OPEN (Caption 打开)IDC_BUTTON_CLOSE (Caption 关闭)IDC_BUTTON_CLEAR (Caption 清空)IDC_BUTTON_SEND (Caption 发送)添加两个Edit Control控件:上面文本框ID为IDC_EDIT_RECEIVE,Read Only为True,Multiline为True,Auto HScroll为False,Auto VScroll为True,Vertical Scroll 为True。

下面文本框ID为IDC_EDIT_SEND,Multiline为True,Auto HScroll为False,Auto VScroll为True,Vertical Scroll 为True。

(2)第二步:添加代码。

添加读串口线程函数ReadThread将下列代码加入到UartDlg.cpp中。

//接收串口数据线程UINT ReadThread(LPVOID pParam){CUartDlg *Pthis = (CUartDlg*)pParam ; //转换参数为CUartDlg类型,以便于等下可以使用它的成员变量和函数等。

if(Pthis == NULL) //检查参数是否有效return 0;BYTE byData;DWORD dwBytes;BYTE byReceiveBuf[1024]; ///缓冲区的大小int nBytes= 0;DWORD evtMask;//设置字符监听信号SetCommMask (Pthis->m_hcom, EV_RXCHAR | EV_CTS | EV_DSR );//只要m_hcom有效,就一直循环while (Pthis->m_hcom != NULL && Pthis->m_hcom !=INVALID_HANDLE_VALUE){//等待收到串口信号if (WaitCommEvent(Pthis->m_hcom, &evtMask, 0)){//设置字符监听信号SetCommMask (Pthis->m_hcom, EV_RXCHAR | EV_CTS | EV_DSR );//清空接收数组memset(byReceiveBuf, 0, 1024);nBytes = 0;do{//读字符if(ReadFile(Pthis->m_hcom, &byData, 1, &dwBytes, 0)){if(dwBytes == 1){byReceiveBuf[nBytes++] = byData;if(nBytes == 1024){break; //接收缓冲区已满}}}} while (dwBytes == 1);byReceiveBuf[nBytes] = '\0';if(nBytes == 0) //没接到数据{continue; //继续循环}//开始对收到的字符串进行处理CString str;//读取接收文本框中原来的字符((CEdit*)Pthis->GetDlgItem(IDC_EDIT_RECEIVE))->GetWindowTextW(str );CString str_new;//把新收到的字符转换称CString类型str_new = byReceiveBuf;//连接原来的字符和新的字符str += str_new;//设置接收文本框的字符((CEdit*)Pthis->GetDlgItem(IDC_EDIT_RECEIVE))->SetWindowTextW(str );}}return 0;}编写写串口数据函数WritePort。

基于WinCE的串行通信设计

基于WinCE的串行通信设计

Win CE-Based Design of Serial Communication 作者: 程伟[1]
作者机构: [1]宜宾学院网络管理中心,四川宜宾644007
出版物刊名: 内江师范学院学报
页码: 60-62页
主题词: 视窗操作系统CE;串行通信;线程调度;嵌入式VC++
摘要:简要介绍了基于Win CE的串行通信的数据收发基本过程,运用微软公司的嵌入式开发平台EVC,开发完成了基于Windows CE的串行通信程序设计,并通过以太网接口下载到烧有WINCE操作系统的目标板S3C2410嵌入式开发板上,实现了PC与目标板的数据收发功能.该设计具有可移植,执行效率高,稳定性好等的特点.。

基于WinCE的超声乳化仪多串口通信

基于WinCE的超声乳化仪多串口通信

串 口通 信 类 有 一些 与桌 面 Wid w n o s不 同 的地 方 。 通 信 时 , 信 通 双方 必 须 遵 循 一定 的通 信 协 议 , 则 就会 引起 数 据 紊 乱 。 否
多 串口分 层 流驱 动 的 设 计 , 以 眼科 医疗 产 品— — 超 声 乳 化仪 为 背景 , 并 分析 了相 关 系统模 型 和 程序 代 码 。 关 键 词 : n E E C, 串 口通 信 , 声 乳 化仪 Wi ,V 多 C 超
Abs r t tac
Th p c em usf r s as I e im en i m e ca equp e tte e ha o lie i cl s i I qup I t n di l im n . hi er e —t ca bit r h gh r al i me pa ly equrm e s n te i i e nt a d h
moe c mpe a k o h c e li rs se pe e tma y p o lms t h e inn . a e n te a ay i o n o r o lx ts s frP a o mus e y tm rs n n rbe o te d sg i B s d o h n l s n Wid ws i f g s
WiC n E是 一 个 基 于 U io e的操 作 系 统 ,并 且 WiC nc d n E不 支 持 Wid w n o s下 常 用 的 串行 通 信 IO 重 叠 方 式 ,因 此 编 写 W i E / n C
高 , 上 位 机 和 下 位 机 之 间 的 数 据 交 换 能 力 强 。 本 文 以 基 于 WiC 的嵌 入式 设 备 为 核 心 , 用 多 串 口 , 线 程 技 术 将 信 号 nE 采 多 采集 、 号传输和数据处理相对分离 , 高了系统抗干扰 能力 、 信 提

基于WinCE系统平台的自动校直机产品串口通信的设计

基于WinCE系统平台的自动校直机产品串口通信的设计

aP r 实 现 串 口 的异 步 、 步通 信 , 后 所 有 程 序 在 蓝 海 微 芯 公 司 提 供 的 e n 0 0 体 机 上 运 行 测 试 成 功 。 |ot 同 最 Wi7 0 一
关键 词 : n E操 作 系 统 ; 2 0 ; 件 S r l o t WiC VS 0 5 控 eiP r a 中 图 分 类 号 : P 1 T 31 文 献 标 识 码 : B d i1 . 9 9 j i n 1 7 — 4 7 2 1 . 3 0 0 o : 0 3 6 /.s . 6 43 0 . 0 1 0 . 2 s
如下 :
H ANDIE e t Fi Cr a e l e( LPCTSTR i l Na pFie me,
需要 与外 部设 备进 行 数 据 交互 , 口提 供 了数 据传 串
输 的通道 , 并且 使用 起来 非常 方便 , ] 因此 本文 重 点 研究 WiC n E操 作 系 统 串 口通 信 的 基 本 编 程 技 术 ,
Ke wo d : i y r s W nCE S;V ¥2 O5; Se i l O O ra Por t
了测 试 。
引 言
2 WiC 串 口编 程基 础 nE
wiC n E操作 系统具 有实 时性 好 , 支持 多 任务 可
切换 , 一体 化 的人机 界面 , 适用 于 多种开 发语 言等特 点, 因此越 来越 受 到工业 控制 领域 编程人 员 的青睐 。 基 于 WiC n E平 台 的校直 机 产 品 在工 作 过 程 中经 常
为实 现 wiC n E操 作 系 统 的 串 口通 信 , 文 所 本
选 的编程 工具 为 VS 0 5 微 软 公 司 为 WiC 20 , n E操 作

基于ARM的多串口扩展及高速485通信设计

基于ARM的多串口扩展及高速485通信设计
中阅 诹嚣 { 承 表C H I N A I N S T R U M E N T A T I O N
2 O 1 3 年 第5 期
T E C H N I C A L E X P L O R A T I O N l 技术探讨
基于AR M 的多串口扩展 及高速4 8 5 通信设计
De s i gn o f Ex t en d e d Mu l t i p l e Se r i a l Por t an d Hi gh - - 48 5
c o m mu n i c a t i o n i n i n d u s t r i a l a p p l i c a t i o n , Us i n g ARM 7 e mb e d d e d mi c r o p r o c e s s o r L PC2 2 9 4 a n d

要: 为 解 决工 业现 场应 用中对 多串口及 高速 总
线 通信的要 求 , 采 用AR M7 嵌 入 式微控 制 器L P C 2 2 9 4 与S C 1 6 C 6 5 4 芯 片进行 多串口扩
展, 并在 此基 础 上使 用MAX1 3 4 1 3 芯片实
现 高速 4 8 5 通信, 对L P C2 2 9 4 与串口扩展 芯 片及4 8 5 芯片间的接 口设计 和软 硬件设计进
c h i p. Th e e x pe r i me n t a l a nd t e s t i n g r e s ul t s s ho w t h a t
2硬件设计
2 . 1主 要器 件选 型 2 . 1 . 1 L P C2 2 9 4 微控 制器
6 3
1引言
随 着 嵌入 式系 统 的进 一 步发展 , 以及 现 场总线 等 技 术 的大 量 使 用 , 串口通 信 在各 种 场合 的应 用越

485总线设计方案加上位机扩展

485总线设计方案加上位机扩展

通过RS485总线实现多路防区的监控报警一、方案目标本次设计前端采用主动红外探测,当有报警信号传入时,由挂在红外上面的AT89C51单片机识别防区地址,AT89C51单片机通过前端发送器MAX485转换模块接入RS485总线,信号通过RS485总线接入总控室,再通过后端接收器MAX485转换模块接收到信号,将信号传送给AT89C51单片机,AT89C51单片机接收信号并判断地址,控制其后端对应的的发光二极管闪烁,管理员可根据发光管的提示知道是哪个防区有报警,即可采取相应措施。

因为此设计采用RS485总线方式传输,所以可将防区最多扩展到32路,如果通过中继器最多可扩展到128路。

二、设计方案及接线原理图图(一)实验方案图注#图中下位机的为各个监测点,如主动红外,被动红外,烟感……当有一路出现险情时就会产生一个信号从而触发单片机,进而通过MAX485转换模块接到RS485总线上后由其传输给上位机从而进行处理,上位机根据所给的信号地址依次对应防区上的模拟地图(模拟地图与所对应防区事先对应)进行驱动发光,同时为了更方便直接显示,我们可以给单片机上加个喇叭驱动无论哪一路有险情时,后面的喇叭都会响,从而让保安人员能够第一时间去查看有险情的地方,从而防止漏报……当险情排除后通过复位键后将其复位,这些在下面的接线图中会显示出来。

扩展:图中仅画出大概思路应该这样并未将8路或者更多路表示出来……这些以后在具体模拟或现场会表现出来。

按理C51的有四个接口动可以驱动,当防区多的话必然不够,因此需要扩展,我们采用的是利用单片机与74HC164等若干芯片实现对其扩展,类似于中继器,从而进行扩展……图(二)接线图(上位机未扩展)注#图中的接线图仅画了一路来表示,实际中有N路,先用一路与上位机尝试实现通信……三、实现报警的信号能被单片机识别的思路图中AT89C51单片机P1口接主动/被动红外探测,单片机识别的语言是高级语言,即二进制。

基于WinCE的串行通信设计_程伟

基于WinCE的串行通信设计_程伟

内江师范学院学报JOURNAL OF NEIJIANG NORM AL U NIVERSIT Y 第24卷第2期No.2Vol.24基于Win CE的串行通信设计程伟*(宜宾学院网络管理中心,四川宜宾644007)摘要:简要介绍了基于W in CE的串行通信的数据收发基本过程,运用微软公司的嵌入式开发平台EVC,开发完成了基于W indo ws CE的串行通信程序设计,并通过以太网接口下载到烧有WI NCE操作系统的目标板S3C2410嵌入式开发板上,实现了PC与目标板的数据收发功能.该设计具有可移植,执行效率高,稳定性好等的特点.关键词:视窗操作系统CE;串行通信;线程调度;嵌入式VC++中图分类号:T P311.5文献标识码:A文章编号:1671-1785(2009)02-0060-030引言嵌入式系统是以应用为中心,以计算机技术为基础、软硬件均可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统[1].Window s C E就是这样一个抢先式多任务,并具有强大通信能力的Win32嵌入式操作系统.它是微软专门为信息设备、移动应用、消费类电子产品、嵌入式应用等非PC(Personal Computer)领域而从头设计的战略性操作系统产品.Window s CE的设计目标是模块化及可伸缩性、实时性能好,通信能力强大,支持多种CPU.它的设计可以满足多种设备的需要,这些设备包括了工业控制器、通信集线器以及销售终端之类的企业设备,还有像照相机、电话和家用娱乐器材之类的消费产品[2-3].计算机串口编程[4-5]在通信软件中有着十分广泛的应用,如电话、传真、流媒体控制等.一般情况下,涉及到远程通信、自动控制的行业,通常也会涉及到串行通信技术.因此,在嵌入式系统开发与应用无处不在的情形下,本文针对Window s CE在嵌入式串行通信中的应用,基于S3C2410[6]和W in CE实现PC与目标板的串行通信开发[7],具有一定应用价值.1串行通信设计1.1多线程处理在Window s CE中,是采用同步对象的方法来协调多线程的执行.一个线程监视一个同步对象,当用信号通知该对象时,解除正在阻塞的线程并调度该线程.Windows CE 常用等待函数阻塞线程自身的执行,等待其监视的对象产生一定的信号才停止阻塞,继续线程的执行.1.2初始化与端口配置在所有的流设备驱动中,均使用CreateFile来打开串行端口设备,如果这个端口不存在,CreateFile返回ER-ROE_FIL E_N OT_FOUND.因此,用户指定的端口必须在存在并且可用,而且要遵循Window s CE流接口设备驱动程序的命名规则.如本文中有代码:hSerial=Creat eFile(T EXT"COM1:",GENERIC_ READ|GEN ERIC_WRIT E,0,NU LL,OPEN_EXIST-ING,0,NU LL).CE的串口驱动不支持重叠,如果这样收和发就要分开.要接收串口数据就必须创建一个线程专门用于接收数据.串口的配置不需要设置很多参数,默认的配置大部分是不需要修改的.一般改动就是波特率、位数、奇偶校检等几项.超时值是需要改动的.ReadIntervalTimeout是指两个字符传送之间的超时时间.一次写操作的超时时间等于WriteTotalT im eout Multiplier乘以要发送的字符数加上WriteTotalT im eout Constant,单位是毫秒.读操作的超时和写类似,所以设置超时是一个关键,设置太小可能丢失数据.1.3数据的发送与实现串行通信的数据发送实现是很容易的,不过需要注意的是,如果终端设备需要一定处理时间或者称反应时间的话,那么两个写操作之间一定要注意时间间隔不能太小.具体的时间与终端设备的反应时间和缓冲区大小有关.#60#收稿日期:2008-10-06作者简介:程伟(1973-)男,四川仁寿人,宜宾学院网管中心实验师,主要从事信息处理及网络通信的研究.2009年2月程伟:基于W in CE的串行通信设计本文设计中的消息数据发送流程设计如图1所示:图1发送消息流程图主要代码段:,hw ndST ex t=GetD lg Item(hWnd,ID_SENDT EX T);GetDlgT ex t=(hw ndST ex t,szT ex t,dim(szT ex t));Wr iteFile(hSer ial,//句柄szT ex t,//数据缓冲区地址lstrlen(szText)*sizeof(TCHAR),//数据大小&cBy tes,//返回发送出去的字节数N U LL//不支持重叠);Set Dlg T ex t(hwndST ext,T EXT(""));,1.4数据的接收与实现串口读取数据除了要考虑实时性外,还要解决接收到的数据的处理工作.如果在读取串口数据的线程中安置数据处理工作,那么可能会丢失数据(终端设备发送数据但是没收到),也有可能不会丢失(终端设备发送的数据的时间、大小都是确定的).如果肯定接收的数据在处理工作结束后终端设备才发送数据,那么完全可以将数据处理工作放在读取串口的线程中.对于实时的读取数据,下面提供了一种解决办法.本文设计中的消息数据接收流程设计如图2所示:图2接收消息流程图主要代码段:SetCommM ask(hPo rt,EV_RXCH AR);w hile(hP or t!=I NV A L ID_H A ND LE_VA L U E){DW ORD dw Co mmStatus;W aitCommEvent(hP ort,&dw Co mmSt atus,0);SetCommM ask(hPo rt,EV_RXCH AR);/重新设置要等待的信号tch=0;pPtr=szT ex t;//接收数据do{ReadFile(hP ort,pPtr,1,&cBytes,0);,memcpy(pT mp,R eceiv eBuf,iCo unter);pT mp[iCo unter]=N U L L;//字符串结尾//创建新线程处理数据A fx Beg inT hread(Pr ocessD at a,pT mp);//在P ro cessData函数中处理数据.,SetDlgItem(pP tr);SetDlgT ex t(hw ndST ex t,T EX T(""));}//end while,2实验调试2.1PC与S3C2410嵌入式开发板的连接在调试之前需要烧写带有网卡驱动和串口驱动的操作系统,然后用网线连接主机与S3C2410的网络接口,并打开电源(见图3~4).图3TCP/IP属性配置2.2远程调试EVC集成开发环境和VC集成开发环境比较起来,除增加了模拟器、平台管理器外,还增加了远程调试工具. EVC下的模拟器专用于调试应用程序、DL L等,它能够模拟Window s 操作系统.为验证程序的可靠性,先将编译的程序生成串口应用文件,然后在主机上利用Window s自带的超级终端与目标板进行数据收发实验(见图5~6).#61#内江师范学院学报第24卷第2期3 结语目前,流行的基于CE(Consumer Ele ctronic s)的设备很多都具有像导航、呼叫等功能,其相应的GPS 、GSM/GPRS 模块都是外置串口的终端设备,这使得基于嵌入式的串口通信开发具有一定的实际意义.本文首先简要介绍了基于Win CE 的串行通信的数据收发基本过程,运用微软公司的嵌入式开发平台EVC,开发实现了基于Windows CE 的串行通信,并给出了部分关键代码.然后进行了远程的实验配置与调试,实现了PC 与S3C2410嵌入式开发板的数据收发功能.开发完成的基于Win CE 的串口通信,具有代码可移植,执行效率高,稳定性好等的特点.参考文献:[1]季昱,林俊超,宋飞.A RM 嵌入式应用系统开发典型实例[M ].北京:中国电力出版社,2005.[2]周毓林,宁杨,陆贵强,等.W indow s 内核定制及应用开发[M ].北京:电子工业出版社,2005.[3]傅曦.嵌入式系统W indo ws CE 开发技巧与实例[M ].北京:化学工业出版社,2007.[4]张筠莉,刘书智.V isual C++实践与提高)))串口通信与工程应用篇[M ].北京:中国铁道出版社,2006.[5]李长林,高洁.Visual C++串口通信技术与典型实例[M ].北京:清华大学出版社,2006.[6]陆启帅,蒋冰华,李寒生.基于S3C2410和W indow s CE的智能移动终端设计[J].陕西理工学院学报:自然科学版,2005,21(4):13-15.[7]李寒生,陈晓辉,陆启帅.W indow s 的串口通讯类设计[J].陕西理工学院学报:自然科学版,2006,22(4):55-57,68.Win CE -Based Design of Serial CommunicationCH EN G wei(T he N etw or k M anag ement Center ,Y ibin U niver sity,Y ibin,Sichuan 644007,China)Abstract:A fter a br ief intro duction to the basic process of data transmitting and receiv ing of W in CE-based serial com -munication,one pr og ram design of W in CE -based serial communicat ion is dev eloped thr ough the use of the embedded develop -ment platfo rm (EV C)o f M icro so ft Cor po ratio n.T hen such a pro gr am is dow nlo aded t hr ough an Et her net inter face to the tar -g et bo ard (an S3C2410embedded dev elopment bo ard)w hich has installed a W in CE o per ating sy stem,w hich in the end helps realise t he data transmitting and r eceiving function of a P C and the targ et bo ard T his desig n is character ized by its por tabilit y,high ex ecuting eff iciency and excellent stabilit y.Key words:W indo ws CE embedded operating sy stem;serial communicat ion;thread scheduling ;embedded v isua l C++embedded development(责任编辑:胡 蓉 英文审译:阳卓胜)#62#。

基于ARM9与LINUX的RS485总线的通信接口设计

基于ARM9与LINUX的RS485总线的通信接口设计

基于ARM9与LINUX的RS485总线的通信接口设

摘要:在ARM9处理器S3C2440上设计RS485通信接口,实现与总线上其他设备的通信,利用ARM9处理器内部集成的UART外设和
RSM485CT模块组成RS485通信硬件接口,在嵌入式Linux系统下设计
RS485通信程序实现与RS485总线上的其他外设间的数据互通。

实验效果良好,表明该设计是行之有效的。

文中在介绍了通信接口的硬件设计、Linux
下RS485驱动设计、通信程序设计的同时,重点介绍了Linux系统下RS485通信程序的编写方法以及RS485总线上设备通信的实现过程。

0引言
随着ARM处理器应用的范围的不断深入,根据需求的不同ARM提供的外设也越来越丰富,常用的通信接口有RS232、RS485、CAN、以太网等。

RS485总线凭其传输距离远、抗干扰能力强、价格低廉等优点在各种工业场合得到广泛的应用。

设计使用ARM9处理器S3C2440内部集成的UART 外设和RSM485模块构建具有电源隔离、电气隔离、总线保护的RS485总线接口,通过对嵌入式Linux系统RS232驱动程序的修改,使的在通过该修改后的串口驱动程序发送数据时,自动控制IO来实现RS485通信的方向控制,从而简化了RS485通信的控制流程,Linux下RS485通信程序通过对该串口的读写,实现与RS485总线上的其他设备通信。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于WinCE和ARM的多串口扩展及485通信设计贾继鹏;张永坚;胡延凯【摘要】Along with the book evaluating standards for renewable energy building’s application projects implements in our country, we are in urgent need of the operational datas about the renewable energy building’s application demonstration projects. The data acquisition system of the renewable energy building’s application demonstration projects has one demand of multiple serial ports and a 485 bus communication. This paper uses ARM9 S3C2440 embedded microcontroller and VK3234 with four channel UART/SPI interface to extend serial. What’s more, it achieves the 485 communication between the field detection device and data acquisition device with MAX3485. This paper states the interface and software and hardware between S3C2440, VK3234 and MAX3485E specifically. The practical running test in the laboratory shows that the system is stable and reliable, and it has been applied in the data monitoring system of the renewable energy demonstration projects.%随着我国《可再生能源建筑应用工程评价标准》的实施,对已建可再生能源建筑应用示范项目运行数据的需求越来越迫切,为了解决可再生能源建筑应用示范项目数据采集系统中对多串口及485总线通信的需求,采用 ARM9嵌入式微控制器 S3C2440和具备 UART/SPI 接口的4通道芯片VK3234进行串口的扩展,并利用MAX3485E芯片,实现了现场检测设备与数据采集器之间的485通信。

本文对S3C2440和VK3234、MAX3485E芯片之间的接口和软硬件的设计进行了具体的阐述,在实验室的实际运行测试中表明该系统稳定可靠,并运用到可再生能源示范项目数据监测系统中。

【期刊名称】《计算机系统应用》【年(卷),期】2015(000)005【总页数】6页(P62-67)【关键词】S3C3440;VK3234;MAX3485E;串口扩展;可再生能源;数据采集【作者】贾继鹏;张永坚;胡延凯【作者单位】山东建筑大学信息与电气工程学院,济南 250101;山东建筑大学信息与电气工程学院,济南 250101;山东建筑大学信息与电气工程学院,济南250101【正文语种】中文随着嵌入式系统的迅猛发展,以及现场总线技术的大量应用,串口通信在各领域的应用越来越广泛.在可再生能源建筑应用示范项目数据采集系统中,需要对8个以上的不同串口设备进行数据采集和数据分析[1],为了保证数据的准确性和系统的稳定性,控制器需要完成多个串口设备间进行数据的通信和交换,且具有数据分析功能. 普通设备的主控器通常采用单片机,一般只有1~3个串口,且没有数据分析功能,不能满足数据采集系统中的多点采集和数据分析功能需求. 为了满足可再生能源建筑应用项目对数据多点采集的需要,本文对S3C2440处理器的UART 接口进行了扩展,通过采用2 片VK3234串口扩展芯片[2],由S3C2440处理器的两个UART接口扩展出8个串口;基于ARM S3C2440处理器的嵌入式系统,可以运行WINCE操作系统,安装嵌入式数据库,并具有数据分析功能,且其丰富的接口和功能强大的外围接口芯片,为串口的扩展和485通信的设计提供了方便. 为了满足数据的多点采集和数据分析功能,本设计的方案采用S3C2440、VK3234、MAX3485E的硬件框架结构,软件平台基于WINCE 6.0操作系统[3],其硬件和软件的开发周期较短. 系统总体框图如图 1 所示.该设计包括串口扩展、RS-485通信硬件电路设计和VK3234驱动程序的开发. 2.1 核心元器件选型2.1.1 S3C2440微控制器S3C2440是由三星公司推出的32位RISC(Reduced Instruction Set Computer)微处理器,为各领域的应用提供了低价格、低功耗、高性能小型微控制器的解决方案. 其采用了ARM920T的内核[4],0.13um的CMOS 标准宏单元和存储器单元,具有130个通用I/O口和24通道外部中断源、3个UART接口、SD卡接口,主频可达533MHz[5]. 本文的设计选用两片VK3234芯片对其中两路UART接口分别扩展.2.1.2 VK3234多总线接口、四通道通用异步收发器VK3234不需要地址线控制串口扩展方式,通过芯片内置的协议处理器实现多串口的扩展,是具备UART/SPI接口的4通道UART器件,具有自动RS-485收发控制的RTS引脚. 可以通过模式选择使得该芯片工作于UART或者SPI主接口模式,本文的设计主接口模式为UART接口模式[6]:当主接口为UART时,VK3234将一个标准3线异步串口扩展成为4个增强功能串口. 主接口UART在数据传输时可以选择需要转义字符和不需要转义字符两种模式. 扩展的子通道的UART具备如下功能特点:每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供1Mbps的通信速率. 每个子通道可以独立设置工作在IrDA红外通信、RS-485自动收发控制、9位网络地址自动识别、硬件自动流量控制、广播接收等高级工作模式下. 每个子通道具备收/发独立的16 BYTE FIFO(First Input First Output),FIFO的中断为4级可编程条件触发点.VK3234可以工作在2.5~5.5V的宽工作电压范围,具备可配置自动休眠/唤醒功能.2.1.3 MAX3485E低功耗、RS-485/RS-422收发器MAX3485E是用于RS-485和RS-422通信的半双工、低功耗收发器,可以实现最高12Mbps的传输速率、工作在3.3V电压下[7].2.2 硬件逻辑电路设计硬件逻辑电路原理图如图2所示.首先选择主机的接口模式,VK3234支持主机接口为UART/SPI接口的串口扩展;图2中MS引脚接高电平,IR、TR引脚接低电平,此时主机接口为普通、无转义字符UART通信. OSCO和OSCI引脚分别接3.684MHz外部晶振的输入和输出,以获取时钟; 2片VK3234芯片的MRX0、MTX0,MRX1、MTX1引脚分别接S3C2440芯片的TXD0、RXD0,TXD1、RXD1引脚;TX1、RX1,TX2、RX2,TX3、RX3,TX4、RX4为扩展出来的4路子串口,2片共8路,分别与8片MAX3485E芯片的DI、RO引脚连接,构成可自动网络地址识别的RS-485通信线路. RTS1~RTS4连接MAX3485E芯片的收/发控制引脚/RE、DE,该设计中子串口工作在RS-485自动收发模式下,RTSx引脚用于控制RS-485数据的自动收发转换,只有发送数据时RTSx才为高电平,其他情况下,RTSx保持低电平,可通过子串口状态寄存器进行配置.每个子串口为全双工接口,可以通过软件分别开启/关闭,波特率可独立设置,子串口的速度可设置为300bps~920Kbps;每个子串口的字符格式包括数据长度、停止位数、奇偶校验模式选择,均可独立设置.3.1 流驱动程序结构介绍本文开发的VK3234串口驱动是一个标准的流驱动,分为模型设备驱动(Model Device Driver,MDD)和平台相关驱动(Platform Dependent Driver,PDD)[8],其结构如图3所示.模型设备驱动层(MDD层)包含给定类型的所有驱动程序公用的代码,其主要功能有两部分:① 为上层的设备管理器提供了标准流设备驱动接口函数COM_XXX;②链接平台相关驱动层(PDD层),并调用PDD层中与串口操作相关的函数[9];平台相关驱动层(PDD层)由与特定的硬件设备相关的代码组成,实现了HWOBJ 结构体及结构体中若干针对于串口硬件操作的函数指针,这些函数指针将指向PDD层中的串口操作函数,并向MDD层提供设备驱动服务提供者接口(Device Driver Service provider Interface,DDSI),MDD层调用DDSI函数对设备进行操作.3.2 VK3234芯片UART通讯协议VK3234芯片寄存器采用[C1:C0:A3:A2:A1:A0]6位地址编码的形式,[C1:C0]为子串口号,取值从00到11. A0~A3,4个全局寄存器的编号值从[000000]到[000011],每个子串口有10个寄存器,编号值从[C1:C0:0:1:1:0]到[C1:C0:1:1:1:1]. VK3234可以仅通过Tx,Rx和主机的UART连接,使用标准的UART协议进行通讯. 主机和各个扩展的子串口以VK3234的主串口为媒介进行通讯. 主机读取某个子串口寄存器时,首先向VK3234主串口发送一个指令,然后VK3234解析指令返回结果. VK3234主要包括四种不同的指令:写寄存指令(10)、读寄存器指令(00)、多字节写FIFO指令(11)、多字节读FIFO指令(01).每个指令都是8位指令中最高的两位表示操作类型,紧接着的两位是子串口号,然后紧跟低四位是子串口寄存器编号或者操作数据的字节数.不同的指令,操作时序不一样,以主机读取串口1的控制寄存器SCTLR(0110)为例. 主机在TX上发送指令00010110,然后VK3234将对应的寄存器值通过RX 传输给主机. 又如主机发送01010011指令,请求VK3234从子串口1的FIFO中读取3个字节,请求发出后主机可以在RX读取三个字节的数据.3.3 VK3234串口驱动的实现WinCE中微软提供了S3C2440的串口的驱动程序PDD层的实现,虽然不能完全满足该设计,但是可以在原有程序的基础上进行二次开发,实现VK3234串口驱动. 图4是本设计中VK3234串口驱动的派生类图,由于篇幅原因仅将重要信息展示在图中. 其中CPddVk3234和CRegVk3234是需要重新实现的,CPddVk3234是驱动的PDD层的实现,该类从BSP中提供的CPdd2440Uart派生而来,实现了初始化寄存器、接受和发送数据等功能. CRegVk3234由类CRegVk3234派生而来,新增操作的主要功能是对VK3234的寄存器进行读写操作. 接下来对涉及到的类进行详细的说明.CRegistrEdit是WinCE提供的注册表操作类,驱动通过继承该类获得操作注册表的功能.CMiniThread类是对WinCE中运行线程的抽象,封装了线程的一些基本操作,如开启线程、停止线程等. 驱动通过继承该类开启IST(Interrupt Server thread)线程,主要功能是监听中断事件、查找中断源、修改中断标志、向驱动程序报告中断、清除中断标志、结束IST中断过程等.CSerialPDD是一个抽象的虚类,它定义流驱动处理的逻辑,将所有流驱动的共性抽象抽出来进行实现,然后将不同的部分定义成接口,不同的流驱动中进行具体的实现. 即CSerialPDD就是一个模板,只要根据需要填充这个模板就可以实现相应的驱动.XmitInterruptHandler(PUCHAR pTxBuffer,ULONG *pBuffLen)是CSerialPDD定义的一个方法,这个方法会在发送中断产生后执行,功能是通过流驱动发送pBuffLen个字节的数据,待发送的数据存储在pTxBuffer中,实现了该方法就实现了驱动发送数据.CPdd2440Uart是微软提供的S3C2440串口驱动的实现,该类实现了CSerialPDD里面定义的操作串口方法.CReg2440Uart定义了操作S3C2440串口寄存器读写方法. 该类被CPdd2440Uart引用,用于操作串口.CegVk3234从类CReg2440Uart派生而来,该类添加了操作VK3234寄存器的能力,重新定义了设置串口波特率的方法. 属性VK3234ChildSerialIndex用于表示当前操作的是VK3234扩展出来的第几个子串口.方法Read_VkReg()的作用是读取当前子串口寄存器,该方法接收redindex参数包含的信息,其表示所要读取的寄存器编号. 方法Write_VkReg()接收两个参数regindex和value,功能是将Value写入第regindex个寄存器. 为了保持S3C2440和VK3234能正常通信,必须时刻保持两端波特率一致,所以重写了CReg2440Uarts 设置波特率的方法Write_BaudRate(),该方法执行之前会先调用Write_Vk BaudRate设置VK3234子串口的波特率,然后再设置主机串口波特率. CPddVk3234就是该设计所需要的驱动实现,其中最重要的方法是PostInt()、XmitInterruptHandler ()、ReceiveInterruptHandler(). PostInt()主要用于主机串口和VK3234初始化设置; XmitInterruptHandler()用于发送数据;ReceiveInterruptHandler()用于操作数据接收. vk3234Index表示当前子串口隶属于第几块VK3234芯片.3.4 代码解释Device.exe是WinCE的设备管理器,负责几乎所有外围设备驱动的管理. 系统启动后Device.exe根据注册表中的配置,加载驱动对应的DLL文件,并对CPU的IO口进进行初始化设置.注册表配置:[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial2]"DeviceArrayIndex"=dword:1"Irq"=dword:f"MemBase"=dword:50008000"Index"=dword:2"Dll"="serial_vk3234.dll""Port"="COM2:"……上面是串口COM2在注册表中的定义[10],DeviceArrayIndex定了设备索引;Irq定义设备的物理中断号; MemBase是段基地址; COM2到COM5都是由S3C2440的串口1扩展而来的所以串口COM2到COM5关于段地址的定义是一样的,; DLL文件就是对应的驱动程序. 根据注册表的定义通过如下代码创建串口驱动,并进行初始化.初始化IO口:CSerialPDD * pSerialPDD = NULL;pSerialPDD= new CPddVk3234(lpActivePath,pMdd,pHwObj,deviceArrayIndex);if (pSerialPDD && !pSerialPDD->Init()){……//映射物理地址if(TranslateBusAddr(m_hParent,Internal,0,ioPhysicalBase,&inIoSpace,&ioPhysicalBase){//映射IO口m_pIOPregs=(S3C2440A_IOPORT_REG* )MmMapIoSpace(ioPhysi calBase,sizeof (S3C2440A_IOPORT_REG),FALSE);……//获取逻辑中断号if (GetIsrInfo(&ddi)== ERROR_SUCCESS && KernelIoControl (IOCTL_HAL_REQUEST_SYSINTR,&ddi.dwIrq,sizeof(UINT32),&ddi.dwSysintr,sizeof(UINT32),NULL)){……}//初始化对应的IO口if(vk3234Index==1){pIOPregs->GPHCON &= ~(0x3<<12 | 0x3<<14);m_pIOPregs->GPHCON |= (0x2<<12 | 0x2<<14);m_pIOPregs->GPHUP |= 0xc0}else{//另一块VK芯片}CPddVk3234的init()方法主要作用是将总线相对地址转换成系统物理地址,然后映射为IO虚拟地址空间,获取逻辑中断号,并初始化IO口,拉起相关引脚对应的电平.初始化芯片://省略初始化主机串口寄存器代码//设置主机串口波特率与VK芯片波特率相同if((Read_UCON()&CS_MASK)== CS_PCLK){Write_UBRDIV(int)(m_s3c2440_pclk/16.0/VK3234_DE FAULT_BAUD)-1);}//初始化子串口控制寄存器write_VkReg(SCTLR,0X38);//初始化子串口流量控制寄存器write_VkReg(SFWCR,0X0E);//设置子串口其他寄存器应用程序打开串口时,驱动程序首先初始化主机串口的寄存器,然后设置其波特率与VK芯片的波特率相同,保证同VK芯片进行正常通信,然后设置子串口寄存器. 进而初始化子串口控制寄存器,使其工作在8位数据的RS-485模式下,然后配置子串口流量控制寄存器,配置RTS信号为手动硬件流模式.发送和接收数据:由于前面配置RTS信号为手动硬件流模式,所以在发送数据之前要拉高RTS信号,使RTS保持高电平,准备发送数据,然后向子串口FIFO数据寄存器SFDR写入要发送的数据,数据发送完毕后,及时拉低RTS信号,使芯片处于接收状态. 接收数据,主机串口不断查询子串口的中断状态寄存器,是否有接收中断,如果有则读取FIFO状态寄存器SFSR,读取可接受数据个数,然后从FIFO数据寄存器SFDR读取相应的数据. 由于篇幅的原因仅给出数据发送流程的部分代码.//读取SIDR备用sifr = m_pReg2440Uart->read_VkReg(SIFR,0X08)//拉高RTS信号,准备发送数据m_pReg2440Uart->Write_VkReg(SIFR,sifr|0X08)for (DWORDdwByteWrite=0;dwByteWrite<dwWriteSize&&dwDataAvaiable!=0;dwB yteWrite++){//数据写入SFDR m_pReg2440Uart->Write_VkReg(SFDR,*pTxBuffer);pTxBuffer ++;dwDataAvaiable--;}//数据发送完毕拉低RTS信号m_pReg2440Uart->Write_VkReg(SIFR,sifr&0Xf7);本文设计的多串口数据采集器已用在了山东省多个可再生能源建筑应用示范项目中. 以东营市垦利县创业大厦办公楼的地源热泵系统数据采集项目为例,该项目共计使用电能表3块、300/5A开合式电流互感器9个、数据采集器1个、超声波流量计4块、DS18B20探头及变送器1套,电气元件1宗;需要采集电量数据3个,流量数据4个,温度数据8个;实际应用中,该数据采集系统每隔5分钟采集一次数据,每隔30分钟向省级数据中心上传1次数据,并将采集和分析得到的数据保存30天,数据采集器带有VGA接口,可根据需要增加显示屏,以方便数据展示和系统调试. 目前,该数据采集系统运行稳定,数据采集、传输准确,系统应用照片如图 5,省数据中心数据接收界面如图6.本着运用简单的技术和元器件,解决复杂问题的原则,本文利用最常用的ARM9微处理器S3C2440和 VK3234、MAX3485E芯片实现了基于WinCE 6.0操作系统的多串口扩展及485通信,给出了软硬件的详细设计方法和过程. 本文主要有两个创新点: ① 系统设计方面,本文选用了不需要地址线控制串口扩展方式的高性能芯片,并具有RS-485自动收发控制功能,给出了具体的硬件、驱动实现方法,扩展出来的每个子串口都具有独立的使能功能,使系统的软硬件设计更加简单;②应用方面,作者已将本文的设计成功应用到了可再生源示范项目数据监测系统中,系统运行稳定可靠.【相关文献】1 中华人民共和国住房和城乡建设部,可再生能源建筑应用示范项目数据监测系统技术导则,2009.2 吕雪芹,敖振浪,陈冰怀.基于VK3234的共享中断编程关键技术.电子测量技术,2014,04:87-91.3 肖中华,张扬,王靖鑫,崔乃峰.基于WinCE6.0嵌入式工业控制系统开发.工业控制计算机,2014,6:1-3,6.4 孙良义,张勇,刘洁.基于ARM和WINCE的便携式差分GPS导航定位系统设计及实现.电子设计工程,2013,22: 91-94.5 S3C2440 Microcontroller User's Manual.6 VK3234 User'S Datesheet.7 MAX3485 User'S Datesheet.8 陈媛,王再英彭,倩刘颖.基于嵌入式多串口数据传输系统的设计与实现.科学技术与工程,2013,1:183-187.9 许跃华,唐明浩.基于WINCE的多串口扩展系统的设计.微计算机信息,2010,26:83-85.10 李玉超,李红梅,马田.基于ARM9的多功能警用终端的串口扩展设计.科技信息,2012,01:99-100.。

相关文档
最新文档