freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于stm32的智能建筑以太網(wǎng)與rs232數(shù)據(jù)傳輸網(wǎng)關(guān)的設(shè)計-資料下載頁

2025-07-01 10:13本頁面

【導讀】寫過的研究成果,沒有偽造數(shù)據(jù)的行為。本畢業(yè)設(shè)計(論文)作者完全了解學校有關(guān)保留、使用論文的規(guī)定。并向有關(guān)管理部門或機構(gòu)送交論文的復印件和電子版,允許論文被查閱和借閱。印、縮印或掃描等復制手段保存和匯編本論文。原理,并細致地給出相應的硬件電路。點,在設(shè)計軟件的過程中,實現(xiàn)了以太網(wǎng)TCP協(xié)議到串行數(shù)據(jù)協(xié)議的轉(zhuǎn)換傳輸。關(guān)鍵字:STM32F107;以太網(wǎng);RS232;數(shù)據(jù)傳輸網(wǎng)關(guān);

  

【正文】 17 別是一收一發(fā)兩種 邏輯通道。數(shù)據(jù)在傳輸?shù)倪^程中,是可以同時進行接收和發(fā)送數(shù)據(jù)的,在 TCP 報頭里面,不僅包含著傳出的數(shù)據(jù),而且還有確認輸入數(shù)據(jù)的序列號。 :在傳輸數(shù)據(jù)的時候,對于我們需要發(fā)送的數(shù)據(jù),必須要按一定的順序進行發(fā)送,且不可以胡亂的發(fā)送,以至于導致錯誤。除此之外,必須確認數(shù)據(jù)是否發(fā)送成功,這就需要接收到接收方反饋回來的信號,假如沒有得到確認的數(shù)據(jù),那么就需要重新發(fā)送數(shù)據(jù),接收方接收了重復的數(shù)據(jù)包就會將其丟掉,而失序包 就將被還原成正確的序列。 :顧名思義,就是當 TCP 在進行數(shù)據(jù)傳輸?shù)臅r候,在邏輯管道上進行傳輸?shù)臄?shù)據(jù)是一種連續(xù)的字節(jié)流,而且 TCP 的報頭序列號和確認號也是以字節(jié)的形式存在的。 TCP 在傳輸?shù)倪^程中,并不會知道它所傳輸?shù)淖止?jié)是什么內(nèi)容,也不會知道傳輸?shù)钠鹗嘉恢?,它只能通過應用層的協(xié)議來對字流節(jié)的數(shù)據(jù)進行分析。 :和一般的流水管道一樣,為了防止堵塞, TCP 協(xié)議也規(guī)定了數(shù)據(jù)傳輸?shù)牧髁?。所以在傳輸?shù)據(jù)的兩方都會預留一個接收的緩沖區(qū),假如其中一方的接收數(shù)據(jù)緩沖區(qū)滿了,那么它會發(fā)送信號給另一方, 讓它終止數(shù)據(jù)的發(fā)送,直到緩沖區(qū)有空余的空間為止。但是雙方的接收緩沖區(qū)都是獨立存在的,永遠也不會出現(xiàn)膨脹的情況。 : 如果我們的 TCP 連接 一旦成立以后,兩方就會對彼此能傳遞的最大值進行互換,假設(shè) 收到 的是 ICMP 的“路徑最大傳輸單位”值 ,就可以自動的調(diào)整TCP 的大小了。 : TCP 協(xié)議可以提供一對一的通訊服務。 TCP 協(xié)議結(jié)構(gòu) TCP 協(xié)議進行數(shù)據(jù)傳輸?shù)目煽啃允欠浅5母叩?,只有需要發(fā)送的應用數(shù)據(jù)被拆分成比較合適的數(shù)據(jù)塊的時候, TCP 協(xié)議才會對其進行發(fā)送。這么可靠的數(shù)據(jù)發(fā)送能 力肯定是和 TCP 協(xié)議的首部結(jié)構(gòu)是分不開的。以下就是 TCP 協(xié)議的首部結(jié)構(gòu)圖: 圖 42 TCP 協(xié)議的首部結(jié)構(gòu) 第四章 軟件介紹 18 上圖是 TCP 的首部結(jié)構(gòu)圖,一般來說,假如不要求任選字節(jié)的話,它的長度應該在 20字節(jié),這樣一來,可見 TCP 協(xié)議與 IP 協(xié)議的首部大小是一樣的。接下來是 TCP 協(xié)議首部結(jié)構(gòu)的各部分的應用。 首先介紹結(jié)構(gòu)圖最頂端的兩個部分,源端口號和目的端口號。它們主要起到的是一個標識的作用,不管是在發(fā)送端,還是在接收端,它們都可以對當前的應用程序進行標識。其實,它們對確定一個 TCP 的連接也起到了至關(guān)重要的作用,當他 們兩個的數(shù)值組合 IP 首部的源 IP地址和目的 IP 地址,就會確定一個獨一無二的 TCP 連接了。 同源端口號和目的端口號的作用一樣, 32位序號字段也起到一個標識的作用,它主要是標識 TCP 發(fā)送端到它的接收端的數(shù)據(jù)字流節(jié),確切的說,是對這個報文的第一個數(shù)據(jù)字節(jié)進行標序。在建立了一個新的連接的時候,我們的 SYN 標志就會置向 1 的位置,最后加上主機的初始序號 ISN 后,我們的這個主機將要發(fā)送的數(shù)據(jù)的第一個字節(jié)序號就會變?yōu)?ISN+1 了。 32位確認序號的 ACK 字段永遠是被置于 1 的位置,因為當 ACK 被置于 1的時候才有效,這個序號攜 帶的是接收端希望接收到的下一個序列號。 由圖 中列舉的 6個標志比特可以知道,它們的用法依次分別是:第一個是緊急指針的有效標識;第二個是確認序號的有效標識;第三個表示的是接收端應該快速的把報文段發(fā)送給應用層;第四個是重新建立連接;第五個表示的是一個同步的序號,在建立連接的時候需要用它來發(fā)起連接;第六個表示發(fā)送端已經(jīng)完成了發(fā)送的任務。 窗口的作用主要是進行流量的控制,一般是根據(jù)自己的窗口字段的大小來實現(xiàn)既定的目標,除此之外,它還能進行字節(jié)數(shù)接收的操作。 檢驗和的范圍非常的廣,在 TCP 的首部和 TCP 數(shù)據(jù)里都分 布著,簡單的概括就是占據(jù)了整個 TCP 報文段。這個字段必須是從發(fā)送端進行計算和儲存,而且由接收端進行檢驗。緊急指針是一個正的偏移量,通過和序號字段中的數(shù)值進行求和,最終可以表示緊急數(shù)據(jù)最后一個字節(jié)的序號。值得注意的一點是 :要想緊急指針有效的工作,就必須在URG 標志數(shù)值置于 1 的時候進行。 在 TCP 的報文段中,有時候也會出現(xiàn)數(shù)據(jù)部分沒有值的狀態(tài)。很可能會出現(xiàn)在某個連接的建立和終止的時候,因為這個時候兩方所交換的報文段都只是存在 TCP 首部?;蛘哌€有另一個可能,那就是某方在沒有進行數(shù)據(jù)發(fā)送的時候,它是需要通過不含任何 數(shù)據(jù)的首部去檢測收到的數(shù)據(jù)的。 TCP 連接函數(shù)的建立 每個 新的 TCP 連接 都是 由函數(shù) tcp_new()來創(chuàng)建的。在連接創(chuàng)建完成以后,協(xié)議控制模塊( PCB)就進入監(jiān)聽模式了,可以直接的去連接另外一個主機,也可以等待數(shù)據(jù)接收的連接信號。 () 第四章 軟件介紹 19 Struct tcp_pcb*tcp_new( void) 這個函數(shù)的主要功能是為了建立一個新的連接標志( pcb),只有在定義一個 tcp_pcb控制塊以后,才能首先被調(diào)用。當返回 來的數(shù) 值為 pcb 時,表明 已經(jīng)正常的建立了連接 ;當返回值為 NULL 時, 表明 一個全 新的 pcb 內(nèi)存是不能被用的 。 () Err_t tcp_bind( struct tcp_pcb*pcb, struct ip_addr*ipaddr, u16_t port) 該函數(shù)主要是用于綁定本地的 IP 地址和端口號,用戶在使用的過程中,可以將其綁定在任何一個本地的 IP地址上,不過有一點是必須注意的,只有在函數(shù) tcp_new()被調(diào)用之后,它才可以被調(diào)用。在以上函數(shù)的原型中, pcb 表示我們準備綁定的連接,ipaddr 表示綁定的 IP 地址, port 表示綁定的本地端口號。當返回值是 ERROK 時,說明已經(jīng)正確地綁定了指定的連接;當返回值是 ERRUSE 時,說明我們之前所指定的端口號已經(jīng)被綁定了一個連接,與這次綁定產(chǎn)生了嚴重的沖突。 () Struct tcp_pcb*tcp_listen(struct tcp_pcb*pcb) 該函數(shù)的功能就是當一個正在請求的連接被接收的時候,會使之前所指定的連接開始進入監(jiān)聽狀態(tài)。當返回的是一個新的 pcb 的時候,它會被當作一個新的參數(shù)發(fā)送給即將要分配的函數(shù),因為當處于監(jiān)聽狀態(tài)的時候,連接對于內(nèi)存的需求是很小的,所以tcp_listen()函數(shù)會收回原有的連接內(nèi)存,并重新的去分配一個相對較小的內(nèi)存塊供監(jiān)聽狀態(tài)連接使用。當返回的是 NULL 的時候,說明監(jiān)聽模式的連接內(nèi)存是不可用的,假如是這個結(jié)果的話,我們之前傳遞給 tcp_listen()函數(shù)的 pcb 所占有的內(nèi)存就無法得以分配。 () Void tcp_acc_pt( strcut tcp_pcb*pcb, err_t(*accept)(void*arg, struct tcp_pcb*newpcb, err_t err)) 這個函數(shù)的性能就是:之前規(guī)定好的的處于監(jiān)聽狀態(tài)的連接連接成功以后,調(diào)用將要被調(diào)用的函數(shù) 。也就是說,只有正處于監(jiān)聽狀態(tài)的連接與新來的連接連上之后,這個函數(shù)指定的回調(diào)函數(shù)才能被調(diào)用,一般來說,會在 tcp_listen()函數(shù)調(diào)用之后才能被調(diào)用。 TCP 服務器的初始化 在這個設(shè)計過程中,我們所選取的傳輸協(xié)議是 TCP 傳輸控制協(xié)議,在 STM32 微型控制板中, 選取的是 RS232 串口, 把 TCP 傳輸 作為服務器端。 TCP 服務器端的系統(tǒng)初始化函數(shù)段過程如下: 第四章 軟件介紹 20 void TCP_server_init(void) { struct tcp_pcb *pcb。 /*****以下為 RS232 端口初始化 ******/ pcb = tcp_new()。 /* 建立通信的 TCP 控制塊 (pcb) */ tcp_bind(pcb,IP_ADDR_ANY,RS232_SERVER_PORT)。 /* 綁定本地 IP 地址和端口號(作為 tcp 服務器) */ pcb = tcp_listen(pcb)。 /* 進入監(jiān)聽狀態(tài) */ tcp_accept(pcb,tcp_232_server_accept)。 /* 設(shè)置有連接請求時的回調(diào)函數(shù) */ 由以上函數(shù)關(guān)于 RS232 端口初始化的描述,可以很容易的總結(jié)出 TCP 服務器初始化的過程如下: PCB 連接( tcp_pcb 結(jié)構(gòu)體類指針)分配合理的本地 IP 地址和端口號。 ,允許本地連接的客戶端可以直接地訪問服務器。 ,把具體的連接建立后,再調(diào) 用功能函數(shù)。 RS232的通訊 如今,對于網(wǎng)絡數(shù)據(jù)傳輸?shù)囊笤絹碓礁?,不僅需要速度快,而且還要求非常高的網(wǎng)絡利用率。在這樣的情況下,能不能克服數(shù)據(jù)傳輸中的丟幀現(xiàn)象,將是我們需要重點研究的對象。一般來說, RS232 的傳輸速度是比不上以太網(wǎng)的傳輸速度的,因此,當我們想把串口接收到的數(shù)據(jù)向網(wǎng)上傳輸?shù)臅r候,就不能一個字節(jié)一個字節(jié)的傳送了?,F(xiàn)在我們提出一個新的概念,也是一個新的傳輸方法,那就是組幀傳輸。顧名思義,組幀就是將接收到的 RS232 數(shù)據(jù)組幀,當一幀數(shù)據(jù)接收完成之再向網(wǎng)絡發(fā)送數(shù)據(jù)。簡單的說,組幀的方法有 兩種: (1)一幀的數(shù)據(jù)到底有多大,我們可以用 RS232 的幀結(jié)束符來進行劃分(一幀數(shù)據(jù)的長度一定是在規(guī)定范圍內(nèi))。 (2)第二種方法是利用單片機內(nèi)的定時器進行組幀,詳細的過程是:從 RS232 串口接收到的第一個字節(jié)開始進行計時,假如在一定的時間范圍之內(nèi)(例如 20ms)沒有再接收到任何的數(shù)據(jù),就將這之前接收到的全部數(shù)據(jù)進行打包,封裝成一幀數(shù)據(jù)之后發(fā)到網(wǎng)絡上。還有一種可能,假如 RS232 串口在接收數(shù)據(jù)的過程中,一直會有數(shù)據(jù)接收(必須明確,兩個字節(jié)的時間間隔應當小于之前所規(guī)定的時間),那么只有當接收的數(shù)據(jù)個數(shù)超過規(guī) 定的緩沖長度時,才能對滿足要求的數(shù)據(jù)進行組幀。 第四章 軟件介紹 21 通過對以上兩種組幀的大概描述可以知道: 第一種組幀是需要設(shè)置合適的幀結(jié)束符的,因此在實際的工程中,這中方法是可以得到很好的運用的,因為在實際工程中的協(xié)議當中,幀結(jié)束符和一幀的長度(如 modbus協(xié)議)是運用很廣泛的。但是它也是會有局限性的,那就是不能進行透傳的。 第二種方法卻是非常適合做以太網(wǎng)轉(zhuǎn)串口的透明傳輸,通過兩個字節(jié)間的時間間隔來進行組幀。第一種方法不管是理解還是實現(xiàn)起來都是蠻簡單的,但是我們的這個設(shè)計要用的是第二種方法。當 RS232 串口接收數(shù)據(jù)進行組幀 之后,就將 RS232 組幀數(shù)據(jù)傳送到 STM32 為控制器的數(shù)據(jù)轉(zhuǎn)換部分,然后再將 RS232 數(shù)據(jù)幀轉(zhuǎn)換成以太網(wǎng)數(shù)據(jù)幀,最終傳送到各個客戶端。 軟件設(shè)計 為了能夠直觀的認識數(shù)據(jù)傳輸?shù)恼麄€過程, 系統(tǒng)的設(shè)置和各個接口的初始化是必不可少的步驟,以下為 軟件設(shè)計的框圖: S T M 3 2 系 統(tǒng) 設(shè) 置 ( 時鐘 , 以 太 網(wǎng) ,N V I C , G P I O ) 以 及S T M 3 2 1 0 C E V A L 資 源R S 2 3 2 串 口 的 初 始 化L W I P 協(xié) 議 的 初 始 化接 收 數(shù) 據(jù) 協(xié) 議 轉(zhuǎn) 換 發(fā) 送 數(shù) 據(jù) 圖 42 軟件設(shè)計框圖 由圖 42 可以知道以下各個功能模塊的設(shè)計: 的系統(tǒng)設(shè)置 主控芯片 STM32 的設(shè)置是利用函數(shù) system_setup()來實現(xiàn)的,具體來說,完成對STM32 時鐘,鎖相環(huán)和 FLASH 的配置,啟用 USART2 時鐘和 ETHERNET 時鐘,設(shè)置需要用到的端口 GPIO_Configuration,嵌套中斷控制器 NVIC_Configuration,定時器Timer_Configruation。 的初始化 第四章 軟件介紹 22 LWIP 協(xié)議棧的初始化是靠 LWIP_Init()來實現(xiàn)的,在這過程中, udp_new()的作用是建立一個新的 PCB 控制塊, udp_bind()的作用是綁定一個本地的 IP 地
點擊復制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1