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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

關(guān)于串行通信的起始位和停止位識別問題請教大家

查看數(shù): 1736 | 評論數(shù): 18 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2024-9-7 15:38

正文摘要:

這幾天正看串口,雖然能勉強編程,但還是理解不徹底。串口數(shù)據(jù)發(fā)送格式如圖:有請高手說下,接收方是如何區(qū)分起始位和數(shù)據(jù)0的?停止位和1是如何區(qū)分的?空閑時數(shù)據(jù)線上是高電平,如果發(fā)送FF,會出現(xiàn)8個1,會不會識別 ...

回復

ID:624769 發(fā)表于 2024-9-12 19:26
newlined 發(fā)表于 2024-9-9 09:02
我的意思是如何定義一次傳輸?shù)拈_始,如果雙方都認為是閑置狀態(tài),那么發(fā)送方發(fā)出一個低電平,接收方會識別 ...

你編寫過單片機代碼,并且使用串口, 應該會發(fā)現(xiàn) 如果程序沒有做特定處理,上電初期出現(xiàn)一兩個亂碼是很常見現(xiàn)象。
一但因為各種原因,出現(xiàn)誤判的起始位,必定會有亂碼,這時候,起始位和停止位的作用就體現(xiàn)出來了,亂碼最多不會超過8個字節(jié)。一定會糾正過來,如果自己編寫上下位機代碼,停止位長度擴大到8位,那么亂碼最多也就一個字節(jié)。
ID:1059013 發(fā)表于 2024-9-10 13:09
newlined 發(fā)表于 2024-9-9 09:02
我的意思是如何定義一次傳輸?shù)拈_始,如果雙方都認為是閑置狀態(tài),那么發(fā)送方發(fā)出一個低電平,接收方會識別 ...

對,這些問題正是編程時要考慮及規(guī)避的
ID:227818 發(fā)表于 2024-9-10 11:52
dalaoshi 發(fā)表于 2024-9-10 02:53
如果數(shù)據(jù)不斷傳送,當然就一直亂下去,直到最少出現(xiàn)一個字節(jié)的停頓,這時全是高電位,停止位也已收到,等 ...

對的,應該是這樣,當出現(xiàn)亂碼后,直到出現(xiàn)一個字節(jié)的停頓,然后才重新開始,8樓lkc8210 老師說過:不要把起始位當作一個位,用的到的只是那一個下降沿,也就是接收方收到這個下降沿,定時器開始跑,計數(shù),相當于每接收一個字節(jié)就同步一次,所以一般不會出現(xiàn)邏輯錯誤,前幾天我算過,串口接收方定時器的溢出速率是串口波特率的4倍,正好在中間采樣一次。
ID:227818 發(fā)表于 2024-9-10 11:10
lkc8210 發(fā)表于 2024-9-9 09:22
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿

也許我有些明白了,您說的對,不要把起始位當作一個位,用的到的只是那一個下降沿,接收方收到這個下降沿,馬上開始計數(shù),相當于每接收一個字節(jié)的數(shù)據(jù),就同步一次時鐘,時鐘不會出現(xiàn)累計的誤差,這就是稱為異步傳輸?shù)脑颍?/td>
ID:227818 發(fā)表于 2024-9-10 10:27
@xiaobendan001,“后面的持續(xù)的高電平就告訴接收端本次結(jié)束了,用來復位接收用的計數(shù)器”我的困惑歸根到底就是接收方如何判斷一個字節(jié)的接受完成,您這句話提醒了我,接收方是不是不定時強制復位接受計數(shù)器,比如每當收到10個位的1時,這時肯定是空閑狀態(tài),強制復位接受計數(shù)器,然后再收到低電平,則開始計數(shù),接收數(shù)據(jù),接收完一個字節(jié),復位接受計數(shù)器,然后再收到低電平則認為是下一字節(jié)的起始位,連續(xù)收到持續(xù)的高電平,再強制復位一次,確保下一次正確識別起始位?
ID:283954 發(fā)表于 2024-9-10 02:53
newlined 發(fā)表于 2024-9-9 09:02
我的意思是如何定義一次傳輸?shù)拈_始,如果雙方都認為是閑置狀態(tài),那么發(fā)送方發(fā)出一個低電平,接收方會識別 ...

如果數(shù)據(jù)不斷傳送,當然就一直亂下去,直到最少出現(xiàn)一個字節(jié)的停頓,這時全是高電位,停止位也已收到,等再接到一個低電位,就表示是起始位,又再同步了。
ID:384109 發(fā)表于 2024-9-9 23:09
沒學過數(shù)字電路和通訊吧,這個是按時間采樣數(shù)據(jù)的
ID:1109793 發(fā)表于 2024-9-9 19:24
newlined 發(fā)表于 2024-9-9 09:02
我的意思是如何定義一次傳輸?shù)拈_始,如果雙方都認為是閑置狀態(tài),那么發(fā)送方發(fā)出一個低電平,接收方會識別 ...

我的理解是發(fā)送一個0,告訴對方我要發(fā)東西了,約定了波特率就定義了每個信號的寬度,從第一個0開始,每隔一個寬度時間記錄一個信號,直到8(9)個信號接完了就算一組信號完成了。后面的持續(xù)的高電平就告訴接收端本次結(jié)束了,用來復位接收用的計數(shù)器。中間有干擾當然就是錯誤的數(shù)據(jù)了。所以才有校驗啊,校驗不對就扔掉數(shù)據(jù)重新等待下次的。
ID:227818 發(fā)表于 2024-9-9 11:12
lkc8210 發(fā)表于 2024-9-9 09:22
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿

是的,應是檢測下降沿,問題是收到1后,再收到0,也是先收到一個下降沿。
ID:227818 發(fā)表于 2024-9-9 11:10
qq475878026 發(fā)表于 2024-9-9 09:08
既然叫起始位那第一位收到的就是起始位,第二位收到的才是0

第二位開始應該收到的是數(shù)據(jù)了
ID:1131614 發(fā)表于 2024-9-9 10:46
在串行通信(通常稱為串口通信)中,數(shù)據(jù)是以一連串的比特流形式發(fā)送的。為了確保接收端能夠正確地解析這些比特流,通信協(xié)議規(guī)定了一些特殊的位來同步收發(fā)雙方的數(shù)據(jù)傳輸過程。其中,起始位(Start Bit)和停止位(Stop Bit)就是這樣的標志位。

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

在編程配置串口通信時,你需要設(shè)定好起始位、數(shù)據(jù)位、奇偶校驗位以及停止位的具體參數(shù)。例如,在大多數(shù)情況下,起始位始終是一個低電平位,而停止位是一個或多個高電平位。這些參數(shù)的選擇會影響到數(shù)據(jù)傳輸?shù)目煽啃浴?br />
總之,在實際應用中,你只需要按照所使用的通信協(xié)議來正確配置串口參數(shù)即可,硬件會自動處理起始位和停止位的識別與使用。如果你正在編寫驅(qū)動程序或底層固件,則需要理解這些位是如何工作的,并確保你的代碼正確地實現(xiàn)了這些位的生成和檢測。
ID:161164 發(fā)表于 2024-9-9 09:22
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿
當收到下降沿就開始定時掃描(如9600,就是104us)
掃描8次之后,就完成一次通信
結(jié)束位也不是一個位
只是用來回復高電平,為下一個起始位(下降沿)作準備
ID:192020 發(fā)表于 2024-9-9 09:08
newlined 發(fā)表于 2024-9-8 16:31
是的,波特率最重要,波特率要設(shè)定相同,關(guān)鍵是如何確定起始位,就是收到一個0后,如何確定這個是0還是起 ...

既然叫起始位那第一位收到的就是起始位,第二位收到的才是0
ID:227818 發(fā)表于 2024-9-9 09:02
188610329 發(fā)表于 2024-9-8 21:51
你對"位"這個字怎么理解?
既然叫"起始位", 那么這個位置自然就是固定的0, 既然叫"停止位"那么這個位置就是 ...

我的意思是如何定義一次傳輸?shù)拈_始,如果雙方都認為是閑置狀態(tài),那么發(fā)送方發(fā)出一個低電平,接收方會識別為起始位,開始收數(shù)據(jù),那沒有問題。如果上電的一瞬間,電路電平不穩(wěn)定,或者電路出了問題,比如說傳輸過程中出現(xiàn)干擾,甚至斷路,然后又連接上了,這個時候肯定會出現(xiàn)亂碼,如果雙方不重現(xiàn)確認一次起始位,會一直亂下去嗎?
ID:624769 發(fā)表于 2024-9-8 21:51
你對"位"這個字怎么理解?
既然叫"起始位", 那么這個位置自然就是固定的0, 既然叫"停止位"那么這個位置就是固定的1,和數(shù)據(jù)位的0/1所在位置不同,如何會無法區(qū)分呢? 發(fā)送FF 也好 發(fā)送00也好,始終都是要由起始位開始的,既然開始了,怎么會認為是空閑呢?
ID:786521 發(fā)表于 2024-9-8 19:39
首先,開始數(shù)據(jù)傳輸之前,雙方會約定一個傳輸速率,即我們所說的波特率;在不同時鐘的主機和從機中,主機都需要計數(shù)n次以達到一個波特率的傳輸時間。如果所使用的uart協(xié)議中規(guī)定起始位為低電平,停止位為高電平,數(shù)據(jù)位長度固定為8bit,停止位1bit,那么接受方就會偵測起始位,并且在每個計數(shù)周期進行一次數(shù)據(jù)采樣,直到停止位。
ID:227818 發(fā)表于 2024-9-8 16:31
huashanhui20 發(fā)表于 2024-9-7 22:10
串口通信中,首先最重要的是波特率,收發(fā)雙方約定多少時間為一個bit位,然后空閑是高電平,當接收方收到一 ...

是的,波特率最重要,波特率要設(shè)定相同,關(guān)鍵是如何確定起始位,就是收到一個0后,如何確定這個是0還是起始位,也就是說如何定義發(fā)一個字節(jié)結(jié)束,知道一個字節(jié)結(jié)束后,再來一個0,就可以認為是起始位,不會是連續(xù)的10個高電平后來的0是起始位吧,我曾用示波器觀察過連續(xù)發(fā)數(shù)據(jù)時的波形,發(fā)完一個字節(jié)后的空閑時間很短,也就是一個BIT多點,然后就是起始位了。
ID:878061 發(fā)表于 2024-9-7 22:10
串口通信中,首先最重要的是波特率,收發(fā)雙方約定多少時間為一個bit位,然后空閑是高電平,當接收方收到一個起始位(也就是符合一個bit位的低電平)就可以認為是一幀數(shù)據(jù),至于后面的8個數(shù)據(jù)位只要符合0的時長就認為是0,符合1就認為是1,如果發(fā)送FF它也不會認為是空閑,因為有起始位0是低電平

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧洲毛片 | 日本xx视频免费观看 | 亚洲经典一区 | 亚洲精品中文字幕 | 欧美久久天堂 | 韩日精品在线观看 | 台湾佬伊人 | 国产一区二区日韩 | 国产成人精品免费 | 91网站视频在线观看 | 成人福利在线 | 国际精品鲁一鲁一区二区小说 | 三级视频在线观看 | 欧美视频日韩 | 国产免费一区二区 | 欧美日高清视频 | 亚洲精品一区二区三区中文字幕 | 欧美一区二区激情三区 | 亚洲成人日韩 | 成av在线 | 视频一区二区在线 | 99色综合 | 美国黄色毛片 | 欧美视频免费在线 | 视频在线一区二区 | 九九九久久国产免费 | 毛片a级毛片免费播放100 | 日韩一区二区在线视频 | 亚洲精品久久久久久国产精华液 | 激情视频网站 | 午夜99| 成人一区二区三区在线观看 | 欧美一区二区三区高清视频 | av网站在线免费观看 | 久久av一区二区三区 | 香蕉视频91 | 国产福利91精品一区二区三区 | 欧美日韩成人在线观看 | 天天射天天干 | 在线观看免费av网站 | 久在线观看 |