日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在嵌入式系統(tǒng)上實現(xiàn)異步串口通信

MCU開發(fā)加油站 ? 來源:未知 ? 作者:佚名 ? 2017-12-04 09:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

從軟件的角度來看,所有的通信都是一串字節(jié)(叫做數(shù)據(jù)幀)的連續(xù)傳輸。軟件需要采用適當(dāng)?shù)臋C制來保證接收端能夠正確識別出一個完整的數(shù)據(jù)幀、能夠檢查接收到的數(shù)據(jù)幀是正確的、在傳輸發(fā)生錯誤時有合適的恢復(fù)機制。為此就需要定義一個合適的數(shù)據(jù)幀格式。

數(shù)據(jù)幀的提取

為了識別出一個完整的數(shù)據(jù)幀,基本上有兩個機制:一是在軟件上規(guī)定字節(jié)之間的間隔最大值,一旦兩個字節(jié)間的間隔超過某個閾值,就認(rèn)為一個數(shù)據(jù)幀結(jié)束;另一種機制不對字節(jié)間的間隔作規(guī)定,而是用特殊的字節(jié)來定義數(shù)據(jù)報的開始和結(jié)束,當(dāng)收到該特殊字節(jié)時,就認(rèn)為一個數(shù)據(jù)幀的傳輸已完成。采用第一種機制的,比如Modbus-RTU。就是規(guī)定了同一個數(shù)據(jù)幀的字節(jié)間隔不能大于1.5個字節(jié)的傳輸時間,一旦大于該間隔,則認(rèn)為前一個幀的傳輸已經(jīng)結(jié)束,或者出錯。同時為了保證不同數(shù)據(jù)幀之間有足夠的間隔,還規(guī)定了兩個數(shù)據(jù)幀之間最少插入3.5個字節(jié)的空閑位。下圖摘自Modbus協(xié)議,表示了一個正確的數(shù)據(jù)幀、錯誤的數(shù)據(jù)幀以及數(shù)據(jù)幀之間的間隔。同時在數(shù)據(jù)報中引入了CRC,用于檢出數(shù)據(jù)幀層面的傳輸錯誤。

第二種機制需要選用一個特殊字節(jié)作為幀頭幀尾(也可以給幀頭幀尾選用不同的字節(jié)),比如說,選用0xFF作為幀頭幀尾字節(jié),也即發(fā)送端在每個數(shù)據(jù)幀的頭尾都插入至少一個0xFF,接收端收到該字節(jié)就結(jié)束上一個幀的接收,同時從下一個非0xFF字節(jié)開始一個新的數(shù)據(jù)幀的接收。但該機制有一個問題,那就是所選的特殊字節(jié)(此處是0xFF)也可能是數(shù)據(jù)幀中的一個有效字節(jié),如果不作特殊處理,接收端就可能把這個數(shù)據(jù)幀中的字節(jié)誤認(rèn)為是數(shù)據(jù)幀的結(jié)束標(biāo)識,從而導(dǎo)致接收錯誤。因此,此處采取字節(jié)替換的特殊處理,以消除在數(shù)據(jù)幀的中間出現(xiàn)的特殊字節(jié),以下是一個例子。

在此處,選0xFE作為字節(jié)替換的標(biāo)識字節(jié),將0xFF替換成0xFE 0x0F。由于0xFE是字節(jié)替換的標(biāo)志,也成了一個特殊字符,同樣需要進行替換。在上圖中,將0xFE替換成0xFE 0x0E。

采用該機制時,發(fā)送端對數(shù)據(jù)幀中的所有0xFF,0xFE進行替換。在接收端則進行反向替換。如果在接收端的0xFE后面的字節(jié)收到非0x0F,0x0E的字符,說明發(fā)生了傳輸錯誤,丟棄已經(jīng)接收的內(nèi)容,重新搜索幀頭字符開始一個新數(shù)據(jù)幀的接收。

數(shù)據(jù)幀的校驗

考慮到串口通信有一定的誤碼率,無論是采用那種傳輸方式,必須有錯誤幀檢出機制。通常選用的是CRC。一般用2個字節(jié)或4個字節(jié)。

串口驅(qū)動的實現(xiàn)

嵌入式系統(tǒng)中,串口驅(qū)動的實現(xiàn)一般有兩個途徑:一個是通過串口的收發(fā)中斷與串口控制器的Buffer直接交換數(shù)據(jù);另一種是通過DMA,利用DMA與串口Buffer交互自動收發(fā)數(shù)據(jù)。

與串口控制器直接交互的方式,實現(xiàn)簡單,既可以實時進行字節(jié)替換以節(jié)省內(nèi)存,也可以方便設(shè)置字節(jié)間的定時器。但頻繁打斷CPU,對有一定BUFFER大小的串口,還可以利用BUFFER進行性能優(yōu)化,而對一些只有一個字節(jié)或兩個字節(jié)BUFFER的串口,就需要一個字節(jié)起一次中斷,如果CPU負(fù)荷較重,很容易由于中斷處理不及時而導(dǎo)致字節(jié)丟失,特別是在高波特率的情況。

利用DMA與串口控制器交互的方式,由于不能實時進行字節(jié)替換,需要在放入DMA之前完成字節(jié)替換,導(dǎo)致占用較大內(nèi)存空間。另外對于字節(jié)間間隔敏感的傳輸策略,需要用另外的機制,比如PRS,去操作定時器。用DMA的另一個問題是在接收時無法實時確定幀尾(采用幀頭幀尾模式時),一般只能采用定時器與DMA配合,用字節(jié)流的方式處理接收。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3831

    瀏覽量

    133919
  • 異步串口通信
    +關(guān)注

    關(guān)注

    0

    文章

    1

    瀏覽量

    1385

原文標(biāo)題:嵌入式系統(tǒng)上的異步串口通信的實現(xiàn)

文章出處:【微信號:mcugeek,微信公眾號:MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    2025嵌入式開發(fā)教程|遠(yuǎn)航哥

    https://www.bilibili.com/opus/1178756596191199237 嵌入式通信協(xié)議三劍客:串口、I2C與SPI的深度解析 在嵌入式
    的頭像 發(fā)表于 03-20 17:35 ?1370次閱讀
    2025<b class='flag-5'>嵌入式</b>開發(fā)教程|遠(yuǎn)航哥

    知識分享-嵌入式系統(tǒng)可靠性模型

    嵌入式系統(tǒng)可靠性設(shè)計技術(shù)及案例解析1.3嵌入式系統(tǒng)可靠性模型嵌入式系統(tǒng)可靠性模型分為兩種:串聯(lián)結(jié)
    的頭像 發(fā)表于 03-11 16:43 ?432次閱讀
    知識分享-<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b>可靠性模型

    何在Zynq UltraScale+ MPSoC平臺上通過JTAG啟動嵌入式Linux鏡像

    在之前文章中,我們介紹了如何使用 XSCT 工具通過 JTAG 在 Zynq SoC 啟動嵌入式 Linux 鏡像(從 JTAG 啟動 Zynq-7000 嵌入式 Linux:使用 XSCT 全
    的頭像 發(fā)表于 01-13 11:45 ?5100次閱讀

    什么是嵌入式應(yīng)用開發(fā)?

    實現(xiàn)和部署,還包括硬件選擇、軟件設(shè)計、測試、集成和維護等流程?。 定義和背景 嵌入式應(yīng)用開發(fā)是指將軟件部署到嵌入式系統(tǒng)中,這些系統(tǒng)廣泛
    發(fā)表于 01-12 16:13

    從小白到大牛:Linux嵌入式系統(tǒng)開發(fā)的完整指南

    使用 C 語言(嵌入式開發(fā)主力語言)、POSIX 標(biāo)準(zhǔn)接口(文件 IO、進程、線程、信號量)。推薦通過 “溫度采集系統(tǒng)”“串口通信工具”等小型項目練手,重點掌握多線程編程(解決并發(fā)任務(wù)
    發(fā)表于 12-16 10:42

    什么是嵌入式操作系統(tǒng)

    要理解嵌入式操作系統(tǒng)(Embedded Operating System,簡稱 RTOS/EOS),我們可以從本質(zhì)定義→核心區(qū)別→實際作用→典型特征→嵌入式開發(fā)場景適配,五個維度來拆解, 一
    發(fā)表于 12-09 10:33

    分享一個嵌入式開發(fā)學(xué)習(xí)路線

    技術(shù),實現(xiàn)設(shè)備聯(lián)網(wǎng)上傳數(shù)據(jù)。 系統(tǒng)架構(gòu)思維:理解企業(yè)級嵌入式開發(fā)的架構(gòu)設(shè)計,如分層架構(gòu)、模塊化設(shè)計等。 實踐建議:在STM32移植FreeRTOS,
    發(fā)表于 12-04 11:01

    C語言在嵌入式開發(fā)中的應(yīng)用

    C 語言在汽車電子控制系統(tǒng)開發(fā)中的主導(dǎo)地位。 2、設(shè)備驅(qū)動程序 設(shè)備驅(qū)動程序是嵌入式系統(tǒng)中連接硬件和軟件的橋梁,它負(fù)責(zé)實現(xiàn)嵌入式
    發(fā)表于 11-21 08:09

    嵌入式和FPGA的區(qū)別

    ,F(xiàn)PGA憑借硬件并行處理能力,能夠實現(xiàn)納秒級響應(yīng),遠(yuǎn)優(yōu)于微秒級的嵌入式系統(tǒng)。 功耗效率,嵌入式系統(tǒng)
    發(fā)表于 11-19 06:55

    嵌入式與單片機定義及區(qū)別

    單片機,即嵌入式微控制器MCU,是嵌入式系統(tǒng)的核心組成部分。除此之外,嵌入式處理器還包括嵌入式DSP處理器、
    發(fā)表于 11-17 08:11

    嵌入式系統(tǒng)的定義和應(yīng)用領(lǐng)域

    應(yīng)用系統(tǒng)在功能、可靠性、成本、體積和功耗等方面的嚴(yán)格要求的專用計算機系統(tǒng)。 那么,嵌入式系統(tǒng)具體應(yīng)用在哪些領(lǐng)域呢?事實,它們的應(yīng)用非常
    發(fā)表于 11-17 06:49

    廣州郵科嵌入式通信電源系統(tǒng):提升通信設(shè)備穩(wěn)定性與效率的關(guān)鍵

    在今天的信息化社會,嵌入式通信電源系統(tǒng)已經(jīng)成為許多通信設(shè)備的核心組成部分。特別是在廣州郵科,嵌入式通信
    的頭像 發(fā)表于 08-30 11:01 ?763次閱讀
    廣州郵科<b class='flag-5'>嵌入式</b><b class='flag-5'>通信</b>電源<b class='flag-5'>系統(tǒng)</b>:提升<b class='flag-5'>通信</b>設(shè)備穩(wěn)定性與效率的關(guān)鍵

    入行嵌入式應(yīng)該怎么準(zhǔn)備?

    任務(wù)調(diào)度的代碼是非常重要的。此外,了解操作系統(tǒng)內(nèi)核的工作原理以及與硬件交互的方式也是必須的。 四、通信協(xié)議嵌入式系統(tǒng)通常需要與其他設(shè)備或系統(tǒng)
    發(fā)表于 08-06 10:34

    Linux嵌入式和單片機嵌入式的區(qū)別?

    Linux嵌入式與單片機嵌入式在多個方面存在顯著的區(qū)別,以下是詳細(xì)的比較和歸納: 一、基本概念 1. Linux嵌入式: 定義:將Linux操作系統(tǒng)運行在
    發(fā)表于 06-20 09:46

    運行在嵌入式系統(tǒng)的emApps

    在當(dāng)今快節(jié)奏的嵌入式系統(tǒng)世界中,靈活性和適應(yīng)性是嵌入式系統(tǒng)實現(xiàn)的關(guān)鍵。SEGGER推出了其最新創(chuàng)新:Embedded apps(emApps
    的頭像 發(fā)表于 06-18 09:53 ?1083次閱讀
    運行在<b class='flag-5'>嵌入式</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>上</b>的emApps
    宁波市| 东兴市| 阿坝| 临安市| 凌海市| 白银市| 塘沽区| 丹凤县| 马尔康县| 千阳县| 淮阳县| 信阳市| 崇明县| 安龙县| 旌德县| 漠河县| 桦南县| 惠州市| 望谟县| 织金县| 天祝| 大新县| 青神县| 白沙| 新宾| 大足县| 车险| 临湘市| 昌黎县| 西乌珠穆沁旗| 南投市| 芦溪县| 且末县| 修水县| 宝鸡市| 鄯善县| 宜良县| 深水埗区| 鄂州市| 鹤壁市| 巩留县|