STM32處理器綜合應(yīng)用實(shí)例_第1頁
STM32處理器綜合應(yīng)用實(shí)例_第2頁
STM32處理器綜合應(yīng)用實(shí)例_第3頁
STM32處理器綜合應(yīng)用實(shí)例_第4頁
STM32處理器綜合應(yīng)用實(shí)例_第5頁
已閱讀5頁,還剩178頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

STM32處理器綜合應(yīng)用實(shí)例9.1LED點(diǎn)陣顯示器的設(shè)計(jì)與編程9.2SHT1x溫濕度傳感器的接口與應(yīng)用9.3直流電機(jī)的調(diào)速與編程應(yīng)用9.4RS485通信的硬件設(shè)計(jì)與編程應(yīng)用9.5中斷優(yōu)先級(jí)與看門狗定時(shí)器的測(cè)試應(yīng)用9.6處理器Flash與串行Flash的編程應(yīng)用9.7STM32處理器與W5200網(wǎng)絡(luò)模塊的接口應(yīng)用

9.1LED點(diǎn)陣顯示器的設(shè)計(jì)與編程

1.應(yīng)用電路描述

市場(chǎng)上已有很多有關(guān)點(diǎn)陣顯示器的產(chǎn)品,如廣告活動(dòng)字幕機(jī)、股票顯示板、活動(dòng)廣告等。它的優(yōu)點(diǎn)是可按需要的大小、形狀,以單色或彩色來顯示,可與計(jì)算機(jī)或單片機(jī)系統(tǒng)連接,做各種廣告性文字或圖形顯示。

點(diǎn)陣式LED顯示器的種類可分為5?×?7、5?×?8、6?×?8、8?×?8等4種;而按LED發(fā)光的顏色來分,可分為單色、雙色、三色;按LED的極性排列方式又可分為共陽極與共陰極。

本例作為一種原理性的學(xué)習(xí),采用4塊8×8的共陽極單色點(diǎn)陣式LED組成16?×?16的點(diǎn)陣來顯示漢字或圖形。16?×?16的點(diǎn)陣電路如圖9.1所示。圖9.1中,行驅(qū)動(dòng)1L~16L、列驅(qū)動(dòng)1P~16P信號(hào)由圖9.2電路處理完成。圖9.2中的2片74HC138譯碼輸出控制1P~16P的列電路。當(dāng)譯碼器輸出的“0”電平使PNP型三極管接通時(shí),對(duì)應(yīng)LED列的正極“得電”。1L~16L行信號(hào)由圖9.2中的2片74HC595的輸出獲得。對(duì)應(yīng)74HC595的輸出為“0”電平時(shí),可使列驅(qū)動(dòng)有效的“點(diǎn)陣”點(diǎn)亮。采用74HC595級(jí)聯(lián)的方式和譯碼方式不僅可大大減少處理器的I/O管腳的使用,而且可擴(kuò)展更多的點(diǎn)陣驅(qū)動(dòng)。

讀者通過基本LED點(diǎn)陣屏的編程練習(xí),可以實(shí)現(xiàn)“靜態(tài)”、“動(dòng)態(tài)”和“滾屏”顯示漢字或圖形,從中可以獲得學(xué)習(xí)處理器(單片機(jī))原理的樂趣。圖9.116?×?16LED點(diǎn)陣屏圖9.216?×?16LED點(diǎn)陣屏驅(qū)動(dòng)電路2.軟件設(shè)計(jì)1)初始化函數(shù)//處理器IO口初始化voidConfig_LED_DZ(void) //引腳配置{ GPIO_InitTypeDefGPIO_InitStructure; //定義結(jié)構(gòu)體類型 /*配置PB2~PB5為推挽輸出*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//打開PB口時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//輸出頻率為50MHz GPIO_Init(GPIOB,&GPIO_InitStructure); //B口初始化 /*配置PC0~PC4為推挽輸出*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//打開PC口時(shí)鐘

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //定義PC0~PC4 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //輸出頻率為50MHz GPIO_Init(GPIOC,&GPIO_InitStructure); //C口初始化}2)其他相關(guān)函數(shù)voiddelay_x(unsignedintx)//延時(shí)函數(shù){ unsignedinti; for(i=0;i<x;i++);

}//定義CLK引腳電平voidClock_1(void)//時(shí)鐘輸出高電平{GPIO_SetBits(GPIOB,GPIO_Pin_4);} //PB.4輸出高電平

voidClock_0(void)//時(shí)鐘輸出低電平{GPIO_ResetBits(GPIOB,GPIO_Pin_4);} //PB.4輸出低電平

//定義ALE引腳電平voidALE_0(void)//ALE輸出低電平{GPIO_ResetBits(GPIOB,GPIO_Pin_5);} //PB.5輸出低電平

voidALE_1(void)//ALE輸出高電平{GPIO_SetBits(GPIOB,GPIO_Pin_5);} //PB.5輸出高電平

//定義CLR引腳電平voidCLR_0(void)//CLR輸出低電平{GPIO_ResetBits(GPIOB,GPIO_Pin_3);} //PB.3輸出低電平

voidCLR_1(void)//CLR輸出高電平{GPIO_SetBits(GPIOB,GPIO_Pin_3);} //PB.3輸出高電平

//定義DI引腳電平voidDI_0(void)//數(shù)據(jù)輸出低電平{GPIO_ResetBits(GPIOB,GPIO_Pin_2);} //PB.2輸出低電平

voidDI_1(void)//數(shù)據(jù)輸出高電平{GPIO_SetBits(GPIOB,GPIO_Pin_2);} //PB.2輸出高電平

//A、B、C、D、E74HC138的IO口引腳電平voidPx_A_0(void)//A=0{GPIO_ResetBits(GPIOC,GPIO_Pin_0);} //PC.0輸出低電平

voidPx_A_1(void)//A=1

{GPIO_SetBits(GPIOC,GPIO_Pin_0);} //PC.0輸出高電平

voidPx_B_0(void)//B=0{GPIO_ResetBits(GPIOC,GPIO_Pin_1);} //PC.1輸出低電平

voidPx_B_1(void)//B=1{GPIO_SetBits(GPIOC,GPIO_Pin_1);} //PC.1輸出高電平

voidPx_C_0(void)//C=0{GPIO_ResetBits(GPIOC,GPIO_Pin_2);} //PC.2輸出低電平

voidPx_C_1(void)//C=1{GPIO_SetBits(GPIOC,GPIO_Pin_2);} //PC.2輸出高電平

voidPx_D_0(void)//D=0 {GPIO_ResetBits(GPIOC,GPIO_Pin_3);} //PC.3輸出低電平

voidPx_D_1(void)//D=1{GPIO_SetBits(GPIOC,GPIO_Pin_3);} //PC.3輸出高電平

voidPx_E_0(void)//E=0{GPIO_ResetBits(GPIOC,GPIO_Pin_4);} //PC.4輸出低電平

voidPx_E_1(void)//E=1{GPIO_SetBits(GPIOC,GPIO_Pin_4);} //PC.4輸出高電平

//numb=0~15voidRow_data(unsignedcharnumb) //16列數(shù)據(jù)(74HC138){switch(numb){case0://第0列Px_E_0();Px_D_0();Px_C_0();Px_B_0();Px_A_0();//out:00000break;case1://第1列Px_E_0();Px_D_0();Px_C_0();Px_B_0();Px_A_1();//out:00001break;case2://第2列Px_E_0();Px_D_0();Px_C_0();Px_B_1();Px_A_0();//out:00010break;case3://第3列Px_E_0();Px_D_0();Px_C_0();Px_B_1();Px_A_1();//out:00011break;case4://第4列Px_E_0();Px_D_0();Px_C_1();Px_B_0();Px_A_0();//out:00100break;case5://第5列Px_E_0();Px_D_0();Px_C_1();Px_B_0();Px_A_1();//out:00101break;case6://第6列Px_E_0();Px_D_0();Px_C_1();Px_B_1();Px_A_0();//out:00110break;case7://第7列Px_E_0();Px_D_0();Px_C_1();Px_B_1();Px_A_1();//out:00111break;case8://第8列Px_E_0();Px_D_1();Px_C_0();Px_B_0();Px_A_0();//out:01000break;case9://第9列Px_E_0();Px_D_1();Px_C_0();Px_B_0();Px_A_1();//out:01001break;caseA://第10列Px_E_0();Px_D_1();Px_C_0();Px_B_1();Px_A_0();//out:01010break;caseB://第11列Px_E_0();Px_D_1();Px_C_0();Px_B_1();Px_A_1();//out:01011break;caseC://第12列Px_E_0();Px_D_1();Px_C_1();Px_B_0();Px_A_0();//out:01100break;caseD://第13列Px_E_0();Px_D_1();Px_C_1();Px_B_0();Px_A_1();//out:01101break;caseE://第14列Px_E_0();Px_D_1();Px_C_1();Px_B_1();Px_A_0();//out:01110break;caseF://第15列Px_E_0();Px_D_1();Px_C_1();Px_B_1();Px_A_1();//out:01111break;delault://E=1,關(guān)顯示器Px_E_1();Px_D_0();Px_C_0();Px_B_0();Px_A_0();//out:10000break;}//switch()_END}//16列數(shù)據(jù)_END//74HC595送數(shù)據(jù)函數(shù)voiddisplay_16r(unsignedintx_data)//一列16位數(shù)據(jù){chari;unsignedintDATA;//定義數(shù)據(jù)變量ALE_0();//ALE=0;DI_0();//DI=0;Clock_0();//CLK=0;DATA=~x_data;//數(shù)據(jù)取反for(i=0;i<16;i++)

{ if(DATA&0x8000){DI_1();}//DI=1 else{DI_0();}//DI=0//送時(shí)鐘 delay_x(20);Clock_0();//CLK=0; delay_x(10);Clock_1();//CLK=1; delay_x(10);Clock_0();//CLK=0; DATA=DATA>>1;//數(shù)據(jù)右移 }ALE_1();//ALE=1,送ALE時(shí)鐘delay_x(100);//延時(shí)ALE_0();//ALE=0}//寫一個(gè)16*16的點(diǎn)陣漢字voiddisp_16rz(unsignedintnumb[])//正字顯示

{unsignedchary0data=0,abcd=0,i,j; for(i=0;i<16;i++)//控制(0~15)16列 {Row_data(0x10);//關(guān)顯示器(E=1,使74HC138失能)display_16r(numb[i]);//送行數(shù)據(jù)16位 Row_data(i);//開顯示器(74HC138按i譯碼) delay_x(0x40);//延時(shí),控制點(diǎn)亮?xí)r間} }//disp_16rz()_END

3)漢字字模(顯示數(shù)據(jù))

漢字字模由“漢字字模軟件”產(chǎn)生。在產(chǎn)生字模時(shí),要選擇按列刷新,高位數(shù)據(jù)在先,用C格式將產(chǎn)生的字模數(shù)據(jù)按順序改造成INT(整型)數(shù)據(jù)。4)主函數(shù)#include“stm32f10x.h”intmain(void){unsignedchari;SystemInit();//配置時(shí)鐘

Config_LED_DZ();//引腳配置while(1){for(i=0;i<100;i++){disp_16rz(dis_numb1[]);}//顯示“西”delay_x(0x1000);//字間隔延時(shí)for(i=0;i<100;i++){disp_16rz(dis_numb2[]);}//顯示“安”delay_x(0x1000);//字間隔延時(shí)for(i=0;i<100;i++){disp_16rz(dis_numb3[]);}//顯示“電”delay_x(0x1000);//字間隔延時(shí)for(i=0;i<100;i++){disp_16rz(dis_numb4[]);}//顯示“子”delay_x(0x1000);//字間隔延時(shí)

for(i=0;i<100;i++)

{disp_16rz(dis_numb5[]);}//顯示“科”delay_x(0x1000);//字間隔延時(shí)for(i=0;i<100;i++){disp_16rz(dis_numb6[]);}//顯示“技”delay_x(0x1000);//字間隔延時(shí)for(i=0;i<100;i++){disp_16rz(dis_numb7[]);}//顯示“大”delay_x(0x1000);//字間隔延時(shí)for(i=0;i<100;i++){disp_16rz(dis_numb8[]);}//顯示“學(xué)”delay_x(0x1000);//字間隔延時(shí)//其他程序省略}}//main()_END

9.2SHT1x溫濕度傳感器的接口與應(yīng)用

1.硬件電路描述

SHT1x(包括SHT10、SHT11和SHT15)屬于Sensirion溫濕度傳感器系列中的貼片封裝系列。器件內(nèi)部的專利技術(shù),確保測(cè)量具有極高的可靠性與卓越的長(zhǎng)期穩(wěn)定性。其結(jié)構(gòu)包括一個(gè)電容性聚合體測(cè)濕敏感元件、一個(gè)用能隙材料制成的測(cè)溫元件,這兩個(gè)元件集成在一塊微型電路板上,與14位的A/D轉(zhuǎn)換器以及串行接口電路無縫連接,完全標(biāo)定為數(shù)字信號(hào)輸出,具有響應(yīng)迅速、抗干擾能力強(qiáng),低功耗等特點(diǎn)。

SHT1x系列傳感器采用三線(ADA、SCL、GND)總線接口。溫度測(cè)量范圍:-40~+85℃;濕度測(cè)量范圍:20%~99%。溫度測(cè)量精度:SHT10為?±?0.5℃,SHT11為?±?0.4℃,SHT15為±?0.3℃;濕度測(cè)量精度:SHT10為?±?4.5%,SHT11為?±?3.0%,SHT15為?±?2.0%。

SHT1x溫濕度傳感器與STM32處理器的硬件接口如圖9.3(a)所示。圖9.3(b)是SHT1x的外形封裝。圖9.3SHT1x接口與封裝2)函數(shù)定義部分

/溫度測(cè)量SHT10部分

#defineSCL_HGPIO_SetBits(GPIOA,GPIO_Pin_6)

#defineSCL_LGPIO_ResetBits(GPIOA,GPIO_Pin_6)

#defineSDA_HGPIO_SetBits(GPIOA,GPIO_Pin_5)

#defineSDA_LGPIO_ResetBits(GPIOA,GPIO_Pin_5)

#defineSDA_I()GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)

#definereadstate()Config_SH10_DI_x_In()

#definewritestate()Config_SH10_DI_x_Out()3)

SHT10部分函數(shù)

voiddelay_s(unsignedcharx)

{while(x--);}

typedefunion

{u16i;

floatf;

}value;

enum{TEMP,HUMI};

#definenoACK0

#defineACK1

#defineSTATUS_REG_W0x06 //00000110

#defineSTATUS_REG_R0x07 //00000111

#defineMEASURE_TEMP0x03 //00000011

#defineMEASURE_HUMI0x05 //00000101

#defineRESET0x1e //00011110

voidSHT10_init(void)//器件初始化

{

Config_SH10_Clock(); //時(shí)鐘為輸出

writestate(); //數(shù)據(jù)線為輸出

SDA_H;

}

chars_write_byte(unsignedcharvalue)//寫一個(gè)字節(jié)

{

unsignedchari,erro=0;

writestate();//置數(shù)據(jù)線為輸出

for(i=0x80;i>0;i/=2) //shiftbitformasking

{

if(i&value)SDA_H;//maskingvaluewithi

elseSDA_L;

SCL_H; //SCL=1,clkforSENSI-BUS

delay_s(0x18); //pulswithapprox.5us

SCL_L;//SCL=0,

delay_s(0x18);

}

SDA_H; //DI=1,releaseDATA-line

SCL_H; //clk#9forack

readstate(); //將數(shù)據(jù)線置為輸入

delay_s(0x14);

erro=SDA_I();//checkack(DATAwillbepulleddownbySHT11)

SCL_L;

returnerro; //error=1incaseofnoacknowledge

}

chars_read_byte(unsignedcharack) //讀一個(gè)字節(jié)

{

unsignedchari,val=0;

writestate(); //將數(shù)據(jù)線置為輸出

SDA_H;//DI=1

readstate(); //將數(shù)據(jù)線置為輸入

delay_s(0xc); //releaseDATA-line

for(i=0x80;i>0;i/=2) //shiftbitformasking

{SCL_H; //SCL=1 delay_s(0x1c); //clkforSENSI-BUS

if(SDA_I())val=(val|i); //readbit

SCL_L; //SCL=0

delay_s(0x1c);

}

writestate(); //將數(shù)據(jù)線置為輸出

if(ack)SDA_L; //DI=0;

elseSDA_H;

delay_s(0x14);

SCL_H; //clk#9forack

delay_s(0x1c); //pulswithapprox.5us

SCL_L;

delay_s(0x1c);

SDA_H; //releaseDATA-line

returnval;

}

voids_transstart(void)

{

writestate();

SDA_H;SCL_L; //Initialstate

delay_s(0x14);

SCL_H;delay_s(0x14);

SDA_L;delay_s(0x14);

SCL_L;delay_s(0x14);

SCL_H;delay_s(0x14);

SDA_H;delay_s(0x14);

SCL_L;

}

voids_connectionreset(void)

{unsignedchari;

writestate();

SDA_H; SCL_L;

//Initialstate

delay_s(0x14);

for(i=0;i<9;i++) //9SCKcycles

{ SCL_H;

delay_s(0x14);

SCL_L;

delay_s(0x14);

}

s_transstart(); //transmissionstart

}

chars_measure_1(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)

{u8erro=0;

u32i;

s_transstart(); //transmissionstart

switch(mode)

{ //sendcommandtosensorcaseTEMP:erro+=s_write_byte_1(MEASURE_TEMP);break;

caseHUMI:erro+=s_write_byte_1(MEASURE_HUMI);break;

default:break;

}

readstate();

for(i=0;i<65535;i++)

if(SDA_I()==0)break;//waituntilsensorhasfinishedthemeasurement

elsedelay_s(0xff);

if(SDA_I())

erro+=1; //ortimeout(~2sec.)isreached

*(p_value+1)=s_read_byte_1(ACK); //readthefirstbyte(MSB)

*(p_value)=s_read_byte_1(ACK); //readthesecondbyte(LSB)

*p_checksum=s_read_byte_1(noACK); //readchecksum

returnerro;

}voidcalc_sth11(float*p_humidity,float*p_temperature)

{

constfloatC1=-2.0468; //for12Bit

constfloatC2=+0.0367; //for12Bit

constfloatC3=-0.0000015955; //for12Bit

constfloatT1=+0.01; //for14Bit@5V

constfloatT2=+0.00008; //for14Bit@5V

floatrh=*p_humidity; //rh:Humidity[Ticks]12Bit

floatt=*p_temperature; //t:Temperature[Ticks]14Bit

floatrh_lin; //rh_lin:Humiditylinear

floatrh_true; //rh_true:Temperaturecompensatedhumidity

floatt_C; //t_C

t_C=t*0.01-39.7; //calc.temperaturefromticksto[]

rh_lin=C3*rh*rh+C2*rh+C1; //calc.humidityfromticksto[%RH]rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;

//calc.temperaturecompensatedhumidity[%RH]

if(rh_true>100)rh_true=100; //cutifthevalueisoutsideof

if(rh_true<0.1)rh_true=0.1; //thephysicalpossiblerange

*p_temperature=t_C; //returntemperature[]

*p_humidity=rh_true; //returnhumidity[%RH]

}

voidmeasure(unsignedint*wd,unsignedint*sd)//溫度濕度測(cè)量

{

valuehumi_val,temp_val;

unsignedcharerro,checksum;

unsignedintwd_vole,sd_vole;

SHT10_init();//初始化

s_connectionreset();

erro=0;

9.3直流電機(jī)的調(diào)速與編程應(yīng)用

1.硬件電路描述

直流電機(jī)調(diào)速是機(jī)電控制電路中經(jīng)常要設(shè)計(jì)的電路。目前調(diào)速有兩種方法:一種是改變直流電機(jī)兩端的電壓,另一種是通過脈沖寬度(PWM)控制。本例采用后一種方法,即PWM法。PWM法是指通過改變電機(jī)電樞電壓的接通與斷開的時(shí)間比來控制電機(jī)轉(zhuǎn)速的方法。

PWM調(diào)速原理如圖9.4(a)所示。在脈沖作用下,當(dāng)電機(jī)通電時(shí)(t1時(shí)刻),速度增加。電機(jī)斷電時(shí)(t2時(shí)刻),速度逐漸減小。只要按一定規(guī)律改變通、斷電時(shí)間,即可讓電機(jī)轉(zhuǎn)速得到控制。設(shè)電機(jī)長(zhǎng)時(shí)間接通電源時(shí),其轉(zhuǎn)速最大值為Vmax,設(shè)占空比D?=?t1/T,則電機(jī)的平均速度Vd=Vmax?×?D。

平均速度Vd與占空比D的函數(shù)曲線如圖9.4(b)所示。從圖中可以看出,Vd與占空比D并不是完全線性關(guān)系(圖中實(shí)線),當(dāng)系統(tǒng)允許時(shí),可以將其近似地看成線性關(guān)系(圖中虛線)。因此,我們可以說電機(jī)電樞電壓Ua與占空比D成正比,改變占空比的大小即可控制電機(jī)的速度。圖9.4PWM工作原理

STM32處理器具有PWM控制模式,通過相關(guān)的驅(qū)動(dòng)電路與直流電機(jī)接口就能自如地控制電機(jī)轉(zhuǎn)速。其連接電路如圖9.5(a)所示。圖中V1為NPN型8050三極管、V2為NPN型2N6107三極管。V1與V2組成復(fù)合電路,輸出功率可達(dá)40?W。直流電機(jī)M串接在三極管的集電極,并加有續(xù)流二極管V3保護(hù)。直流電機(jī)(見圖9.5(b))上裝有測(cè)量轉(zhuǎn)速的碼盤(MP),碼盤可選用每圈30~100個(gè)脈沖的器件。如果引線過長(zhǎng),還可增加緩沖電路。圖9.5直流電機(jī)控制電路2.軟件設(shè)計(jì)

1)初始化函數(shù)

//PWM_IO口PA1初始化

voidtime_PWM_gpio(void)//PWM引腳初始化PA1

{

GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打開PA口時(shí)鐘

//PA1(T2_CH2)

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//PA1(T2_CH2)

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

//TIM6初始化及優(yōu)先級(jí)2,1

voidtimes_init_TIM6(void)//定時(shí)器6優(yōu)先級(jí)

{

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

NVIC_InitTypeDefNVIC_InitStructure;

//打開TIM6外設(shè)時(shí)鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);

TIM_TimeBaseStructure.TIM_Period=50000;

TIM_TimeBaseStructure.TIM_Prescaler=1439;//1440分頻

TIM_TimeBaseStructure.TIM_ClockDivision=0;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);//初始化定時(shí)器

TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);//開定時(shí)器中斷

TIM_Cmd(TIM6,ENABLE);//使能定時(shí)器

//使能TIM6中斷

NVIC_InitStructure.NVIC_IRQChannel=TIM6_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;

NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;

NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

NVIC_Init(&NVIC_InitStructure);

}//TIM3_CH2(PA7)計(jì)數(shù)輸入,初始化

voidTIM3_External_Clock_CountingMode_PA7(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打開PA7的時(shí)鐘

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;//PA7為輸入

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //打開TIM3的時(shí)鐘

TIM_DeInit(TIM3); //重設(shè)TIM3TIM_TimeBaseStructure.TIM_Period=0xFFFF; //重設(shè)周期

TIM_TimeBaseStructure.TIM_Prescaler=0x00; //預(yù)分頻值

TIM_TimeBaseStructure.TIM_ClockDivision=0x0;

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計(jì)數(shù)模式

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//Timebaseconfiguration

//PA7為輸入

TIM_TIxExternalClockConfig(TIM3,TIM_TIxExternalCLK1Source_TI2,

TIM_ICPolarity_Rising,0);

TIM_SetCounter(TIM3,0); //清零計(jì)數(shù)器CNT

TIM_Cmd(TIM3,ENABLE);

}voidConfig_LED1_out(void)//配置LED1接口(PA5)

{

GPIO_InitTypeDefGPIO_InitStructure; //定義結(jié)構(gòu)體類型

/*配置PA5為推挽輸出*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打開PA口時(shí)鐘

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;

//輸出頻率為2MHz

GPIO_Init(GPIOA,&GPIO_InitStructure);//A口初始化

}

9.4RS485通信的硬件設(shè)計(jì)與編程應(yīng)用

1.硬件電路描述

RS485是工業(yè)現(xiàn)場(chǎng)設(shè)備通信標(biāo)準(zhǔn)接口。485通信線由兩根雙絞線組成,通過差分電壓(通過兩根通信線之間的電壓差)傳輸信號(hào)。為了提高通信質(zhì)量,一般要求,每芯線由多股(如16股0.2?mm的導(dǎo)線)組成。采用屏蔽雙絞線有助于減少和消除兩根485通信線之間產(chǎn)生的分布電容以及通信線周圍產(chǎn)生的共模干擾。

485通信信號(hào)可來自處理器(單片機(jī))的UART串行接口,只是UART串口通信是全雙工的模式(同時(shí)可讀可寫),而485通信大都采用半雙工模式(讀或?qū)?,在操作時(shí)需要專用引腳讀寫控制。目前,485接口芯片較多。如果接口芯片選擇不好,會(huì)直接影響通信質(zhì)量。

ADM2483是一個(gè)性能完善的485通信器件,其內(nèi)部結(jié)構(gòu)和引腳排列如圖9.6所示。圖9.6ADM2483通信器件

由圖9.6可知,ADM2483是一款隔離(隔離電阻大于109W)型單工通信器件,適用于多點(diǎn)總線傳輸線路的雙向數(shù)據(jù)通信。它針對(duì)平衡傳輸線路而設(shè)計(jì),符合國(guó)際485通信標(biāo)準(zhǔn),采用ADI公司的iCoupler技術(shù),將3通道隔離器、三態(tài)差分線路驅(qū)動(dòng)器和差分輸入接收器集成于單封裝核內(nèi)。該器件I/O口可匹配5V或3V電平,供電電源為3~5?V,最大傳輸速率為500?kb/s,工作溫度為?-40~+85℃,共模瞬變抗擾大于25kV/μs。表9.1是ADM2483引腳定義。圖9.7STM32處理器與ADM2483通信接口

為了發(fā)揮ADM2483的優(yōu)越性能,485的接口最好采用不共地的兩組電源(輸入端+3.3?V與處理器共地,輸出端+5?V與485接口線屏蔽層共地)。如果對(duì)接口要求不高,當(dāng)然也可共用+3.3?V一個(gè)電源。

485接口雖然接線較為簡(jiǎn)單,但在應(yīng)用時(shí),需要采取下列措施:

(1)要正確接地。485收發(fā)器在規(guī)定的共模電壓(-12~+12?V)下才能正常工作。如果超出此范圍會(huì)影響通訊,嚴(yán)重時(shí)會(huì)損壞通訊接口。共模干擾會(huì)增大共模電壓。消除共模干擾的有效手段之一是將485通訊線的屏蔽層用作地線,將設(shè)備之間的地連接在一起,并由一點(diǎn)可靠地接入大地。

(2)要正確走線。通信線盡量遠(yuǎn)離高壓電線,不要與電源線并行,更不能捆扎在一起。

在同一個(gè)網(wǎng)絡(luò)系統(tǒng)中,要使用同一種電纜,應(yīng)盡量減少線路中的接點(diǎn)。如果有接點(diǎn),必須確保節(jié)點(diǎn)可靠連接。

(3)差模干擾和共模干擾的消除。485通信線由兩根(A、B)雙絞的線組成。差模干擾在兩根信號(hào)線之間傳輸,屬于對(duì)稱性干擾。消除差模干擾的方法是在電路中增加一個(gè)偏置電阻(電路),并采用雙絞線加屏蔽。

共模干擾在信號(hào)線與地之間傳輸,屬于非對(duì)稱性干擾。消除共模干擾的方法包括:

①采用屏蔽雙絞線并有效接地;

②強(qiáng)電場(chǎng)的地方還要考慮采用鍍鋅管屏蔽;

③布線時(shí)遠(yuǎn)離高壓線。

(4)?485通信距離的延長(zhǎng)。485網(wǎng)絡(luò)的規(guī)范之一是1.2?km長(zhǎng)度,32個(gè)節(jié)點(diǎn)數(shù)。如果超出了這個(gè)限制,就必須采用485中繼器(TD-109)或485集線器(TD-1204)來拓展網(wǎng)絡(luò)距離或節(jié)點(diǎn)數(shù)。利用485中繼器或485集線器,可以將一個(gè)大型485網(wǎng)絡(luò)分隔成若干個(gè)網(wǎng)段。485中繼器或485集線器就如同485網(wǎng)段之間連接的“橋梁”。當(dāng)然每個(gè)網(wǎng)段還是遵循上面的485規(guī)范,即1.2?km長(zhǎng)度,32個(gè)節(jié)點(diǎn)數(shù)。2.軟件設(shè)計(jì)

1)初始化函數(shù)

//串口4初始化函數(shù)

voidUART4_Configuration(void) //UART4的初始化

{

GPIO_InitTypeDefGPIO_InitStructure; //定義結(jié)構(gòu)體

USART_InitTypeDefUSART_InitStructure; //定義結(jié)構(gòu)體

//打開GPIO和UART4部件的時(shí)鐘

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4,ENABLE);//打開UART4的時(shí)鐘

//將USARTTx的GPIO(PC10)配置為推挽復(fù)用模式

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10; //PC10

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOC,&GPIO_InitStructure); //初始化

//將UART_Rx的GPIO(PC11)配置為浮空輸入模式

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11; //PC11

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOC,&GPIO_InitStructure);

//配置USART參數(shù)

USART_InitStructure.USART_BaudRate=9600;//設(shè)置波特率為9600b/s

USART_InitStructure.USART_WordLength=USART_WordLength_8b; //8位數(shù)據(jù)

USART_InitStructure.USART_StopBits=USART_StopBits_1; //1個(gè)停止位

USART_InitStructure.USART_Parity=USART_Parity_No; //無校驗(yàn) USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

USART_Init(UART4,&USART_InitStructure); //串口4初始化

USART_Cmd(UART4,ENABLE);//使能UART4

USART_ClearFlag(UART4,USART_FLAG_ORE);/*清除發(fā)送溢出標(biāo)志*/

USART_ClearFlag(UART4,USART_FLAG_TC);/*清除發(fā)送完成標(biāo)志*/

}

//IO口初始化函數(shù)

voidConfig_IO_485(void)//配置I/O接口

{

GPIO_InitTypeDefGPIO_InitStructure; //定義結(jié)構(gòu)體類型

/*配置PA5為推挽輸出*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//打開PA口時(shí)鐘

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//LED1口

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; //輸出頻率為2MHz

GPIO_Init(GPIOA,&GPIO_InitStructure); //A口初始化

/*配置PC1為推挽輸出*/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//打開PC口時(shí)鐘

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1; //485通信方向控制口

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽輸出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; //輸出頻率為2MHz

GPIO_Init(GPIOC,&GPIO_InitStructure); //C口初始化

}

3)其他相關(guān)函數(shù)

//UART4讀寫函數(shù)

voidWire_UART4_byte(unsignedcharch)//從UART4發(fā)送一個(gè)字符

{

USART_SendData(UART4,ch);

while(USART_GetFlagStatus(UART4,USART_FLAG_TC)==RESET);//發(fā)送完成檢測(cè)

}

unsignedcharRead_UART4(void)//從串口4等待獲取一個(gè)字符

{

unsignedcharR_data;

while(USART_GetFlagStatus(UART4,USART_FLAG_RXNE)==RESET);

R_data=USART_ReceiveData(UART4);//從UART4讀一個(gè)字符

returnR_data;

}

voidUART4_nbyte(u8*ch,u32num)//發(fā)送多個(gè)字節(jié){

u32i;

for(i=0;i<num;i++)

{

USART_SendData(UART4,ch[i]);

while(USART_GetFlagStatus(UART4,USART_FLAG_TC)==RESET);//發(fā)送完成檢測(cè)

}

}

voiddelay_z(unsignedintz)//延時(shí)函數(shù)

{while(z--);}4)函數(shù)定義部分

/I/O函數(shù)定義部分

#defineRS_485_Wire() GPIO_SetBits(GPIOC,GPIO_Pin_1) //向485寫數(shù)據(jù)

#defineRS_485_Read() GPIO_ResetBits(GPIOC,GPIO_Pin_1) //讀485數(shù)據(jù)

#defineLED1_off GPIO_SetBits(GPIOA,GPIO_Pin_5)

#defineLED1_on GPIO_ResetBits(GPIOA,GPIO_Pin_5)

5)?UART4讀中斷函數(shù)

在“stm32f10x_it.c”文件的相關(guān)處加入串口中斷函數(shù)即可。舉例:規(guī)定串口收到字符串“0xaa,ID(設(shè)備號(hào)),CD(命令),0x00,jy(jy=0xaa+ID+cd+0)”后,根據(jù)CD命令要求去處理數(shù)據(jù),并回送字符串“0xbb,ID,CD,0x00,jy(jy=0xbb+ID+cd+0)”。

externunsignedcharR_data[],W_data[],R_point;

voidUART4_IRQHandler(void)

{charR_data,jy;

if(USART_GetITStatus(UART4,USART_IT_RXNE)!=RESET)//檢查接收中斷

{

R_data=USART_ReceiveData(UART4);//從UART4讀一個(gè)字節(jié)數(shù)據(jù)

if(R_data==0xaa)

{R_point=0;

R_data[R_point]=R_data;

R_point++;//讀指針增1

}//if(R_data==0xaa)_END

elseif((R_data[0]==0xaa)&&(R_point<5))

{R_data[R_point]=R_data;//存數(shù)據(jù)

R_point++;//讀指針增1

if(R_point==5)

{jy=R_data[0]+R_data[1]+R_data[2]+R_data[3];//計(jì)算校驗(yàn)

if(ID!=R_data[1])gotoquit_read4;//判斷是否與ID相同

if(jy==R_data[4])

{//chli_data(R_data[2]);//根據(jù)命令處理數(shù)據(jù)

//(程序略,用戶根據(jù)需要增加)

RS_485_Wire();//置485為輸出

delay_z(0x100);//延時(shí)

Wire_UART4_byte(0xbb);//回送命令串0xbbWire_UART4_byte(ID);//回送命令串ID

Wire_UART4_byte(R_data[2]);//回送命令串CD

Wire_UART4_byte(R_data[3]);//回送命令串00

jy=0xbb+ID+R_data[2]+R_data[3];//計(jì)算回送校驗(yàn)值

Wire_UART4_byte(jy);

RS_485_Read();//置485為輸入

}//if(jy==R_data[4])_END

}//elseif()_END

quit_read4:

;

}//if(USART_GetITStatus()_END

}6)主函數(shù)

unsignedcharR_data[20]={0},W_data[20]={0};

unsignedcharR_point=0; //接收指針

#defineID0x01//設(shè)備號(hào)

#include“stm32f10x.h”

#include“usart4.h”

intmain(void)//主函數(shù)

{bitled=0;

SystemInit();//配置時(shí)鐘

//定義優(yōu)先級(jí)為組2

NVIC_PriorityGroupConfig(NVIC_PriorityGroiip_2);

UART4_Configuration();//UART4引腳初始化

UART4_Interrupt(); //UART4的中斷初始化函數(shù)

Config_IO_485();//配置I/O接口

RS_485_Read();//置485為輸入接口

R_point=0;//串口讀指針清零

while(1)

{

//用戶根據(jù)需要增加程序

delay_l(0x1000);//延時(shí)

led=~led;//LED1燈閃爍

if(led==0)LED1_off;

elseLED1_on;

//其他程序省略

}//while(1)_END

}//main()_END 9.5中斷優(yōu)先級(jí)與看門狗定時(shí)器的測(cè)試應(yīng)用

1.硬件電路描述

STM32處理器系列產(chǎn)品有多達(dá)60個(gè)中斷源,優(yōu)先級(jí)的設(shè)置可有256種。其內(nèi)部既有獨(dú)立看門狗定時(shí)器,也有窗口看門狗定時(shí)器。系統(tǒng)復(fù)位后判斷是上電復(fù)位還是看門狗復(fù)位,對(duì)軟件系統(tǒng)的設(shè)計(jì)或看門狗定時(shí)器應(yīng)用的學(xué)習(xí)都很重要。作為一個(gè)實(shí)例,圖9.8是優(yōu)先級(jí)和復(fù)位測(cè)試電路。規(guī)定優(yōu)先級(jí)次序:USART1(最高)、外部中斷0(次高)、定時(shí)器6、定時(shí)器7(最低)。進(jìn)USART1中斷LED1燈點(diǎn)亮,串口1發(fā)送0x01;進(jìn)外部中斷0中斷LED2點(diǎn)亮,串口1發(fā)送0x02;進(jìn)定時(shí)器6中斷LED3燈點(diǎn)亮,串口1發(fā)送0x03;進(jìn)定時(shí)器7中斷,串口1輸出0x04。如果是上電或看門狗復(fù)位,則LED1、LED2、LED3燈熄滅,串口1發(fā)送0x55。圖9.8中設(shè)計(jì)有k1、k2兩個(gè)按鍵。k1接引腳PB0,k2接引腳PB1,目的是配置外部中斷0和按鍵輸入。當(dāng)按鍵k2有效時(shí)(延時(shí)更長(zhǎng)時(shí)間),看門狗復(fù)位。用戶還可設(shè)置不同的中斷優(yōu)先級(jí)來體會(huì)中斷過程。圖9.8看門狗定時(shí)器優(yōu)先級(jí)和復(fù)位測(cè)試電路

9.6處理器Flash與串行Flash的編程應(yīng)用

9.6.1STM32處理器Flash編程應(yīng)用

1.處理器Flash概況

STM32處理器(以128KB器件為例)的Flash存儲(chǔ)器分主存儲(chǔ)器和信息存儲(chǔ)器。主存儲(chǔ)器塊包含128頁,每頁1KB;信息存儲(chǔ)器包括2?KB和0.5?KB兩頁,如表9.2所示。

Flash(閃存)被組織成32位寬的存儲(chǔ)器單元,可以存放代碼和數(shù)據(jù)常數(shù)。系統(tǒng)存儲(chǔ)器用于存放在系統(tǒng)存儲(chǔ)器自舉模式下的啟動(dòng)程序,這個(gè)區(qū)域只保留給公司專用。ST在生產(chǎn)線上對(duì)這個(gè)區(qū)域編程并鎖定,以防止用戶擦寫。主存儲(chǔ)器和信息塊由內(nèi)嵌的閃存編程/擦除控制器(FPEC)管理;編程與擦除由高電壓完成。存儲(chǔ)器有兩種保護(hù)方式防止非法的訪問(讀、寫、擦除),分別為頁寫入保護(hù)和讀出保護(hù)。

在執(zhí)行閃存寫操作時(shí),任何對(duì)閃存的讀操作都會(huì)鎖住總線,在寫操作完成后讀操作才能正確地進(jìn)行,即在進(jìn)行寫或擦除操作時(shí),不能進(jìn)行代碼或數(shù)據(jù)的讀取操作。進(jìn)行閃存編程操作(寫或擦除)時(shí),必須打開內(nèi)部的RC蕩器(HIS)。閃存存儲(chǔ)器可以用ICP或IAP方式編程。

2.處理器Flash編程應(yīng)用

STM32處理器Flash的編程操作,可參考第3章第19節(jié)(3.19)的庫函數(shù)。對(duì)于Flash應(yīng)用,用戶大都作為數(shù)據(jù)存儲(chǔ)器使用。首先估算用戶程序的大小,然后確定寫入數(shù)據(jù)的起始地址(頁地址),一般放在主存儲(chǔ)器的后面。下面是實(shí)用的讀寫函數(shù)。

1)頁擦除函數(shù)

//EraseAddr為Flash存儲(chǔ)頁地址

voidCPUflashErasePage(unsignedintEraseAddr)

{

FLASH_Unlock();

FLASH_ErasePage(EraseAddr);//擦除頁

FLASH_Lock();

}9.6.2串行Flash的編程應(yīng)用

1.引腳排列及接口

SST25VF010引腳排列見圖9.9(a)。芯片接口包括電源引腳、SPI接口引腳和控制引腳。芯片通過SPI接口與STM32處理器的SPI接口連接。接口電路中的WP#、HOLD#引腳可根據(jù)實(shí)際情況決定是否與控制器引腳相連。常用電路是在WP#、HOLD#引腳外加上拉電阻,如圖9.9(b)所示。引腳定義如表9.3所示。圖9.9SST25VF010存儲(chǔ)器引腳與接口

2.器件操作時(shí)序

串行NORFlash通過STM32處理器的SPI接口發(fā)送命令到SST25VF010器件,并接收NORFlash芯片返回的狀態(tài)信息和數(shù)據(jù)信息。SST25VF010接口時(shí)序圖見圖9.10,讀、寫數(shù)據(jù)時(shí)序圖分別如圖9.11、圖9.12所示。圖9.10SST25VF010時(shí)序圖圖9.11SST25VF010讀數(shù)據(jù)時(shí)序圖圖9.12SST25VF010寫數(shù)據(jù)時(shí)序圖3)?SPI2的NSS(片選)信號(hào)(定義)

#defineFLASH_NSS_H()GPIO_SetBits(GPIOC,GPIO_Pin_1) //PC1=1

#defineFLASH_NSS_L()GPIO_ResetBits(GPIOC,GPIO_Pin_1) //PC1=0

4)讀數(shù)據(jù)函數(shù)

由時(shí)序圖9.11可知,在CE#(NSS)信號(hào)拉低后,通過SPI口發(fā)送0x03指令,緊接在指令后的是要讀數(shù)據(jù)的地址(3字節(jié)),地址高位先發(fā)送。發(fā)送完地址后,主SPI產(chǎn)生時(shí)鐘,要讀地址位數(shù)據(jù)通過SPI接口返回。讀函數(shù)如下:

5)寫數(shù)據(jù)函數(shù)

由時(shí)序圖9.12可知,在CE#(NSS)信號(hào)拉低后,通過SPI口發(fā)送0x02指令,緊接在指令后是要寫數(shù)據(jù)的地址(3字節(jié)),地址高位先發(fā)送。發(fā)送完3字節(jié)地址后,向器件寫入數(shù)據(jù),最后拉高片選CE#(NSS)信號(hào)。

NORFlash要求一個(gè)存儲(chǔ)單元在寫入數(shù)據(jù)之前,必須先要擦除,否則無法寫入新數(shù)據(jù)。在寫數(shù)據(jù)前還需要取消芯片的寫保護(hù)功能,否則也無法對(duì)芯片執(zhí)行寫操作。在寫操作結(jié)束后要恢復(fù)寫保護(hù)設(shè)置。編程時(shí),最好要指定寫緩存的地址、需要寫入的數(shù)據(jù)個(gè)數(shù)以及寫數(shù)據(jù)的目標(biāo)地址等。寫函數(shù)如下:

6)擦除Flash函數(shù)

SST25VF010有32個(gè)扇區(qū),用戶可指定扇區(qū)進(jìn)行擦除操作。當(dāng)一個(gè)存儲(chǔ)單元被擦除后,存儲(chǔ)單元內(nèi)的數(shù)據(jù)變?yōu)?xFF。在執(zhí)行擦除操作前,需取消芯片的寫保護(hù)功能。SST25VF010器件提供了單扇區(qū)擦除、塊擦除、片擦除3種底層擦除功能,根據(jù)擦除范圍選用合適的擦除方式,可大大縮小擦除所需時(shí)間。擦除函數(shù)如下:

9.7STM32處理器與W5200網(wǎng)絡(luò)模塊的接口應(yīng)用9.7.1W5200性能特點(diǎn)與硬件接口

W5200芯片是一種采用全硬件TCP/IP協(xié)議棧的嵌入式以太網(wǎng)控制器,它能使嵌入式系統(tǒng)通過SPI(串行外設(shè)接口)接口輕松地連接到網(wǎng)絡(luò)。W5200特別適合那些需要使用單片機(jī)來實(shí)現(xiàn)互聯(lián)網(wǎng)功能的客戶,這就需要單片機(jī)系統(tǒng)具有完整的TCP/IP協(xié)議棧和10/100?Mb/s以太網(wǎng)網(wǎng)絡(luò)層(MAC)和物理層(PHY)。W5200是由已經(jīng)通過市場(chǎng)考驗(yàn)的全硬件TCP/IP協(xié)議棧及以太網(wǎng)網(wǎng)絡(luò)層和物理層整合而成的。其全硬件的TCP/IP協(xié)議棧全程支持TCP、UDP、IPv4、ICMP、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論