ARM通讯程序设计Word下载.docx

上传人:b****5 文档编号:20587874 上传时间:2023-01-24 格式:DOCX 页数:10 大小:280.31KB
下载 相关 举报
ARM通讯程序设计Word下载.docx_第1页
第1页 / 共10页
ARM通讯程序设计Word下载.docx_第2页
第2页 / 共10页
ARM通讯程序设计Word下载.docx_第3页
第3页 / 共10页
ARM通讯程序设计Word下载.docx_第4页
第4页 / 共10页
ARM通讯程序设计Word下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

ARM通讯程序设计Word下载.docx

《ARM通讯程序设计Word下载.docx》由会员分享,可在线阅读,更多相关《ARM通讯程序设计Word下载.docx(10页珍藏版)》请在冰豆网上搜索。

ARM通讯程序设计Word下载.docx

摘要

设计ARM板到主机的网络通信,大致是通过在ARM板的RS232接口接收计算机传过来的数据,然后再通过RS232回传对计算机,并在计算机上显示出来。

另外,如果数据需要保存,可以保存到一个txt文本文档中。

通过UART串口通讯,首先是计算机端通过Console.ReadLine();

获取的键盘输入的数据,经过封装,用函数Write()的接口_serialPort.Write(chars,0,1);

发送到串口。

然后在ARM板方面实现各个针脚对应的前提下,ARM板把接口Uart_Getch();

接收到的数据进行解包。

回发时又对数据进行封装,然后再通过接口Uart_SendByte(ch);

通过串口发送给计算机,计算机通过接口_serialPort.ReadExisting();

读的回送的数据,然后显示出来。

关键字:

ARM,PC机,通讯程序,UART

1.选题的意义

本课题是设计ARM板到主机的网络通信。

意义在于可以实现ARM板与电脑主机的通讯。

可以把ARM板的数据或信息发送到PC机了,数据处理完之后再发送回ARM板。

可以弥补ARM板在功能上的很多不足。

在微控制领域具有重大的意义。

2.1系统方案设计

通过在ARM板的RS232接口接收计算机传过来的数据,然后再通过RS232回传对计算机,并在计算机上显示出来。

2.2实现原理

2.2.1UART原理:

S3C2410A的UART提3个独立的异步串行I/O口,他们都可以运行与中断模式或DMA模式。

S3C2410的每个UART由波特率发生器、发送器、接收器以及控制单元组成。

波特率发生器可以由CLK或UEXTCLK提供时钟。

发送器和接收器包含16字节的FIFO和数据移位器。

数据被写入FIFO,然后在发送之前拷贝到发送移位器中。

接下来数据通过发送数据引脚(TxDn)被移出。

同时,接收到的数据从接收数据引脚(RxDn)移入,然后从移位器拷贝到FIFO中。

2.2.2数据的发送:

发送的数据帧是可编程的。

它包括1个起始位、5~8个数据为、1个可选的奇偶校验位和1~2个停止位,具体设置由行控制寄存器(ULCONn)指定。

发送器还可以产生暂停条件,使得在帧发送期间迫使串口输出0.暂停信号在当前发送的字完成之后发出。

暂停信号发出之后,继续向TxFIFO发送数据。

2.2.3数据的接收:

与数据发送类似,接收的数据帧也是可编程的。

它包括1个起始位、5~8个数据位、1个可选的奇偶校验位和1~2个停止位,具体设置由行控制寄存器(ULCONn)指定。

接收器可以检测溢出错误和帧错误。

2.3功能设计

ARM板方面:

主要通过Uart_Getch();

Uart_SendByte(ch);

两个函数负责接收数据并回传数据。

计算机PC平台方面:

通过Read();

Write();

两个函数负责传出数据并接收回显数据。

2.4接口设计

通过UART串口通讯,首先是计算机端获取的键盘输入的数据,经过封装,用函数Write()的接口发送到串口。

然后在ARM板方面实现各个针脚对应的前提下,ARM板把接口接收到的数据进行解包。

回发时又对数据进行封装,然后再通过接口通过串口发送给计算机,计算机通过接口读的回送的数据,然后显示出来。

3硬件设计

LPC2132的最小系统

以上是LPC2132的最小系统,最小系统是任何单片机开发的最核心部分,它是整个控制模块最关键的部分。

如普通单片机一样它包括了外部晶振,复位电路,不过LPC2132在使用时还需另外将几个管脚拉高或者拉低。

LPC2132的串口

LPC2132的串口于大部分设计一样,由于一般PC机得串口外接处电源电压为5V,因而需要一块MAX232芯片将电平经行转换才行。

图中由于在proteus中无法找到具体的串口,因而只有两根线,分别是数据发送和数据接收,另外的一根地线在此省去了。

LPC2132的显示电路

LPC2132的显示电路由两块74HC595芯片串行控制的,他们在控制时,一块控制位选,一块控制段选段,从而完成对于某一位数码管的显示。

由于同时只能控制一位七段式数码管,因此需要以动态扫描的形式方能完成完整的显示。

4软件设计

4.1软件流程图

在使用ARM芯片时,首先需要将芯片进行设置,这些设置包括PLL(锁相环)的设置,为ARM的各个部分选择合适的时钟源,并未各个端口选择合适的第一,第二或者第三功能。

然后根据要完成的目标,为UART0经行初始化,然后将要发送的数据通过串口发送给PC机,PC机通过串口接收数据后,通过键盘讲一个指令通过串口返回给ARM,ARM通过串口接收到数据后,将它在发送给数码管进行显示。

4.2使用UART进行串口通信,需要设置以下与UART相关的寄存器。

表①:

UART行控制寄存器(ULCONn),其功能及位描述

UART行控制寄存器(ULCONn)

UART行控制寄存器(ULCONn)位描述

:

UART控制寄存器(UCONn),其功能及位

UART控制寄存器

UART控制寄存器(UCONn)位描述

UARTFIFO控制寄存器(UFCONn),其功能及位描述

UARTFIFO控制寄存器

UARTFIFO控制寄存器(UFCONn)位描述

4.3ARM端主要代码文件

4.4软件实现代码

/****************************************Copyright(c)****************************************************主函数,调用要实现功能的各函数********************************************************************************************************/#include"

config.h"

#include<

stdio.h>

/*******************************************************************************************************/#defineUART_BPS115200//串口通讯波特率charINFO[]={"

ARMISREADY!

"

};

///**********************************************************************************************************函数名称:

write595()**函数功能:

向595芯片中写入一个数据**入口参数:

要向595中写入的数据**出口参数:

无*********************************************************************************************************/voidwrite595(unsignedchardata){unsignedchari;

IO0CLR=1<

<

7;

for(i=0;

i<

8;

i++){if(data&

0x80)IO0SET=1<

6;

elseIO0CLR=1<

data<

=1;

IO0SET=1<

4;

}IO0SET=1<

}/**********************************************************************************************************函数名称:

voidwrite_data()**函数功能:

在数码管的某一位显示数据**入口参数:

数码管的位选和数码管的段选**出口参数:

无*************************************************/voidwrite_data(unsignedchard,unsignedcharn){write595(~seg[d]);

write595(~(1<

n));

}**************************************************函数名称:

DelayNS()**函数功能:

长软件延时

************************************************************/voidDelayNS(uint32dly){uint32i;

for(;

dly>

0;

dly--)for(i=0;

i<

50000;

i++);

}/**********************************************************************************************************函数名称:

UART0_Init()**函数功能:

串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率115200。

**入口参数:

无**出口参数:

无*********************************************************************************************************/voidUART0_Init(void){uint16Fdiv;

PINSEL0=(PINSEL0&

(~0x0F))|0x05;

//设置I/O连接到UART0U0LCR=0x83;

//DLAB=1,允许设置波特率Fdiv=(Fpclk/16)/UART_BPS;

//设置波特率U0DLM=Fdiv/256;

U0DLL=Fdiv%256;

U0LCR=0x03;

}/*********************函数名称:

UART0_GetChar()**函数功能:

从串口接收字节数据,并等待接收完毕,查询方式。

Rcv_Data要返回的数据*********************************************************************************************************/charUART0_GetChar(void){uint8Rcv_Data;

while((U0LSR&

0x01)==0);

Rcv_Data=U0RBR;

return(Rcv_Data);

}/********************函数名称:

UART0_SendByte()**函数功能:

向串口发送字节数据,并等待发送完毕,查询方式。

dat要发送的数据**出口参数:

无******************/voidUART0_SendByte(uint8dat){U0THR=dat;

while((U0LSR&

0x40)==0);

//等待数据发送完毕}/*********************函数名称:

UART0_SendStr()**函数功能:

向串口发送一字符串**入口参数:

str要发送的字符串的指针**出口参数:

无******************/voidUART0_SendStr(char*str){while

(1){if(*str=='

\0'

)break;

//遇到结束符,退出UART0_SendByte(*str++);

//发送数据}}/*********************主函数**功能:

蜂鸣器滴滴间隔的发出声响,同时串口以115200波特率打印"

Hello,wellcometouseJASK-RF2132DemoBoard!

字样******************/intmain(void){uint8temp;

PINSEL0=0x00000000;

PINSEL1=0x00000000;

//IO口初始化UART0_Init();

//串口初始化while

(1){UART0_SendStr(INFO);

//串口打印temp=UART0_GetChar();

write_data(1,temp);

}}/**************************EndOfFile************************************************/

5总结

5.1存在的问题与解决方法

在硬件方面,由于一开始对各种嵌入式系统平台、对嵌入式系统各端口、端口数据帧、端口物理特性等的不了解,以及客观条件的限制,在硬件的选择方面花了一定的时间,在ARM7与ARM9、USB接口与RS-232接口的选择上,我从老师、师兄以及上网找资料了解了这方面信息,并结合自身条件,从具有实际应用价值、开发难易度、以及开发时间各方面考虑,最终确定选择ARM7和RS-232接口。

在软件方面,对于一些寄存器和函数接口等不熟悉花了太多时间,通过上网及参考了一些资料熟悉各函数接口及寄存器。

在PC端程序中使用了相对比较熟悉的微软.net平台,并能快速开发出通信程序。

在网络通信方面,一开始通信时遇到接收数据不一致甚至乱码的情况,利用排除法,后发现由于在嵌入式系统中程序的波特率与PC端接收程序的波特率不一致导致而成。

修改之后顺利完成。

5.2工作小结

通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。

安排课程设计的基本目的,在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟。

尤其是观察、分析和解决问题的实际工作能力,以便培养成为能够主动适应社会主义现代化建设需要的高素质的复合型人才。

作为整个学习体系的有机组成部分,课程设计虽然安排在两周进行,但并不具有绝对独立的意义。

它的一个重要功能,在于运用学习成果,检验学习成果。

运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。

检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。

对我们计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。

这也是一次预演和准备毕业设计工作。

通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。

课程设计促进了我系人才培养计划的完善和课程设置的调整。

近年来,我系为适应学生的实践需要陆续增设与调整了一系列课程,受到同学的欢迎,其中这次的设计很受同学们的喜欢。

课程设计达到了专业学习的预期目的。

在一个星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是通过对软件开发流程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。

6.参考文献

1.周立功.ARM嵌入式系统基础教程【M】.北京航空航天大学出版社,2005.12.刘天时强新建王瑞曹庆年.ARM7嵌入式开发基础实验【M】.第一版.北京航空航天大学出版社,2007.43.田泽.ARM9嵌入式系统开发实验与实践.第一版【M】.北京航空航天大学出版社,2006.10

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1