久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 關于串行通信的起始位和停止位識別問題請教大家 [打印本頁]

作者: newlined    時間: 2024-9-7 15:38
標題: 關于串行通信的起始位和停止位識別問題請教大家
這幾天正看串口,雖然能勉強編程,但還是理解不徹底。串口數據發送格式如圖:有請高手說下,接收方是如何區分起始位和數據0的?停止位和1是如何區分的?空閑時數據線上是高電平,如果發送FF,會出現8個1,會不會識別為空閑?謝謝大家。

IMG_20240907_152334.jpg (504.16 KB, 下載次數: 6)

IMG_20240907_152334.jpg

作者: huashanhui20    時間: 2024-9-7 22:10
串口通信中,首先最重要的是波特率,收發雙方約定多少時間為一個bit位,然后空閑是高電平,當接收方收到一個起始位(也就是符合一個bit位的低電平)就可以認為是一幀數據,至于后面的8個數據位只要符合0的時長就認為是0,符合1就認為是1,如果發送FF它也不會認為是空閑,因為有起始位0是低電平
作者: newlined    時間: 2024-9-8 16:31
huashanhui20 發表于 2024-9-7 22:10
串口通信中,首先最重要的是波特率,收發雙方約定多少時間為一個bit位,然后空閑是高電平,當接收方收到一 ...

是的,波特率最重要,波特率要設定相同,關鍵是如何確定起始位,就是收到一個0后,如何確定這個是0還是起始位,也就是說如何定義發一個字節結束,知道一個字節結束后,再來一個0,就可以認為是起始位,不會是連續的10個高電平后來的0是起始位吧,我曾用示波器觀察過連續發數據時的波形,發完一個字節后的空閑時間很短,也就是一個BIT多點,然后就是起始位了。
作者: shuas_Hu    時間: 2024-9-8 19:39
首先,開始數據傳輸之前,雙方會約定一個傳輸速率,即我們所說的波特率;在不同時鐘的主機和從機中,主機都需要計數n次以達到一個波特率的傳輸時間。如果所使用的uart協議中規定起始位為低電平,停止位為高電平,數據位長度固定為8bit,停止位1bit,那么接受方就會偵測起始位,并且在每個計數周期進行一次數據采樣,直到停止位。
作者: 188610329    時間: 2024-9-8 21:51
你對"位"這個字怎么理解?
既然叫"起始位", 那么這個位置自然就是固定的0, 既然叫"停止位"那么這個位置就是固定的1,和數據位的0/1所在位置不同,如何會無法區分呢? 發送FF 也好 發送00也好,始終都是要由起始位開始的,既然開始了,怎么會認為是空閑呢?
作者: newlined    時間: 2024-9-9 09:02
188610329 發表于 2024-9-8 21:51
你對"位"這個字怎么理解?
既然叫"起始位", 那么這個位置自然就是固定的0, 既然叫"停止位"那么這個位置就是 ...

我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別為起始位,開始收數據,那沒有問題。如果上電的一瞬間,電路電平不穩定,或者電路出了問題,比如說傳輸過程中出現干擾,甚至斷路,然后又連接上了,這個時候肯定會出現亂碼,如果雙方不重現確認一次起始位,會一直亂下去嗎?
作者: Graves    時間: 2024-9-9 09:08
newlined 發表于 2024-9-8 16:31
是的,波特率最重要,波特率要設定相同,關鍵是如何確定起始位,就是收到一個0后,如何確定這個是0還是起 ...

既然叫起始位那第一位收到的就是起始位,第二位收到的才是0
作者: lkc8210    時間: 2024-9-9 09:22
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿
當收到下降沿就開始定時掃描(如9600,就是104us)
掃描8次之后,就完成一次通信
結束位也不是一個位
只是用來回復高電平,為下一個起始位(下降沿)作準備

作者: Athath    時間: 2024-9-9 10:46
在串行通信(通常稱為串口通信)中,數據是以一連串的比特流形式發送的。為了確保接收端能夠正確地解析這些比特流,通信協議規定了一些特殊的位來同步收發雙方的數據傳輸過程。其中,起始位(Start Bit)和停止位(Stop Bit)就是這樣的標志位。

起始位(Start Bit)
起始位是一個邏輯低電平(0),用來標識一個字符幀的開始。
在空閑狀態下,串行線路上通常保持高電平(邏輯1)。當線路從高電平轉變為低電平時,接收方就知道一個新的字符即將到達。
起始位之后跟著的是數據位,即實際要傳輸的信息。
停止位(Stop Bit)
停止位是一個或多個邏輯高電平(1),用來標識一個字符幀的結束。
停止位可以是1位、1.5位或者2位長度,這取決于通信雙方的約定。
發送完數據位后,發送方會發送停止位,告知接收方該字符幀已經結束。
如何區分
實際上,在硬件層面上,起始位和停止位是通過電平的變化來自動檢測的,并不需要用戶手動去區分它們。硬件(如微控制器中的UART接口)根據預先設置好的配置(例如波特率、數據位數、奇偶校驗位、停止位數等)自動處理這些位。

在編程配置串口通信時,你需要設定好起始位、數據位、奇偶校驗位以及停止位的具體參數。例如,在大多數情況下,起始位始終是一個低電平位,而停止位是一個或多個高電平位。這些參數的選擇會影響到數據傳輸的可靠性。

總之,在實際應用中,你只需要按照所使用的通信協議來正確配置串口參數即可,硬件會自動處理起始位和停止位的識別與使用。如果你正在編寫驅動程序或底層固件,則需要理解這些位是如何工作的,并確保你的代碼正確地實現了這些位的生成和檢測。
作者: newlined    時間: 2024-9-9 11:10
qq475878026 發表于 2024-9-9 09:08
既然叫起始位那第一位收到的就是起始位,第二位收到的才是0

第二位開始應該收到的是數據了
作者: newlined    時間: 2024-9-9 11:12
lkc8210 發表于 2024-9-9 09:22
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿

是的,應是檢測下降沿,問題是收到1后,再收到0,也是先收到一個下降沿。
作者: xiaobendan001    時間: 2024-9-9 19:24
newlined 發表于 2024-9-9 09:02
我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別 ...

我的理解是發送一個0,告訴對方我要發東西了,約定了波特率就定義了每個信號的寬度,從第一個0開始,每隔一個寬度時間記錄一個信號,直到8(9)個信號接完了就算一組信號完成了。后面的持續的高電平就告訴接收端本次結束了,用來復位接收用的計數器。中間有干擾當然就是錯誤的數據了。所以才有校驗啊,校驗不對就扔掉數據重新等待下次的。
作者: 人中狼    時間: 2024-9-9 23:09
沒學過數字電路和通訊吧,這個是按時間采樣數據的
作者: dalaoshi    時間: 2024-9-10 02:53
newlined 發表于 2024-9-9 09:02
我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別 ...

如果數據不斷傳送,當然就一直亂下去,直到最少出現一個字節的停頓,這時全是高電位,停止位也已收到,等再接到一個低電位,就表示是起始位,又再同步了。
作者: newlined    時間: 2024-9-10 10:27
@xiaobendan001,“后面的持續的高電平就告訴接收端本次結束了,用來復位接收用的計數器”我的困惑歸根到底就是接收方如何判斷一個字節的接受完成,您這句話提醒了我,接收方是不是不定時強制復位接受計數器,比如每當收到10個位的1時,這時肯定是空閑狀態,強制復位接受計數器,然后再收到低電平,則開始計數,接收數據,接收完一個字節,復位接受計數器,然后再收到低電平則認為是下一字節的起始位,連續收到持續的高電平,再強制復位一次,確保下一次正確識別起始位?
作者: newlined    時間: 2024-9-10 11:10
lkc8210 發表于 2024-9-9 09:22
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿

也許我有些明白了,您說的對,不要把起始位當作一個位,用的到的只是那一個下降沿,接收方收到這個下降沿,馬上開始計數,相當于每接收一個字節的數據,就同步一次時鐘,時鐘不會出現累計的誤差,這就是稱為異步傳輸的原因?
作者: newlined    時間: 2024-9-10 11:52
dalaoshi 發表于 2024-9-10 02:53
如果數據不斷傳送,當然就一直亂下去,直到最少出現一個字節的停頓,這時全是高電位,停止位也已收到,等 ...

對的,應該是這樣,當出現亂碼后,直到出現一個字節的停頓,然后才重新開始,8樓lkc8210 老師說過:不要把起始位當作一個位,用的到的只是那一個下降沿,也就是接收方收到這個下降沿,定時器開始跑,計數,相當于每接收一個字節就同步一次,所以一般不會出現邏輯錯誤,前幾天我算過,串口接收方定時器的溢出速率是串口波特率的4倍,正好在中間采樣一次。
作者: fishafish    時間: 2024-9-10 13:09
newlined 發表于 2024-9-9 09:02
我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別 ...

對,這些問題正是編程時要考慮及規避的
作者: 188610329    時間: 2024-9-12 19:26
newlined 發表于 2024-9-9 09:02
我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別 ...

你編寫過單片機代碼,并且使用串口, 應該會發現 如果程序沒有做特定處理,上電初期出現一兩個亂碼是很常見現象。
一但因為各種原因,出現誤判的起始位,必定會有亂碼,這時候,起始位和停止位的作用就體現出來了,亂碼最多不會超過8個字節。一定會糾正過來,如果自己編寫上下位機代碼,停止位長度擴大到8位,那么亂碼最多也就一個字節。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美精品一区二区三区蜜桃视频 | 色综合美女 | 亚洲精品日韩在线观看 | 99久久婷婷国产亚洲终合精品 | 国产亚洲精品久久久久动 | 国产精品久久久久久久久久三级 | 久久国产精品久久久久久 | 一区二区小视频 | 伊人精品国产 | 国产精品永久久久久 | 中文字字幕一区二区三区四区五区 | 亚洲人成人一区二区在线观看 | 成人影院在线观看 | 精品无码三级在线观看视频 | 中文字幕亚洲一区二区三区 | 黄色网址免费在线观看 | 美女爽到呻吟久久久久 | 亚洲精品自拍视频 | 天堂在线www | 欧美日韩一区二区电影 | 亚洲综合大片69999 | 国产精品久久久久久久7电影 | 一级做a爰片性色毛片 | 欧美一区二区免费视频 | 成人小视频在线观看 | 日韩一区和二区 | 亚洲高清中文字幕 | 欧美成人a | 午夜免费视频 | 久久99精品久久久 | 在线一区视频 | 久久久久九九九女人毛片 | 噜噜噜噜狠狠狠7777视频 | 成人亚洲 | 97超碰站 | 97色在线观看免费视频 | 九色视频网站 | 天天澡天天操 | 国产精品一区二 | 日日操夜夜操天天操 | 精品国产色 |