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

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

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

UART數(shù)據(jù)丟失可能原因

嵌入式應(yīng)用開發(fā) ? 來源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-09-28 15:56 ? 次閱讀

1、接收溢出丟失數(shù)據(jù)
指未及時(shí)取走數(shù)據(jù)導(dǎo)致溢出錯(cuò)誤而丟失數(shù)據(jù),通常是發(fā)生在大量數(shù)據(jù)、以查詢方式接收數(shù)據(jù)的情況下。在MCU啟動(dòng)過程中、接收數(shù)據(jù)過多處理不及時(shí)、復(fù)雜系統(tǒng)響應(yīng)不及時(shí)等情況都會(huì)出現(xiàn)數(shù)據(jù)丟失的情況。
解決辦法:

  • 及時(shí)清除溢出錯(cuò)誤標(biāo)志
  • 利用通信協(xié)議過濾因數(shù)據(jù)丟失導(dǎo)致的問題

2、接收中斷丟失數(shù)據(jù)

使用UART中斷接收數(shù)據(jù)相比查詢接收數(shù)據(jù)的方式更常見,中斷方式比查詢方式響應(yīng)更及時(shí),但不合理處理同樣也會(huì)存在數(shù)據(jù)丟失的情況。

在數(shù)據(jù)量大時(shí),UART接收中斷函數(shù)耗時(shí)、優(yōu)先級(jí)低等情況下容易丟失數(shù)據(jù)。

解決辦法:

  • 中斷函數(shù)里減少不必要的耗時(shí)
  • 合理分配中斷優(yōu)先級(jí)
  • 使能中斷前清除標(biāo)志位

3、時(shí)鐘誤差導(dǎo)致丟失數(shù)據(jù)

在通信波特率較高的情況下,如果時(shí)鐘誤差加大,很可能導(dǎo)致數(shù)據(jù)丟失。

解決辦法:

  • 使用更高精度晶振
  • 降低通信波特率

UART發(fā)送丟失數(shù)據(jù)

UART發(fā)送丟失數(shù)據(jù)很多工程師都遇到過,通常情況下是傳輸未完成的原因。
HAL庫(kù)已經(jīng)有幾年了,但還是有很多工程師都使用標(biāo)準(zhǔn)外設(shè)庫(kù),這時(shí)如果自己封裝接口不當(dāng),就會(huì)存在發(fā)送最后一字節(jié)數(shù)據(jù)丟失的問題。

1、UART傳輸未完成導(dǎo)致數(shù)據(jù)丟失
如下代碼,只考慮非空,但實(shí)際傳輸并未完成。

void UART_SendByte(uint8_t Data)

不過,發(fā)送非空不代表發(fā)送完成,雖然在某些場(chǎng)合更高效,但某些場(chǎng)合就會(huì)導(dǎo)致數(shù)據(jù)丟失。

比如:

使用此函數(shù)發(fā)送之后進(jìn)入休眠、關(guān)閉接收端設(shè)備電源等情況下。

解決辦法:

  • 等待發(fā)送完成
void UART_SendByte(uint8_t Data)

如果使用標(biāo)準(zhǔn)外設(shè)庫(kù),要根據(jù)實(shí)際情況封裝函數(shù),比如發(fā)送超時(shí)。

或者使用HAL封裝的接口,代碼包含判斷傳輸完成:

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

2、線路延時(shí)導(dǎo)致數(shù)據(jù)丟失

UART通常會(huì)使用232或者485以增加傳輸距離和增強(qiáng)干擾。但是一旦數(shù)據(jù)線路太長(zhǎng)就存在傳輸延時(shí)的情況,特別是485傳輸長(zhǎng)距離,并使用MCU控制傳輸方向的情況下。

解決辦法:

  • 軟件增加延時(shí)處理
  • 使用通信協(xié)議增加應(yīng)答機(jī)制

3、其他原因

UART應(yīng)用的場(chǎng)景比較多,有些應(yīng)用在復(fù)雜的工廠,干擾較大從而導(dǎo)致數(shù)據(jù)丟失;有些應(yīng)用在溫差較大的環(huán)境,時(shí)鐘偏移較大導(dǎo)致數(shù)據(jù)丟失。

解決辦法需要根據(jù)實(shí)際情況,有針對(duì)性解決問題。比如:使用更好的通信線,軟件做好容錯(cuò)處理等。

pYYBAGMz_iiAGMfrAALKJSGmGHg128.png  


審核編輯:湯梓紅


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

    關(guān)注

    146

    文章

    16885

    瀏覽量

    349914
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6808

    瀏覽量

    88743
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1219

    瀏覽量

    101118
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    EEPROM數(shù)據(jù)丟失原因與對(duì)策

    EEPROM數(shù)據(jù)丟失原因與對(duì)策
    發(fā)表于 11-25 20:32

    求單片機(jī)數(shù)據(jù)丟失原因

    STC單片機(jī)的EEPROM中存儲(chǔ)的數(shù)據(jù)會(huì)丟失,想知道丟失的原理;還有J-LINK固件丟失原因
    發(fā)表于 02-27 12:38

    請(qǐng)問6657upp丟失數(shù)據(jù)可能是什么原因導(dǎo)致?

    求教! 在FPGA和DSP使用Upp傳輸數(shù)據(jù)的時(shí)候,F(xiàn)PGA給DSP發(fā)送數(shù)據(jù),出現(xiàn)DSP丟失數(shù)據(jù)的情況。比如FPGA發(fā)送數(shù)據(jù)從0到1000,
    發(fā)表于 07-24 09:54

    UART可能性會(huì)導(dǎo)致數(shù)據(jù)丟失嗎?

    ){ ... HAL_UART_Receive_IT(&huart, Rx_data, 1);}我想知道,是否有可能在實(shí)際接收和再次啟動(dòng)中斷的(接收完成)回調(diào)之后丟失字節(jié)?;蛘呒僭O(shè)上面的中斷處理程序太短,
    發(fā)表于 09-21 11:30

    工控電腦使用中的“這些”原因會(huì)造成數(shù)據(jù)丟失,請(qǐng)勿忽視,歡迎補(bǔ)充

    ①用戶的錯(cuò)誤操作。由于用戶錯(cuò)誤操作而導(dǎo)致數(shù)據(jù)丟失的情況,在數(shù)據(jù)丟失的主要原因中所占比例很大。用戶極小的疏忽都可能造成
    發(fā)表于 12-10 15:17

    芯片大批量生產(chǎn)時(shí)發(fā)現(xiàn)部分芯片flash里面數(shù)據(jù)丟失,可能是什么原因導(dǎo)致的?

    芯片大批量生產(chǎn)時(shí)發(fā)現(xiàn)部分芯片flash里面數(shù)據(jù)丟失可能是什么原因導(dǎo)致的?
    發(fā)表于 07-22 06:10

    EEPROM數(shù)據(jù)丟失原因分析

    本內(nèi)容介紹眾多EEPROM數(shù)據(jù)丟失原因
    發(fā)表于 05-24 11:35 ?102次下載
    EEPROM<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>丟失</b><b class='flag-5'>原因</b>分析

    UART 發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)

    STM32 UART 發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)
    發(fā)表于 12-04 15:10 ?0次下載

    Flash數(shù)據(jù)丟失原因

    芯片貼板后跑不起來?Flash里面的數(shù)據(jù)在使用過程中莫名改變或不翼而飛?程序丟失可能無法正常運(yùn)行,從而造成整個(gè)系統(tǒng)崩潰,下面我們來看看是什么原因數(shù)
    發(fā)表于 10-13 20:31 ?11次下載
    Flash<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>丟失</b>的<b class='flag-5'>原因</b>

    關(guān)于UART發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)問題的詳細(xì)解析-pdf

    STM32 UART_發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)
    發(fā)表于 04-10 11:23 ?3次下載

    工控機(jī)數(shù)據(jù)丟失原因及解決方法

    在我們使用工控機(jī)的時(shí)候,偶爾會(huì)發(fā)生系統(tǒng)數(shù)據(jù)丟失的情況,這是因?yàn)槭裁?b class='flag-5'>原因呢?下面我們就來講一講工控機(jī)數(shù)據(jù)發(fā)生的原因以及解決方法。
    發(fā)表于 06-30 16:48 ?3245次閱讀

    探析STM32上UART丟失的那一字節(jié)數(shù)據(jù)

    STM32上UART狀態(tài)寄存器中的幾個(gè)標(biāo)志位:TXE、TC、RXNE、ORE。這幾個(gè)標(biāo)志位在編程中經(jīng)常使用,數(shù)據(jù)丟失可能就是對(duì)它們操作不當(dāng)而導(dǎo)致出錯(cuò)。
    的頭像 發(fā)表于 12-19 15:36 ?3358次閱讀

    UART發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié)

    電子發(fā)燒友網(wǎng)站提供《UART發(fā)送數(shù)據(jù)丟失最后一個(gè)字節(jié).pdf》資料免費(fèi)下載
    發(fā)表于 08-01 17:57 ?1次下載
    <b class='flag-5'>UART</b>發(fā)送<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>丟失</b>最后一個(gè)字節(jié)

    有三種可能原因會(huì)導(dǎo)致信號(hào)丟失

    有三種可能原因會(huì)導(dǎo)致信號(hào)丟失? 近年來,隨著智能手機(jī)、平板電腦等移動(dòng)設(shè)備的廣泛普及,人們對(duì)于移動(dòng)通信的需求也愈加強(qiáng)烈。不論是手機(jī)打電話、發(fā)短信,還是使用移動(dòng)網(wǎng)絡(luò)上網(wǎng)、視頻通話等操作,信號(hào)都是
    的頭像 發(fā)表于 10-30 09:21 ?2018次閱讀

    ROM數(shù)據(jù)丟失的常見原因

    的常見原因 1. 硬件故障 1.1 物理損壞 ROM芯片可能因?yàn)槲锢頉_擊、高溫、濕度、腐蝕等因素而損壞。這些因素可能導(dǎo)致芯片內(nèi)部電路斷裂或短路,從而造成數(shù)據(jù)
    的頭像 發(fā)表于 11-04 10:29 ?133次閱讀