色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

串口幾種常見丟失數據的問題

strongerHuang ? 來源:嵌入式專欄 ? 2023-02-21 09:21 ? 次閱讀

我們通常說的串口,一般指UART(Universal Asynchronous Receiver / Transmitter),通用異步收發傳輸器。

串口是工程師最常用的一種串行外設,但在實際應用中還是會經常遇到各種問題。比如:丟失一字節數據。

今天我們就結合STM32來講講UART相關內容,以及容易丟失一字節數據的問題。

UART幾個標志位

這里重點說一下UART狀態寄存器中的幾個標志位:TXE、 TC、 RXNE、 ORE。

6e72110c-b184-11ed-bfe3-dac502259ad0.png

這幾個標志位在編程中經常使用,數據丟失有可能就是對它們操作不當而導致出錯。

TXE:發送數據寄存器為空 (Transmit data register empty)

0:數據未傳輸到移位寄存器

1:數據傳輸到移位寄存器

TC:發送完成 (Transmission complete)

0:傳送未完成

1:傳送已完成

RXNE:讀取數據寄存器不為空 (Read data register not empty)

0:未接收到數據

1:已準備好讀取接收到的數據

ORE:上溢錯誤 (Overrun error)

0:無上溢錯誤

1:檢測到上溢錯誤

UART通信接口

UART常見通信接口有:TTL、 RS232RS485。在編程時需要考慮通信接口方式,在長距離通信的時候,需要考慮線路上的延時,如果操作不當也會導致數據丟失。 1.TTL

TTL比較簡單,就是直接連接UART的Tx和Rx引腳,不需要外部轉換。如圖:

6ead74b8-b184-11ed-bfe3-dac502259ad0.png

注意:Tx和Rx引腳需要交叉連接。

2.RS232

RS-232標準接口是常用的串行通信接口標準之一,規定邏輯“1”的電平為-5V~-15 V,邏輯“0”的電平為+5 V~+15 V。選用該電氣標準的目的在于提高抗干擾能力,增大通信距離。

3.RS485

RS485一般采用兩線制接線方式,這種接線方式為總線式拓撲結構,在同一總線上可以掛接多個節點。

在低速、短距離、無干擾的場合可以采用普通的雙絞線;反之,在高速、長線傳輸時,則必須采用阻抗匹配(一般為120Ω)的RS485專用電纜;而在干擾惡劣的環境下還應采用鎧裝型雙絞屏蔽電纜。

6ee49966-b184-11ed-bfe3-dac502259ad0.jpg

UART接收丟失數據

UART接收丟失數據與軟件和硬件都有可能有關系,下面說幾個常見丟失數據的原因及解決辦法。

1.接收溢出丟失數據

指未及時取走數據導致溢出錯誤而丟失數據,通常是發生在大量數據、以查詢方式接收數據的情況下。在MCU啟動過程中、接收數據過多處理不及時、復雜系統響應不及時等情況都會出現數據丟失的情況。

解決辦法:

及時清除溢出錯誤標志

利用通信協議過濾因數據丟失導致的問題

2.接收中斷丟失數據

使用UART中斷接收數據相比查詢接收數據的方式更常見,中斷方式比查詢方式響應更及時,但不合理處理同樣也會存在數據丟失的情況。

在數據量大時,UART接收中斷函數耗時、優先級低等情況下容易丟失數據。

解決辦法:

中斷函數里減少不必要的耗時

合理分配中斷優先級

使能中斷前清除標志位

3.時鐘誤差導致丟失數據

在通信波特率較高的情況下,如果時鐘誤差加大,很可能導致數據丟失。

解決辦法:

使用更高精度晶振

降低通信波特率

UART發送丟失數據

UART發送丟失數據很多工程師都遇到過,通常情況下是傳輸未完成的原因。

HAL庫已經有幾年了,但還是有很多工程師都使用標準外設庫,這時如果自己封裝接口不當,就會存在發送最后一字節數據丟失的問題。

1.UART傳輸未完成導致數據丟失

如下代碼,只考慮非空,但實際傳輸并未完成。

void UART_SendByte(uint8_t Data)

{

while(RESET == USART_GetFlagStatus(USART1, USART_FLAG_TXE));

USART_SendData(USART1, Data);

}

但發送非空不代表發送完成,雖然在某些場合更高效,但某些場合就會導致數據丟失。

比如:使用此函數發送之后進入休眠、關閉接收端設備電源等情況下。

解決辦法:

等待發送完成:

void UART_SendByte(uint8_t Data)

{

while(RESET == USART_GetFlagStatus(USART1, USART_FLAG_TXE));

USART_SendData(USART1, Data);

while(RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC));

}

如果使用標準外設庫,要根據實際情況封裝函數,比如發送超時。

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

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

2.線路延時導致數據丟失

UART通常會使用232或者485以增加傳輸距離和增強干擾。但是一旦數據線路太長就存在傳輸延時的情況,特別是485傳輸長距離,并使用MCU控制傳輸方向的情況下。

解決辦法:

軟件增加延時處理

使用通信協議增加應答機制

3.其他原因

UART應用的場景比較多,有些應用在復雜的工廠,干擾較大從而導致數據丟失;有些應用在溫差較大的環境,時鐘偏移較大導致數據丟失。

解決辦法需要根據實際情況,有針對性解決問題。比如:使用更好的通信線,軟件做好容錯處理等。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5356

    瀏覽量

    120565
  • 串口
    +關注

    關注

    14

    文章

    1555

    瀏覽量

    76612
  • uart
    +關注

    關注

    22

    文章

    1238

    瀏覽量

    101461

原文標題:串口幾種常見丟失數據的問題

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    介紹了關于RAID5系統發生數據丟失常見問題

    本文介紹了關于RAID5系統發生數據丟失常見問題,同時提醒大家,如果你的系統出現了數據丟失,沒有把握的情況下不要再對該系統輕舉妄動,以免錯
    的頭像 發表于 02-07 09:07 ?1.4w次閱讀

    串口發送的這幾種寫法,你用過幾種

    串口發送的這幾種寫法,你用過幾種
    的頭像 發表于 11-02 16:20 ?1090次閱讀
    <b class='flag-5'>串口</b>發送的這<b class='flag-5'>幾種</b>寫法,你用過<b class='flag-5'>幾種</b>?

    【求助】串口定時發送數據丟失

    labview通過串口發送數據,定時循環1ms,通過示波器測量發送出來的數據有大量丟失,求高手幫忙看一下怎么解決示波器測得的數據
    發表于 12-04 17:14

    串口發送數據超過十個數據就出現數據丟失

    自己編寫的程序,給串口1發送數據,然后串口1再發回主機,但是出現個問題,只能發十個數據,超過十個就出現數據
    發表于 01-29 07:35

    如何解決串口輸出數據丟失問題

    SerialChart測試,發現數據經常丟失,或者出現一個很大的數(明顯超出ADC的輸出范圍)。可初步斷定,是串口輸出部分出了問題。調試得出的結果很簡單,但一開始走了很多彎路,如下:
    發表于 07-23 08:28

    UCOS串口丟失數據怎么解決?

    大家好,在下也沒用過幾次UCos,同樣一塊板子我用LL函數庫調試出來的串口串口只接受數據,不發送,發送10000+次,數據都沒丟失的現象;
    發表于 05-25 04:36

    串口循環發送數據時,數據丟失的原因?

    請問原子哥用串口循環發送數據時為什么會有數據丟失
    發表于 07-08 06:05

    常見數據定義偽指令有哪幾種

    常見數據定義偽指令有哪幾種?啟動代碼作用一般是什么?
    發表于 11-29 06:17

    怎樣去使用串口空閑中斷避免數據丟失

    STM32的串口中斷標記中有哪幾種?基于CubeMx生成的HAL庫代碼該如何去實現呢?怎樣去使用串口空閑中斷避免數據丟失呢?
    發表于 12-09 07:59

    STM32串口數據的接收與發送處理的幾種模式分別是哪些

    STM32串口發送數據為什么會丟失呢?怎樣去解決?STM32串口數據的接收與發送處理的幾種模式分
    發表于 12-10 07:37

    stm32串口首次發送數據丟失的原因?怎么解決?

    stm32串口首次發送數據丟失的原因?怎么解決?
    發表于 12-13 07:15

    如何解決STM32串口輸出數據丟失問題?

    如何解決STM32串口輸出數據丟失問題?
    發表于 12-13 06:07

    串口中斷丟失數據問題

    關于51單片機,串口中斷發送與接收出現數據丟失問題串口中斷的接收器具有雙緩沖結構,即在從接收寄存器中讀出前一個已收到的字節之前,便能接收第2個字節,如果第2個字節已經接收完畢,第1個字
    發表于 02-17 00:13 ?3593次閱讀

    串口屏的幾種安裝方式

    串口屏的幾種安裝方式
    的頭像 發表于 05-10 11:28 ?1577次閱讀

    ROM數據丟失常見原因

    常見原因 1. 硬件故障 1.1 物理損壞 ROM芯片可能因為物理沖擊、高溫、濕度、腐蝕等因素而損壞。這些因素可能導致芯片內部電路斷裂或短路,從而造成數據丟失。 1.2 老化 隨著時間的推移,ROM芯片會逐漸老化,其性能會逐漸
    的頭像 發表于 11-04 10:29 ?828次閱讀
    主站蜘蛛池模板: 拔萝卜在线高清观看视频| 国产精品资源网站在线观看| 亚洲免费va在线观看| 办公室丝袜老师在线观看| 老司机福利在视频在ae8| 伊人激情综合网| 寂寞夜晚在线视频观看| 亚洲AV无码乱码国产麻豆穿越| 91精品乱码一区二区三区| 高清国语自产拍免费| 寂寞夜晚在线视频观看| 亚洲色t图| 扒开美女下面粉嫩粉嫩冒白浆| 蜜芽国产在线精品欧美| 亚洲AV久久无码精品国产网站 | 娇妻被朋友玩得呻吟在线电影 | 色综合 亚洲 自拍 欧洲| 中文免费视频| 狂操空姐电影| ass女人下部欣赏| 久久久97丨国产人妻熟女| 夜色福利院在线看| 久久三级网站| 晓雪老师我要进你里面好爽| 国产精品久久久久影院色老大| 男同志video最新猛男| 99久久99久久久精品齐齐鬼色 | 丰满的大白屁股ass| 先锋资源久久| 精品国产99久久久久久麻豆| 中文字幕精品AV内射夜夜夜| 欧美高清69vivo| 国产精品久久高潮呻吟无码| 亚洲欧美精品无码一区二在线| 老师你奶真大下面水真多| 扒开老师大腿猛进AAA片软件| 我和黑帮老大第365天第2季在线| 狠狠插综合| 亚洲精品一区三区三区在线观看| 久久99r66热这里有精品| 亚洲伊人色|