第一篇:双机通讯实验报告
单片机实验报告 化(自动化 1 5级)
实验名称:串行通讯实验
一、实验目得
1。掌握单片机串行口工作方式;
2。掌握双机通讯得接口电路设计及程序设计。
二、实验设备
1、PC机; 2.单片机最小系统教学实验模块;
3、数码管显示模块 三、实验内容
1.双机通信 由两套单片机试验装置(两个实验小组)共同完成该实验。我们U1为甲机,U2为乙机。甲机发送本机(学生本人)学号后8位给乙机,乙机接收该8位数据,并显示在8位数码管上. 电路如图1所示。
要求串行通信方式为方式1,波特率为2400bit/s,不加倍,单片机外部晶振频率为11、0592M。
图1 双机通信原理示意图 附加要求:乙机接收完毕后,将本机(乙机)得学号后8位发送回甲机,甲机显示在数码管上。
2、、单片机与 PC 机通信 单片机向PC机发送数据。单片机向PC机重复发送本机(学生本人)学号,发送波特率为1200,采用方式1,单片机外部晶振频率为11、0592M。
四、实验原理
4 4.1
串行通讯得方式
在串行通讯中,有两种基本得通讯方式:异步通讯,同步通讯.
异步串行通讯规定了字符数据得传送格式,既每个数据以相同得帧格式发送.每个帧信息由起始位、数据位、奇偶校验位与停止位组成。本实验主要学习异步通讯得实现方法。
在异步通讯中,每一个字符要用起始位与停止位作为字符开始与结束得标志,以至占用了时间。所以在数据块传送时,为了提高通讯速度,常去掉这些标志,而采用同步通讯.同步
通讯不像异步通讯那样,靠起始位在每个字符数据开始时发送与接受同步.而就是通过同步字符在每个数据块传送开始时使收/发双方同步.按照通讯方式,又可将数据传输线路分成三种:单工方式、半双工方式、全双工方式。
(1)单工方式 在单工方式下,通讯线得一端联接发送器,另一端联接接收器,它们形成单向联接,只允许数据按照一个固定得方向传送。
(2)半双工方式 在半双工方式下,系统中得每个通讯设备都由一个发送器与一个接收器组成,通过收发开关接到通讯线路上,如图33—1所示。在这种方式中,数据能从A站送到B站,也能从B站传送到A站,但就是不能同时在二个方向上传送,即每次只能一个站发送,另一个站接收.图2 半双工通讯方式 图33-1中得收发开关并不就是实际得物理开关,而就是由软件控制得电子开关,由通讯线两端得半双工通讯协议进行功能切换。
(3)全双工(Full—duplex)方式 虽然半双工方式比单工方式灵活,但它得效率依然较低.从发送方式切换到接收方式所需得时间一般大约为数毫秒,这么长得时间延迟在对时间较敏感得交互式应用(例如远程检测监视控制系统)中就是无法容忍得.重复线路切换所引起得延迟积累,正就是半双工通信协议效率不高得主要原因。
半双工得这种缺点就是可以避免得,而且方法很简单,即采用信道划分技术。在图33—2得全双工连接中,不就是交替发送与接收,而就是可同时发送与接收。全双工通讯系统得每一端都包含发送器与接收器,数据可同时在两个方向上传送.图3 全双工通讯方式 4.2 单片机串行口工作方式 在静态数码管显示实验中,我们熟悉了单片机串口工作方式0;单片机串口还具有有3种工作方式。如下表所示:
这3种工作方式,均用于串行异步通讯。在异步串行通讯得一个字节得传送中,必须包括了起始位(0)与停止位(1)。除此之外,方式1具有8位(1个字节)得数据位(低位在先),方式2、3则除这8位之外,还具有一个可编程得第9位,这个第9位编程通常被编程为奇偶校验位.我们将在下一个实验中用到它。
串口工作方式在特殊寄存器SCON中设置。
其中得SM0与SM1位确定了串口工作方式。要使通讯双方能够通讯成功,必须具有相同得串口工作模式;REN为允许接收位,本实验中因为双方都要进行接收,因此REN也都应设为1。TB8与RB8这里暂不涉及。利用以下语句来设置SCON: MOV SCON,#50H 4。
。3 波特率得设置 在异步串口通讯中,一个很重要得工作就就是进行串口波特率得设置。波特率就是指串口通讯中每秒传送得位数,单位为BPS,它反映了串行口通讯得速度;同时,通讯双方得速度必须一致,才能够顺利进行通讯。
在串口工作方式1、3中,传送波特率都就是可变得。单片机内部通过定时器T1来提供发送与接收缓存器得内部移位时钟。也就就是说,要确定串行通讯得波特率,必须对T1进行相
关设置。51单片机系统对此时T1得设置有以下固定得规定:(1)必须工作在定时器状态;(2)必须工作在“8位自动重载”工作模式;这必须在特殊寄存器TMOD中进行设置.关于TMOD得详细内容,我们在实验十七已经讲过。可以利用以下语句来设置TMOD: MOV TMOD,#20H 除了对TMOD得设置外,还必须设置定时器T1得定时值,也就就是保存在TH1中得8位重载值。这直接影响到波特率得大小: 它通过以下公式进行计算:
其中得SMOD为特殊寄存器PCON得最高位。当它置1时,可以将波特率增大1倍。
在双机通讯中,只要双方得波特率一致就能够完成通讯了;但就是,在标准得异步通讯协议中,只有几种波特就是适用得。例如1200bps,2400bps,4800bps,9600bps……等等.而通过这个公式可以瞧出,并不就是所有得晶振频率都能够得到准确得上述波特率。比如采用12MHz晶振,代入公式进行运算,就无法得到4800bps得准确波特率(TH1必须为小数了)。在这种情况下,过去人们都使用软件补偿得方法,尽量得到准确得波特率;而现在,市场上有很多通讯专用得晶振,例如3、6864MHz、11、0592MHz……得晶振,都能够直接得到准确得波特率.因此在进行本实验时,必须使用通讯专用晶振(如果使用仿真器,则设置为使用仿真头得外接晶振,并将11、0592M得晶振插入仿真头. 当波特率已经确定,就可以反向推导出TH1得取自大小,例如,在本次实验中,我们要求波特率为4800bps,在晶振采用11、0592MHz得情况下,推出TH1=0F4H.五、实验步骤
1.参考图1并进行电路设计,画出电路图,并用导线正确连接两套装置得单片机最小系统实验模块,并连接最小系统模块与数码管显示模块。
2。照实验要求编写程序流程图,然后编写程序,对编写得程序进行仿真调试,直至通讯成功。
六、实验报告
1 1.在该实验中,单片机串行口工作在什么工作方式下?说明该工作方式得特点。
工作在工作方式 1。8 位数据通讯,波特率可变.2.波特率就是什么?怎样设置单片机串口通讯得波特率?如果实验要求通讯波特率为4800bps ,怎样修改程序?
特率就是指串口通讯中每秒传送得位数,单位为 BPS,它反映了串行口通讯得速度。
单片机内部通过定时器T1来提供发送与接收缓存器得内部移位时钟。必须工作在定时器状态;必须工作在“8 位自动重载”工作模式。
3.详细说明本次实验采用得通讯协议.
码数位8在示显并,据数位8该收接机乙,机乙给位8后号学)人本生学(机本送发机甲ﻩ管上。乙机接收完毕后,将本机(乙机)得学号后8位发送回甲机,甲机显示在数码管上.4.给针对实验要求编写本机得程序流程图、程序清单并给予适当注释, 并说明合作单片机(合 合作同学).这里有两个程序,一个就是先接受,一个就是先发送。
# include 〈STC12C5A60S2、h〉 #define uchar unsigned char void init(void);void send(void); void delay(unsigned int i); uchar xuehao[8]={6,6,6,6,6,6,6};void main(void){
;)(tiniﻩ send();
while(1);} void init(void)
{
TMOD=0x20;
TH1=0xfd;
;dfx0=1LTﻩ
ﻩ SCON=0x50;
PCON=0x00;
TR1=1;} void send(void){
;i rahcuﻩ do
{
ﻩ delay(200);
SBUF=0xaa;
;0=IT;)0==IT(elihwﻩ
;0=IR;)0==IR(elihwﻩ }while(SBUF!=0xbb);
//-----———-—-——-—--————-—-———--—----?????
;)08(yaledﻩ for(i=0;i<=7;i++)
{ﻩ ﻩ SBUF=xuehao[i];
;0=IT;)0==IT(elihwﻩﻩ
;)5(yaledﻩ
}ﻩ;9=FUBSﻩ
;)01(yaledﻩ} /////////////////////////////////////////////////////////// void delay(unsigned int i){
unsigned char j;)——i;0〉i;(rofﻩ)++j;521〈j;0=j(rofﻩ {;} } # include 〈STC12C5A60S2、h〉 #define uchar unsigned char void init(void);void receive(void);void delay(unsigned int i);void display(uchar A,uchar B);void duanxuan(uchar c);uchar xuehao[8]={0}; void main(void){
;)(tiniﻩ ;)(eviecerﻩ while(1)
{
ﻩ display(1,xuehao[0]);
;)3(yaledﻩ
P0=0x00;
;)]1[oaheux,2(yalpsidﻩ ;)3(yaledﻩﻩ;00x0=0Pﻩﻩ
display(3,xuehao[2]);
;)3(yaledﻩ
P0=0x00;
ﻩ display(4,xuehao[3]);
delay(3);
ﻩ P0=0x00;
display(5,xuehao[4]);
ﻩ delay(3);
;00x0=0Pﻩ ﻩ display(6,xuehao[5]);
ﻩ delay(3);
P0=0x00;
display(7,xuehao[6]);
;)3(yaledﻩ
P0=0x00;
ﻩ;)]7[oaheux,8(yalpsidﻩﻩ
;)3(yaledﻩ ﻩ P0=0x00;
}
//
} void init(void)
{
;00X0=1M0Pﻩ P0M0=0Xff;
P2M1=0x00;
P2M0=0xff;
TMOD=0x20;
;dfx0=1HTﻩ TL1=0xfd;
SCON=0x50;
PCON=0x00;
TR1=1;} void receive(void){
uchar enpty;
;0=j rahcuﻩ odﻩ {
;0=IR;)0==IR(elihwﻩ} ;)aax0=!FUBS(elihwﻩ SBUF=0xbb;
while(TI==0);TI=0;
enpty=SBUF;// while(RI==0);RI=0;
//—--——-—-—--——-——---—---———---——??
delay(10);
for(j=0;j<=7;j++)
{ﻩ;FUBS=]j[oaheuxﻩﻩ;0=IR;)0==IR(elihwﻩﻩ } } ////////////////////////////////////////????////////////////////////////////////////////////// void display(uchar A,uchar B){,28x0,29x0,99x0,0bx0,4ax0,9fx0,0cx0{=]21[ofni edoc rahcuﻩ0xf8,0x80,0x90,//
0xff,ﻩ
ﻩ
ﻩ 0 ﻩ—//;}fbxﻩ;)A(nauxnaudﻩ
switch(B)
{ﻩﻩ:0 esacﻩ
;]0[ofni~=0Pﻩﻩ ﻩ
break;
:1 esacﻩ ﻩ
;]1[ofni~=0Pﻩﻩ
ﻩ
;kaerbﻩ
case 2:
ﻩ;]2[ofni~=0Pﻩ
break; ﻩ:3 esacﻩ ﻩ
ﻩ P0=~info[3];
ﻩﻩ break;
:4 esacﻩﻩ ﻩﻩ
P0=~info[4];
ﻩ
;kaerbﻩ ﻩﻩ case 5:
ﻩ
;]5[ofni~=0Pﻩ;kaerbﻩﻩ ﻩﻩ case 6:
ﻩﻩ P0=~info[6];;kaerbﻩﻩ
:7 esacﻩ
ﻩ P0=~info[7];
ﻩ;kaerbﻩ ﻩ
case 8:
ﻩﻩ
P0=~info[8];
ﻩ
;kaerbﻩ
:9 esacﻩ
ﻩ P0=~info[9];
ﻩ
break;
ﻩ
:01 esacﻩ
;]01[ofni~=0Pﻩ
;kaerbﻩﻩ:11 esacﻩ ﻩ
;]11[ofni~=0Pﻩﻩ
ﻩ
;kaerbﻩ
}ﻩ} void duanxuan(uchar c){)c(hctiwsﻩ {
ﻩ case 1:
;10x0=2Pﻩ ﻩ
break;
ﻩ case 2:
P2=0x02;
ﻩ break;
:3 esacﻩﻩ ﻩ
;40x0=2Pﻩ ﻩ
break;
ﻩ case 4:
;80x0=2Pﻩﻩ;kaerbﻩ
case 5:
ﻩ;01x0=2Pﻩ ﻩ
break;
:6 esacﻩﻩ ﻩﻩ P2=0x20;
;kaerbﻩﻩ ﻩ case 7:
ﻩ
P2=0x40;
ﻩ
break;
:8 esacﻩﻩ ﻩ
;08x0=2Pﻩ
;kaerbﻩﻩ
:tluafedﻩ ﻩ
break;
} } ///////////////////////////////////////////////////////////////////////////////////////////// void delay(unsigned int i)
{
unsigned char j;)—-i;0〉i;(rofﻩ for(j=0;j〈125;j++)
};{ﻩ} 5。实验心得。(必须)、.。。。.。..。.。..。..。。
6. . 附能说明实验原理得实验照片。(必须)
第二篇:串口通讯实验报告
网络编程与实践实验报告
实验内容:串口通信编程 学号:S201502189 姓名:职荣豪 日期:2015-9-28
一、实验要求
使用VS2010编写基于对话框的MFC应用程序,两个窗口分别使用两个串口,使得这两个窗口可以进行通信,包括数据的发送与接收。
二、实验原理
本实验使用Microsoft Communications Control控件,利用这个ActiveX控件,只需要编写少量代码即可轻松进行通信。
该控件相关的函数如下: put__CommPort:设置串口号
put_Settings:以字符串的形式设置波特率、奇偶校验位(n-无校验,e-偶校验,o-奇校验)、数据位数、停止位数
put_InputMode:设置接收数据的类型(0-文本类型,1-二进制类型)put_InputLen:设置从接收缓冲区读取的字节数,0表示全部读取 put_InBufferSize:设置接收缓冲区大小 put_OutBufferSize:设置发送缓冲区大小
put_RThreshold:设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件
put_SThreshold:设定在触发OnComm事件前,发送缓冲区内所允许的最少的字符数,0表示发送数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件
put_PortOpen:打开或关闭串口,传入参数为true时打开串口,传入参数为false时关闭串口 get_CommEvent:获得串口上刚发生的事件,事件值为2表示接收到数据
get_InBufferCount:获得缓冲区中的数据位数
get_Input:获取缓冲区数据,返回类型为VARIANT put_Output:发送数据
三、设计思路
需要添加一个Microsoft Communications Control控件,用于进行串口通信。由于要求同一程序可运行两个窗口进行相互通信,需要两个窗口开启两个不同串口,故需要添加一个Edit Control控件用于输入串口号,并添加打开串口按钮,在点击该按钮时对串口控件的参数进行设置并开启串口。同时添加关闭串口按钮,点击后关闭串口并可以对串口号进行修改。
需要添加两个Edit Control 分别用于显示接收到的数据以及输入要发送的数据。需要添加一个发送按钮,点击后发送输入的数据。
四、实验步骤
1.建立基于对话框的MFC应用程序 2.添加界面控件并设置ID与Caption 添加Microsoft Communications Control控件,用于进行串口通信 添加一个Edit Control控件,用于输入串口号,ID设置为IDC_PORT 添加一个Static Text控件,用于标注端口号,将Caption设置为“串口号:”
添加两个按钮,分别用于打开串口、关闭串口。IDC分别设置为IDC_BTN_OPEN、IDC_BTN_CLOSE,Caption分别设置为“打开”、“关闭” 添加两个Edit Control,分别用于显示接收到的数据以及输入要发送的数据,ID分别设置为IDC_RECEIVE、IDC_SEND 添加两个Static Text控件,用于标注接收区与发送区,Caption分别设置为“接收区”、“发送区”
添加一个按钮用于发送数据,ID设置为IDC_BTN_SEND,Caption设置为“发送” 调整控件的大小与位置。
完成后如图:
3.给控件绑定变量
右键单击Microsoft Communications Control控件,选择“添加变量”,变量名为m_com 打开类向导给控件添加变量:
给IDC_PORT绑定变量,用于存放输入的端口号,数据类型为int,变量名为m_port 给IDC_RECEIVE绑定变量,用于存放接收到的数据,数据类型为CString,变量名为m_strReceive 给IDC_SEND绑定变量,用于存放输入的待发送的数据,数据类型为CString,变量名为m_strSend
4.给控件添加事件响应函数
右键单击Microsoft Communications Control控件,选择“添加事件处理程序”,点击“添加编辑”,生成响应函数,此函数用于接收数据。
在函数中添加以下代码:
UpdateData(TRUE);if(nEvent == 2){
} UpdateData(FALSE);//将m_strReceive的值显示到控件中
//更新m_strReceive的值
//获取事件值
//获取缓冲区位数
//时间值为2,此时为收到数据 int nEvent = m_com.get_CommEvent();int k = m_com.get_InBufferCount();if(k <= 0)//位数小于等于0时则返回 return;char* str =(char*)m_com.get_Input().parray->pvData;//获取接收到数据的字*(str + k)= ' ';//字符数组最后一位的下一位设置为' ',为字符串的结尾标志 m_strReceive +=(const char *)str;//在用于显示的字符串末尾添加刚接收到的符数组的首地址
字符串
双击IDC_BTN_OPEN控件,即“打开”按钮,生成响应函数,此函数用于设置串口参数并打开串口。
在函数中添加以下代码:
UpdateData(TRUE);
if(m_port <= 0){
} m_com.put__CommPort(m_port);//设定串口为m_port的值 m_com.put_Settings(“9600,n,8,1”);
//设定波特率9600,无奇偶校验位,8作为数据位,AfxMessageBox(“请输入正确的串口号!”);return;
//更新m_port的值 //端口号不小于等于0
1作为停止位
m_com.put_InputMode(1);//设定数据接收模式,1为二进制方式
m_com.put_InputLen(0);//设置从接收缓冲区读取的字节数,0表示全部读取
m_com.put_InBufferSize(1024);//设置输入缓冲区大小为1024byte
m_com.put_OutBufferSize(1024);//设置输出缓冲区大小为1024byte m_com.put_RThreshold(1);//每接收到一个字符时,触发OnComm事件 m_com.put_SThreshold(0);//每发送一个字符时,不触发OnComm事件 m_com.put_PortOpen(true);
//打开串口
GetDlgItem(IDC_BTN_OPEN)->EnableWindow(FALSE);//打开按钮设为不可用 GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(TRUE);//关闭按钮设为可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(TRUE);
//发送按钮设为可用
双击IDC_BTN_CLOSE控件,即“关闭”按钮,生成响应函数,该函数用于关闭串口。在函数中添加以下代码:
m_com.put_PortOpen(false);//关闭串口
GetDlgItem(IDC_BTN_OPEN)->EnableWindow(TRUE);
//打开按钮设为可用
GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE);//关闭按钮设为不可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);//发送按钮设为不可用
双击IDC_BTN_SEND控件,即“发送”按钮,生成响应函数,该函数用于发送数据。在函数中添加以下代码:
UpdateData(TRUE);//更新m_strSend的值,读取编辑框内容 m_com.put_Output(COleVariant(m_strSend));//发送数据
5.在对话框初始化函数中添加额外初始化代码
在对话框刚打开时,此时串口没有开启,故“关闭”按钮与“发送”按钮需设为不可用。在OnInitDialog函数中添加以下代码:
GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE);//关闭按钮设为不可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);//发送按钮设为不可用
五、实验结果
对话框1 运行结果如下:
对话框2 运行结果如下:
六、实验心得
通过课上的学习,我学习到了数据通信的基础知识,对网络的分层结构以及相关协议有了进一步的认识。
通过本次实验,我对串口通信的原理有了更深的认识与理解,并对MFC界面制作更加熟练。总之,在本课程中我收获很多,不仅在通信方面的知识有所提升,同时也锻炼了编程能力,VC++软件的使用更加熟练。
第三篇:串行口通讯实验报告
齐
鲁
理
工
学
院
实
验
报
告
课程名称:
微型计算机控制技术
时间:
2020.10.29
地点:
D203
班级:
2017级机制3班
姓名:
杨帆
学号:
***4
实验项目名称:
串行通讯接口实验
实验指导教师:
赵保华
实验成绩评定:
一、实验目的ü通过实验掌握
USART的功能。
掌握
STM32的USART的设置与运用。
二、实验设备
ü硬件:信盈达STM32
实验平台,STlink
仿真器套件,PC
机,串口连接线;
软件:KEIL
for
ARM(MDK)集成开发环境,串口调试助手,Windows
7/8/10/XP。
三、实验内容
利用
PC
机的串口与信盈达Cotex-M3
实验平台的USART1进行输入输出通信。
1)把自己的个人信息(姓名、学号),通过USART1发送到PC,PC通过串口助手显示出来。
2)通过
PC
机键盘往实验平台的USART1发送字符,实验平台上的USART1
将收到的字符再传回给
PC,在PC串口助手上显示其串口接收到的字符。
四、实验原理
如
XYD-STM32F103
开发板
UART1
使用的是
CH340G
这个
USB
转换串口芯片,只需要使用
USB
线连接上电脑,并且电脑上安装了
CH340
芯片的硬件驱动程序,电脑就会生成一个
COM
口,通过使用串口调试软件打开这个
COM
口,就能实现开发板和
PC
机之间的通信了。
五、软件程序设计
1、程序完成以下工作:
初始化串口;
重定义fputc函数,实现可以通过printf函数给电脑发送数据。
注意:重定义fputc之间需要打开微库。
检测串口接收器,如果有数据则从USART_DR寄存器中读取数据;
监测串口发送器,如果上一次数据已发送完成,将读取到的字符发送给PC,然后回到(3)。
main.c参考程序:
#include
“stm32f10x.h“
#include
“stdio.h“
#include
“uart.h“
int
main(void)
{
UART1_Init();//串口初始化
Show_Logo();//通过串口发送数据给PC
while(1)
{
USART1_Echo();//串口实现回显
}
}
uart.c参考程序:
#include
“stm32f10x.h“
#include
“uart.h“
#include
“stdio.h“
/****************************************************
函数名:UART1_Init
形参:无
返回值:无
函数功能:串口1的初始化
PA9
--
TX
PA8
--
RX
****************************************************/
void
UART1_Init(void)
{
GPIO_InitTypeDef
GPIO_Initstructure;
USART_InitTypeDef
USART_Initstructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
|RCC_APB2Periph_USART1,ENABLE);//时钟的初始化
GPIO_Initstructure.GPIO_Pin
=
GPIO_Pin_9;
GPIO_Initstructure.GPIO_Mode
=
GPIO_Mode_AF_PP;
GPIO_Initstructure.GPIO_Speed
=
GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_Initstructure);//管脚9初始化为复用输出管脚
GPIO_Initstructure.GPIO_Pin
=
GPIO_Pin_10;
GPIO_Initstructure.GPIO_Mode
=
GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_Initstructure);//管脚10初始化为输入管脚
USART_Initstructure.USART_BaudRate
=
115200;//配置rs232协议的波特率
USART_Initstructure.USART_WordLength
=
USART_WordLength_8b;//配置rs232协议数据位的的位宽
USART_Initstructure.USART_StopBits
=
USART_StopBits_1;//配置rs232协议的停止位的位宽
USART_Initstructure.USART_Parity
=
USART_Parity_No;//配置rs232协议奇偶校验位
USART_Initstructure.USART_HardwareFlowControl
=
USART_HardwareFlowControl_None;//配置rs232协议的硬件流控制
USART_Initstructure.USART_Mode
=
USART_Mode_Rx
|
USART_Mode_Tx;//使能接收和发送
USART_Init(USART1,&USART_Initstructure);//串口初始化
USART_Cmd(USART1,ENABLE);//使能串口1
}
/****************************************************
函数名:fputc
形参:ch代表要得到的参数
*f代表数据保存的地方
返回值:返回得到的参数
函数功能:用户printf函数的调用
****************************************************/
int
fputc
(int
ch,FILE
*f)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)
==
RESET);//判断串口是否发送完数据
USART_SendData(USART1,ch);//从寄存器中得到数据
return
ch;
}
/****************************************************
函数名:USART1_Echo
形参:无
返回值:无
函数功能:串口1的回显功能
电脑给开发板发送数据,开发板再把接收到的数据返回给电脑
****************************************************/
void
USART1_Echo(void)
{
u8
ch;
while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)
==
RESET);//等待接收数据
ch
=
USART_ReceiveData(USART1);//把接收到的数据保存到ch中
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)
==
RESET);//等待上次发送数据发送完成USART_SendData(USART1,ch);//把ch中的数据发送到电脑
}
/****************************************************
函数名:Show_Logo
形参:无
返回值:无
函数功能:在电脑上显示自己的logo
****************************************************/
void
Show_Logo(void)
{
printf(“******************************************\n\r“);
printf(“
郑州信盈达电子有限公司\n\r“);
printf(“
Welcome
STM32
\n\r“);
printf(“******************************************\n\r“);
}
uart.h参考程序:
#ifndef
_UART_H_
#define
_UART_H_
void
UART1_Init(void);//串口1初始化
void
USART1_Echo(void);//串口1回显函数
void
Show_Logo(void);
//在终端上显示LOGO
#endif
六、实验操作步骤
准备实验环境
使用
STlink
仿真器连接
信盈达STM32
实验平台的主板
JTAG
接口;使用
实验平台附带的USB数据线,连接实验平台主板和PC。
新建工程,编写程序,完成软件设计
新建工程保存文件夹,复制相应的库文件;
在开发环境中新建工程,配置工程选项;
新建程序代码文件,添加到工程,完成程序编码,无误后将程序下载到开发板的Flash
中,按
RESET
键复位;
在PC
机上运行串口调试助手(波特率115200、1
位停止位、无校验位、无硬件流控制),发送数据到开发板,观察实验现象。
3.观察实验结果
1)在PC
机上,串口助手接收区显示学生信息;
2)通过串口调试助手发送数据,在接收区接收到同样的数据。
七、实验结果:
八、心得体会
通过本次实验,我学到了很多知识,通过学习实验,通过实验掌握
USART的功能。掌握
STM32的USART的设置与运用。感谢老师的指导和同学的帮助。
第四篇:中兴通讯-程控交换实验报告
西安文理学院物理与机械电子工程学院
程控交换课外实习报告
专业班级10级电子信息工程2班
课程程控数字交换技术
学号08101100219
学生姓名李斌
成绩
2013年11月
实习报告
2013年11月26日--11月27日,西安文理学院物理与机械电子学院电子信息工程1、2班来到了陕西省西安市高新区的中兴通讯实训基地,进行为期两天的实习培训。中兴通讯概况:
1985年,中兴通讯成立。1997年,中兴通讯A股在深圳证券交易所上市,目前是国内A股市场上市值、营业收入最大的通信设备制造业上市公司。2004年12月,中兴通讯作为中国内地首家A股上市公司成功在香港上市。
中兴通讯是中国电信市场的主导通信设备供应商之一,中兴通讯各系列电信产品都处于市场领先地位,并与中国移动、中国电信、中国联通等中国主导电信运营商建立了长期稳定的合作关系。在国际电信市场,中兴通讯已向全球140多个国家和地区的500多家运营商提供优质的、高性价比的产品与服务,与包括法国电信、英国电信、沃达丰、澳大利亚电信、和黄电信在内的众多全球主流电信运营商建立了长期合作关系。
未来,中兴通讯将继续迎接挑战,打造享誉全球的中兴通讯品牌,力创世界级卓越企业。
实习过程回顾:
第一天上午:来到基地,工作人员带我们参观基站机房,参观实习基地设备,系统及其教学实验室。接着为我们介绍通信的历史及其演变过程,详细介绍第三代移动通信的发展及其未来发展趋势,为近期即将推出的4G打下基础。课间老师为我们讲解中兴的企业文化及中兴的发展历程。
第一天下午:讲解基站的工作原理及其组网的一些基础知识,重点讲解移动基站的通信过程及其软件的使用。
第二天上午:参观机房,讲解一些常用设备的工作原理及其作用,讲解基站柜的一些基本知识,讲解软件的使用及练习。
第二天下午:参观实验机房,讲解未来4G的发展方向,介绍4G的一些知识,讲解中兴通讯的业务范围和中兴未来的发展规划,讲解LTE知识,及其干通信行业的一些基本素养及其基本技能,讲解通信行业的行情,技术的发展趋势。
实习收获:
1837年,美国人塞缪乐.莫乐斯(Samuel Morse)成功地研制出世界上第一台电磁式电报机,实现了长途电报通信。
1864年,英国物理学家麦克斯韦(J.c.Maxwel)建立了一套电磁理论,预言了电磁波的存在,说明了电磁波与光具有相同的性质,两者都是以光速传播的。
1875年,苏格兰青年亚历山大.贝尔(A.G.Bell)发明了世界上第一台电话机。1888年,德国青年物理学家海因里斯.赫兹(H.R.Hertz)用电波环进行了一系列实验,发现了电磁波的存在,他用实验证明了麦克斯韦的电磁理论,导致了无线电的诞生和电子技术的发展。
1920年美国无线电专家康拉德在匹兹堡建立了世界上第一家商业无线电广播电台,从此广播事业在世界各地蓬勃发展,收音机成为人们了解时事新闻的方便途径。
1922年16岁的美国中学生菲罗.法恩斯沃斯设计出第一幅电视传真原理图,1929年申请了发明专利,被裁定为发明电视机的第一人。
1959年美国的基尔比和诺伊斯发明了集成电路,从此微电子技术诞生了。1967年大规模集成电路诞生了,一块米粒般大小的硅晶片上可以集成1千多个晶体管的线路。
1977年美国、日本科学家制成超大规模集成电路,30平方毫米的硅晶片上集成了13万个晶体管。微电子技术极大地推动了电子计算机的更新换代,使电子计算机显示了前所未有的信息处理功能,成为现代高新科技的重要标志。
20世纪80年代末多媒体技术的兴起,使计算机具备了综合处理文字、声音、图像、影视等各种形式信息的能力,日益成为信息处理最重要和必不可少的工具。
第一代移动通信: 第一代移动通信技术(1G)是指最初的模拟、仅限语音的蜂窝电话标准,制定于上世纪80年代。第一代移动通信系统的典型代表是美国的 系统(先进移动电话系统)和后来的改进型系统TACS 系统(全入网通信系统),以及瑞典,挪威和丹麦的NMT 北欧移动电话)和NTT日本电信电话株式会社)等。
第二代移动通信:由于模拟移动通信所带来的局限性,到20世纪80年代中期到21世纪初,数字移动通信系统得到了大规模应用,其代表技术是欧洲的GSM,也就是通常所说的第二代移动通信技术(2G)。GSM是由欧洲电信标准组织ETSI制订的一个数字移动通信标准。GSM是全球移动通信系统 的简称。它的空中接口采用时分多址技术.自90年代中期投入商用以来,被全球超过100个国家采用。GSM标准的设备占据当前全球蜂窝移动通信设备市场80%以上。
第三代移动通信:第三代移动通信技术,简称3G,全称为3rd Generation,中文含义就是指第三代数字通信。1995年问世的第一代模拟制式手机(1G)只能进行语音通话;1996到1997年出现的第二代GSM、TDMA等数字制式手机(2G)便增加了接收数据的功能,如接受电子邮件或网页;第三代与前两代的主要区别是在传输声音和数据的速度上的提升,它能够要能在全球范围内更好地实现无缝漫游,并处理图像、音乐、视频流等多种媒体形式,提供包括网页浏览、电话会议、电子商务等多种信息服务,同时也要考虑与已有第二代系统的良好兼容性。
LTE技术: LTE项目是3G的演进,始于2004年3GPP的多伦多会议。LTE并非人们普遍误解的4G技术,而是3G与4G技术之间的一个过渡,是3.9G的全球标准,它改进并增强了3G的空中接入技术,采用OFDM和MIMO作为其无线网络演进的唯一标准。在20MHz频谱带宽下能够提供下行326Mbit/s与上行86Mbit/s的峰值速率。改善了小区边缘用户的性能,提高小区容量和降低系统延迟。LTE也被通俗的称为3.9G,具有100Mbps的数据下载能力,被视作从3G向4G演进的主流技术。LTE的研究,包含了一些普遍认为很重要的部分,如等待时间的减少、更高的用户数据速率、系统容量和覆盖的改善以及运营成本的降低。
LTE特点:(1)通信速率有了提高,下行峰值速率为100Mbps、上行为50Mbps。
(2)提高了频谱效率。
(3)以分组域业务为主要目标,系统在整体架构上将基于分组交换。
(4)QoS保证。
(5)系统部署灵活,能够支持1.25MHz-20MHz间的多种系统带宽。
(6)降低无线网络时延。
(7)增加了小区边界比特速率。
(8)强调向下兼容,支持已有的3G系统和非3GPP规范系统的协同运作。实习总结
本次实习非常感谢学校给予我们这次难得的机会,同时感谢中兴通讯学院的各位老师及其领导为我们创造一个优异的学习环境。通过中兴的老师细心讲解,现在自己已经基本掌握了基站组网的基础知识,并且能独立的模拟组网。当两天的实习即将结束的时候,大家都有种释然的感觉,当然我想我更多的是兴奋和自己掌握了知识之后的饱满感,学知识就像吃东西一样,吃饱了就应该好好的消化。在这里,我非常感谢实训的指导老师及朱继萍老师,让我们接触最新的知识技能,更加能快速融入以后的学习及其工作当中。
第五篇:双机系统-—— 优缺点分析
双机系统缺点分析
双机方案一般有: 双机热备,双机互备,双机双工 三种方式。
实现方式又分为纯软件方式和共享磁盘柜方式,基于存储共享的双机热备是双机热备的最标准方案,当然这两种实现方式各有优缺点。
双机热备:
从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务。双机热备由备用的服务器解决了在主服务器故障时服务不中断的问题。但在实际应用中,可能会出现多台服务器的情况,即服务器集群。
双机热备一般情况下需要有共享的存储设备。但某些情况下也可以使用两台独立的服务器。
从狭义上讲,双机热备特指基于active/standby(活动/待用)方式的服务器热备。服务 器数据包括数据库数据同时往两台或多台服务器写,或者使用一个共享的存储设备。在同一时间内只有一台服务器运行。当其中运行着的一台服务器出现故障无法启动时,另一台备份服务器会通过软件诊测(一般是通过心跳诊断)将备用机器激活,保证应用在短时间内完全恢复正常使用。
下面是典型的双机热备软件PCL HA来看一下双机热备的典型模式: -Active/Active模式
这是目前运用最为广泛的双节点双应用的Active/Active模式。
支撑用户业务的数据库和应用程序在正常状态下分别在两台节点上运行,各自有自己的资源,比如IP地址、磁盘阵列上的卷或者文件系统。当某一方的系统或者资源出现故障时,就会将应用和相关资源切换到对方的节点上。
这种模式的最大优点是不会有服务器的“闲置”,两台服务器在正常情况下都在工作。但如果有故障发生导致切换,应用和数据库将放在同一台服务器上运行,由于服务器的处理能力有可能不能同时满足数据库和应用程序的峰值要求,这将会出现处理能力不够的情况,降低业务响应水平。
-Active/Standby模式
两节点的Active/Standby模式是HA中最简单的一种,两台服务器通过双心跳线路组成一个集群。
PCL为此环境提供了完全冗余的服务器配置。这种模式的优缺点:
缺点:Node2在Node1正常工作时是处于“闲置”状态,造成服务器资源的浪费。
优点:当Node1发生故障时,Node2能完全接管应用,并且能保证应用运行时的对处理能力要求。
-多点集群模式
可以理解为双机热备在技术上的提升。多台服务器可以组成一个集群。根据应用的实际情况,可以灵活地在这些服务器上进行部署,同时可以灵活地设置接管策略。比如,可以由一台服务器作为其他所有服务器的备机,也可以设置多重的接管关系,等等。这样,就可以充分地利用服务器的资源,同时保证系统的高可用性。
双机互备
在双机热备的基础上,两个相对独立的应用在两台机器同时运行,但彼此均设为备机,当某一台服务器出现故障时,另一台服务器可以在短时间内将故障服务器的应 用接管过来,从而保证了应用的持续性。这种方式实际上是双机热备的一种应用。它避免了两个应用使用四台服务器分别实现双机热备,减少服务器使用数量,解决闲置问题。
双机双工
两台或多台服务器均为活动,同时运行相同的应用,保证整体的性能,也实现了负载均衡和互为备份。需要利用磁盘柜存储技术(最好采用san)。对于数据库服务而言,它同时需要数据库软件的支持,是比较复杂的。而WEB服务器或应用服务器就比较简单了。
双机一般就上面三种方案,下面从另一个角度看,前面的方案又可以分为基于共享存储和纯软件的解决方案。
基于共享存储的双机方案
基于存储共享的双机热备是双机热备的的最标准的方案,对于这种方式,采用两台服务器,使用共享的存储设备(磁盘阵列柜或存储区域网SAN)两台服务器可以采用互备、主从、并行等不同的方式。在工作过程中,两台服务器将以一个虚拟的IP地址对外提供服务,依工作方式的不同,将服务请求发送给其中一台服务器承担。同时,服务器通过心跳线(目前往往采用建立私有 网络的方式)侦测另一台服务器的工作状况。当一台服务器出现故障时,另一台服务器根据心跳侦测的情况做出判断,并进行切换,接管服务。对于用户而言,这一过程是全自动的透明的。由于使用共享的存储设备,因此两台服务器使用的实际上是一样的数据,由双机或集群软件对其进行管理。
它的优点是: 对于共享方式,数据库放在共享存储设备上,当一台服务器提供服务时,直接在存储设备上进行读写。当系统切换后另一台服务器也同样读取存储设备上的数据,它可以在无人值守的情况下提供快速的切换,一般情况下不会有数据的丢失。
缺点是:
1.增加了昂贵的存储设备投资,对于有实力的企业,可考虑该方式。
2.存在单点故障的风险,主机故障虽然可以切换接管,但是实际风险从主机转移到了共享磁盘柜上,一旦磁盘阵列故障,会导致整个系统都不能工作,而且没有数据备份,数据永远都无法恢复了!,如果需要数据备份就必须购买其他的数据备份软件来实现。
我们暂假设盘阵质量与主机质量,假设单台PC服务器的可靠性为90%,假设共享磁盘阵列子系统的可靠性为99%,根据条件概率,主备机同时损坏或磁盘阵列柜损坏即双机系统和磁盘阵列子系统同时完好的概率为:
(1-(1-90%)*(1-90%))*99%=98.01%
如果采用了可靠性相对差一些的磁盘阵列,假设可靠性也是90%,则概率为(1-(1-90%)*(1-90%))*90%=89.1%<90%
可见整个系统的可靠性还不如单机运行。而且一旦磁盘阵列故障将是致命性的!
3.有时容易出现阵列坏道与数据丢失,这不是硬盘的原因,而且HA软件兼容性所致
4.主机正常运行时,如果HA软件发生误判,备机一旦发生故障切换,主备机同时对一个数据库进行读写,会导致数据完全损坏,这种情况下的损坏导致的损失是无法估量的,因为无法恢复!
5.设备升级会有兼容性问题
6.只有接管保护,无数据备份,无灾难恢复方案
7.主备机有距离限制,受SCSI电缆的长度限制(光纤通道的磁盘阵列也不受距离限制,但投资会大得多),如果发生火灾,停电等故障时则必须忍受业务停止。
8.管理方便性,每一个双机系统都必须单独管理,不能集中管理
9.无法进行时间点恢复,主机删除数据,就会从磁盘阵列上删除,就无法回退恢复了。
我们的方案可以给用户选择恢复到任意时间点的数据状态。
纯软方式的双机方案:
纯软件的方式,通过镜像软件,将数据可以实时复制到另一台服务器上,这样同样的数据就在两台服务器上各存在一份,如果一台服务器出现故障,可以及时切换到另一台服务器。
纯软的方案有如下缺点:
1.相对与共享存储的方案,成本较低,不需要购买价格高昂的共享磁盘柜,只需要购买镜像同步软件和故障接管软件
2.可靠性相对差一些,数据实时同步是纯软方案的薄弱所在,要完全做到实时的话对主机性能影响会很大。
3.没有事务机制,由于其复制是在文件和磁盘层进行的,复制是否成功不会影响数据库事务操作,另外大型数据库都有很大的缓存,数据不会立刻写进磁盘,如果此时发生故障,数据不会被复制到备机,因此有出现数据不完整不一致的情况,这个存在着相当的风险,有可能导致即时备机接管了,数据库无法使用。
4.每次故障切回后必须重新同步,重新初始化,数据覆盖一遍,这是个比较漫长的过程,数据量超过一百G以上的话可能要十几个小时,这期间机会不能动,严格的说初始化时几乎需要停止任何访问,此时主备机都处于无保护状态,如果此时主机发生故障,主备机数据都是不可用的,此时就没有任何数据可以用来恢复!这是致命的数据丢失。
5.无法恢复到之前的时间点,因为备机只是主机的数据副本,即使主机上误删除了一个文件,备机也会删除此文件,无法恢复。
常见双机软件
LifeKeeper
支持共享磁盘柜方式和纯软件数据同步方式,支持2-16个节点的集群
优点:对卷的管理更胜一筹,深层次监控共享卷和镜像卷,数据同步为基于磁盘级的镜像,并且有锁卷功能,数据不会丢失。适用于多应用层的管理。已通过IBM认证 缺点:安装设置需要一定的技术要求
RoseHA
只支持共享磁盘柜方式,只支持两个节点
优点:界面简易,操作简单,适用于但应用层的管理。
缺点:对卷的管理稍逊,对卷和IP没有监控,对于某些IBM磁盘阵列关机不能切换。
RoseMirrorHA
只支持纯软件数据同步方式,只支持两个节点 优点:界面简易,操作简单。
缺点:同步方式为文件复制,没有锁卷功能,有可能造成数据丢失。
GoldenLife 支持共享磁盘阵列方式,只支持两个节点 优点:界面友好,安装设置简单。缺点:对卷的管理不如lifekeeper。
GoldenLifeMirror
支持数据同步的纯软方式,只支持两个节点 优点:安装操作简单,易于管理。
缺点:同步方式为文件复制,速度较慢。