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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1340|回復: 18
打印 上一主題 下一主題
收起左側

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

  [復制鏈接]
跳轉到指定樓層
樓主
這幾天正看串口,雖然能勉強編程,但還是理解不徹底。串口數據發送格式如圖:有請高手說下,接收方是如何區分起始位和數據0的?停止位和1是如何區分的?空閑時數據線上是高電平,如果發送FF,會出現8個1,會不會識別為空閑?謝謝大家。

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

IMG_20240907_152334.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

板凳
ID:227818 發表于 2024-9-8 16:31 | 只看該作者
huashanhui20 發表于 2024-9-7 22:10
串口通信中,首先最重要的是波特率,收發雙方約定多少時間為一個bit位,然后空閑是高電平,當接收方收到一 ...

是的,波特率最重要,波特率要設定相同,關鍵是如何確定起始位,就是收到一個0后,如何確定這個是0還是起始位,也就是說如何定義發一個字節結束,知道一個字節結束后,再來一個0,就可以認為是起始位,不會是連續的10個高電平后來的0是起始位吧,我曾用示波器觀察過連續發數據時的波形,發完一個字節后的空閑時間很短,也就是一個BIT多點,然后就是起始位了。
回復

使用道具 舉報

地板
ID:786521 發表于 2024-9-8 19:39 | 只看該作者
首先,開始數據傳輸之前,雙方會約定一個傳輸速率,即我們所說的波特率;在不同時鐘的主機和從機中,主機都需要計數n次以達到一個波特率的傳輸時間。如果所使用的uart協議中規定起始位為低電平,停止位為高電平,數據位長度固定為8bit,停止位1bit,那么接受方就會偵測起始位,并且在每個計數周期進行一次數據采樣,直到停止位。
回復

使用道具 舉報

5#
ID:624769 發表于 2024-9-8 21:51 | 只看該作者
你對"位"這個字怎么理解?
既然叫"起始位", 那么這個位置自然就是固定的0, 既然叫"停止位"那么這個位置就是固定的1,和數據位的0/1所在位置不同,如何會無法區分呢? 發送FF 也好 發送00也好,始終都是要由起始位開始的,既然開始了,怎么會認為是空閑呢?
回復

使用道具 舉報

6#
ID:227818 發表于 2024-9-9 09:02 | 只看該作者
188610329 發表于 2024-9-8 21:51
你對"位"這個字怎么理解?
既然叫"起始位", 那么這個位置自然就是固定的0, 既然叫"停止位"那么這個位置就是 ...

我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別為起始位,開始收數據,那沒有問題。如果上電的一瞬間,電路電平不穩定,或者電路出了問題,比如說傳輸過程中出現干擾,甚至斷路,然后又連接上了,這個時候肯定會出現亂碼,如果雙方不重現確認一次起始位,會一直亂下去嗎?
回復

使用道具 舉報

7#
ID:192020 發表于 2024-9-9 09:08 | 只看該作者
newlined 發表于 2024-9-8 16:31
是的,波特率最重要,波特率要設定相同,關鍵是如何確定起始位,就是收到一個0后,如何確定這個是0還是起 ...

既然叫起始位那第一位收到的就是起始位,第二位收到的才是0
回復

使用道具 舉報

8#
ID:161164 發表于 2024-9-9 09:22 | 只看該作者
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿
當收到下降沿就開始定時掃描(如9600,就是104us)
掃描8次之后,就完成一次通信
結束位也不是一個位
只是用來回復高電平,為下一個起始位(下降沿)作準備
回復

使用道具 舉報

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

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

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

總之,在實際應用中,你只需要按照所使用的通信協議來正確配置串口參數即可,硬件會自動處理起始位和停止位的識別與使用。如果你正在編寫驅動程序或底層固件,則需要理解這些位是如何工作的,并確保你的代碼正確地實現了這些位的生成和檢測。
回復

使用道具 舉報

10#
ID:227818 發表于 2024-9-9 11:10 | 只看該作者
qq475878026 發表于 2024-9-9 09:08
既然叫起始位那第一位收到的就是起始位,第二位收到的才是0

第二位開始應該收到的是數據了
回復

使用道具 舉報

11#
ID:227818 發表于 2024-9-9 11:12 | 只看該作者
lkc8210 發表于 2024-9-9 09:22
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿

是的,應是檢測下降沿,問題是收到1后,再收到0,也是先收到一個下降沿。
回復

使用道具 舉報

12#
ID:1109793 發表于 2024-9-9 19:24 | 只看該作者
newlined 發表于 2024-9-9 09:02
我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別 ...

我的理解是發送一個0,告訴對方我要發東西了,約定了波特率就定義了每個信號的寬度,從第一個0開始,每隔一個寬度時間記錄一個信號,直到8(9)個信號接完了就算一組信號完成了。后面的持續的高電平就告訴接收端本次結束了,用來復位接收用的計數器。中間有干擾當然就是錯誤的數據了。所以才有校驗啊,校驗不對就扔掉數據重新等待下次的。
回復

使用道具 舉報

13#
ID:384109 發表于 2024-9-9 23:09 | 只看該作者
沒學過數字電路和通訊吧,這個是按時間采樣數據的
回復

使用道具 舉報

14#
ID:283954 發表于 2024-9-10 02:53 | 只看該作者
newlined 發表于 2024-9-9 09:02
我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別 ...

如果數據不斷傳送,當然就一直亂下去,直到最少出現一個字節的停頓,這時全是高電位,停止位也已收到,等再接到一個低電位,就表示是起始位,又再同步了。
回復

使用道具 舉報

15#
ID:227818 發表于 2024-9-10 10:27 | 只看該作者
@xiaobendan001,“后面的持續的高電平就告訴接收端本次結束了,用來復位接收用的計數器”我的困惑歸根到底就是接收方如何判斷一個字節的接受完成,您這句話提醒了我,接收方是不是不定時強制復位接受計數器,比如每當收到10個位的1時,這時肯定是空閑狀態,強制復位接受計數器,然后再收到低電平,則開始計數,接收數據,接收完一個字節,復位接受計數器,然后再收到低電平則認為是下一字節的起始位,連續收到持續的高電平,再強制復位一次,確保下一次正確識別起始位?
回復

使用道具 舉報

16#
ID:227818 發表于 2024-9-10 11:10 | 只看該作者
lkc8210 發表于 2024-9-9 09:22
以我理解
不要把起始位當作一個位
用的到的只是那一個下降沿

也許我有些明白了,您說的對,不要把起始位當作一個位,用的到的只是那一個下降沿,接收方收到這個下降沿,馬上開始計數,相當于每接收一個字節的數據,就同步一次時鐘,時鐘不會出現累計的誤差,這就是稱為異步傳輸的原因?
回復

使用道具 舉報

17#
ID:227818 發表于 2024-9-10 11:52 | 只看該作者
dalaoshi 發表于 2024-9-10 02:53
如果數據不斷傳送,當然就一直亂下去,直到最少出現一個字節的停頓,這時全是高電位,停止位也已收到,等 ...

對的,應該是這樣,當出現亂碼后,直到出現一個字節的停頓,然后才重新開始,8樓lkc8210 老師說過:不要把起始位當作一個位,用的到的只是那一個下降沿,也就是接收方收到這個下降沿,定時器開始跑,計數,相當于每接收一個字節就同步一次,所以一般不會出現邏輯錯誤,前幾天我算過,串口接收方定時器的溢出速率是串口波特率的4倍,正好在中間采樣一次。
回復

使用道具 舉報

18#
ID:1059013 發表于 2024-9-10 13:09 | 只看該作者
newlined 發表于 2024-9-9 09:02
我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別 ...

對,這些問題正是編程時要考慮及規避的
回復

使用道具 舉報

19#
ID:624769 發表于 2024-9-12 19:26 | 只看該作者
newlined 發表于 2024-9-9 09:02
我的意思是如何定義一次傳輸的開始,如果雙方都認為是閑置狀態,那么發送方發出一個低電平,接收方會識別 ...

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久精品免费看国产小宝寻花 | 午夜精品久久久久久久久久久久久 | 成人啊啊啊 | 精品国产一区二区在线 | 亚洲狠狠 | 久久久久久高潮国产精品视 | 精品粉嫩超白一线天av | 亚洲区中文字幕 | 亚洲一区| 欧美一区二区 | 亚洲社区在线 | 亚洲一区二区av在线 | 91精品一区二区三区久久久久久 | 成人综合伊人 | 欧美午夜精品久久久久久浪潮 | 久久久一区二区三区 | 二区在线视频 | 日韩网| 亚洲欧洲成人av每日更新 | 成人深夜福利在线观看 | 久久久久久久av麻豆果冻 | 第一区在线观看免费国语入口 | 亚洲国产高清高潮精品美女 | 91九色porny首页最多播放 | 成人免费在线小视频 | 伊人久久在线 | 国产成都精品91一区二区三 | 国产成视频在线观看 | 日韩免费视频 | 啪啪av| 亚洲乱码一区二区三区在线观看 | 久久精品一级 | 日韩精品福利 | 中文字幕中文字幕 | 97视频人人澡人人爽 | 欧美成人综合 | 欧美在线综合 | 一级高清视频 | 欧美一级片在线观看 | 一本一道久久a久久精品综合蜜臀 | 国内精品久久久久久影视8 最新黄色在线观看 |