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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機初學者提問:請問串口中斷函數的最長時間怎么算?

  [復制鏈接]
跳轉到指定樓層
樓主
比如有一串數據傳過來,字節和字節之前無時間間隔,我應該控制我的串口中斷函數運行時間在多少以內才能使下一個數據能正常被接收,是1/baud嗎。
另外還有個問題,如果晶振頻率算出來的串口中斷時間有浮點數誤差,那么接收一個字節后,下一個字節的起始位不會相對變短產生誤差嗎?如果是的話怎么解決?
附圖:

Snipaste_2023-08-23_01-52-06.png (10.57 KB, 下載次數: 50)

產生了漂移

產生了漂移
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1091773 發表于 2023-8-23 02:30 | 只看該作者
比如說晶振頻率是12MHz
回復

使用道具 舉報

板凳
ID:1091773 發表于 2023-8-23 02:59 | 只看該作者
另外,如果晶振頻率是11.0592MHz的話,雖然除盡了,但是誤差是不是在持續積累呢?我想問這種誤差積累到什么程度會出錯誤,另外,如何計算誤差。
回復

使用道具 舉報

地板
ID:1091773 發表于 2023-8-23 03:00 | 只看該作者
謝謝各位大佬的回復了
回復

使用道具 舉報

5#
ID:213173 發表于 2023-8-23 07:59 | 只看該作者
Kankanxi 發表于 2023-8-23 02:59
另外,如果晶振頻率是11.0592MHz的話,雖然除盡了,但是誤差是不是在持續積累呢?我想問這種誤差積累到什么 ...

1.一幀數據至少包含起始位、數據位、結束位。連續接收一串數據,串口中斷周期就是接收一幀數據的時間,中斷函數運行時間必須小于或遠小于中斷周期。否則會丟失數據或不能及時處理數據。
2.異步通訊天然存在頻率和相位誤差,只要誤差在可控范圍就不會有問題。每一幀的起始位信號就相當于修正一次誤差。不存在積累誤差一說。
回復

使用道具 舉報

6#
ID:16848 發表于 2023-8-23 08:14 | 只看該作者
你好。串行數據無論是發送或是接收過程中,每個位每個字節是有間隔的。波特率的定義就是----串行口每秒鐘發送或是接收的二進制的位數,就叫這個串口的波特率。特別是在不定長數據傳輸過程中,兩個字節的間隔超過一定值,就認為是這一組數據傳輸完畢!
回復

使用道具 舉報

7#
ID:1061404 發表于 2023-8-23 08:19 | 只看該作者
接收到數據觸發中斷,32和51是這樣,什么情況下中斷要靠計算時間才能進入?
回復

使用道具 舉報

8#
ID:752974 發表于 2023-8-23 08:37 | 只看該作者
UART是異步通信,無特殊情況下,一幀數據是10bit,傳輸時間只跟波特率相關。幀與幀之間的間隔時間不一定是相同的,會受到其它中斷的影響。
回復

使用道具 舉報

9#
ID:277550 發表于 2023-8-23 09:48 | 只看該作者
硬件串口,只管中斷、接收。
回復

使用道具 舉報

10#
ID:123289 發表于 2023-8-23 11:30 | 只看該作者
樓主的想法是對的,的確如此:
實際上:A向B串行通訊時,是允許波特率有誤差的。
1、每幀,A會先發起始脈沖,而后再發數據。對方B會據此脈沖的邊沿,進行同步,再依據自己波特率,每間隔一個周期,下載一位數據,由于兩方存在周期誤差(波特率誤差),積累N位后,必然會發生錯位現象。
2、如果雙方波特率完全一致,這個N=∞,如果誤差太大,N會很小。
3、好在還未發生錯位時(下載的位數 < N),一幀就結束了,數據就不會出錯。
4、下一幀會重新同步,積累的誤差被清除重來。

硬件上通常采三取二。如你圖中所示,當積累誤達到30%寬度左右時(估計值),采樣箭頭會出界。
設A方=9600,B方=9640,誤差約=1-9640/9000 = 0.416%,即每個脈沖會移位(誤差前移或后移)0.4%。
當起始脈沖同步后,第幾個脈沖采樣會出界呢?
30% ÷ 0.416%  = 72,在第72個脈沖之后,采樣會出界而錯。
一個字節通常有:需要 11至13個脈沖(起始+數據+校驗+停止)。如此算來:即使5個字節不進行同步,也不會出錯。
以上是估算,并不是樓主所要的直接答案。
不過樓主可以以12個脈沖為界,估算出當頻率偏差多少時會出錯。
不過要注意:以上參數要以手冊上的數據為參考。這樣才準確一些。

手冊上會說明,當接到起始脈沖邊沿后多久會進行數據采樣(圖中的三個采樣脈沖),以及這三個采樣脈沖的間隔。這樣就計算得更準確一點了。
也有一次采樣就認定的(以手冊上說的為準)。
這些主要定義允許誤差取多少?(極限是50%,保守取10%,上例取的是30%)。
回復

使用道具 舉報

11#
ID:1091773 發表于 2023-8-23 11:39 | 只看該作者
wulin 發表于 2023-8-23 07:59
1.一幀數據至少包含起始位、數據位、結束位。連續接收一串數據,串口中斷周期就是接收一幀數據的時間,中 ...

非常非常感謝您的回復。
但是我還是不太理解起始位修正誤差的說法,如果主機發送的數據幀和幀之間無間隔(終止位緊接著起始位),又假設誤差較大,那么RI置位有可能發生在第一個幀的終止位的后段,甚至第二個幀的起始位的前段,這樣的話,單片機開始檢測rxd跳變的時間不就在第二個幀的起始位中前段嗎,第二個幀的起始位這一比特時間不就縮短了嗎,如此一來,當發送的幀特別多,不就會出問題嗎。
本人大一剛剛開始入門,實驗條件可能不足,暫時在家沒有各種電子儀器實測信號,如果問題太過繁瑣簡單,還請多多諒解。
回復

使用道具 舉報

12#
ID:1091773 發表于 2023-8-23 12:01 | 只看該作者
yzwzfyz 發表于 2023-8-23 11:30
樓主的想法是對的,的確如此:
實際上:A向B串行通訊時,是允許波特率有誤差的。
1、每幀,A會先發起始脈 ...

非常非常感謝您的耐心回復。
請問幀和幀之間一般都存在停止位嗎?即使是連續發送的數據。
我主要是不太理解第四步,即起始位修正誤差的問題。如果幀和幀之間沒有停止位的間隔,我不理解誤差是如何消除的。如果主機發送的數據幀和幀之間無間隔(終止位緊接著起始位),又假設誤差較大,那么RI置位有可能發生在第一個幀的終止位的后段,甚至第二個幀的起始位的前段,這樣的話,單片機開始檢測rxd跳變的時間不就在第二個幀的起始位中前段嗎,第二個幀的起始位這一比特時間不就縮短了嗎,如此一來,當發送的幀特別多,不就會出問題嗎。
本人大一剛剛開始自學入門,暫時在家沒有各種電子儀器實測信號,如果問題太過繁瑣簡單,還請多多諒解。
回復

使用道具 舉報

13#
ID:884147 發表于 2023-8-23 12:25 | 只看該作者
主要是和波特率有關。比如9600波特率,最短字節間距大約1mS有足夠的時間存入緩存,并等待接收下一字節。具體起始停止位那是硬件的事
回復

使用道具 舉報

14#
ID:883242 發表于 2023-8-23 16:17 | 只看該作者
樓主明顯對停止位理解有誤,停止位只是插入一個固定的間隔時間,只是時間概念,并不存在實際的數據位。發送端要發送固定停止位時間,接收端并不檢測停止位,只檢測起始位。就算兩端波特率有誤差,累積到停止位就算完事兒,從起始位開始從零開始累積。
回復

使用道具 舉報

15#
ID:624769 發表于 2023-8-23 17:11 | 只看該作者
波特率誤差  只要小于 2%  就可以忽略,不會影響傳輸。

起始位的作用,就是用來對齊的,所以,“誤差累計” 是不存在的。

停止位,在實際通信的過程中,尤其是目標設備為單片機時,是可以不存在的,即大多時候,你發送完停止位之后,可以立刻發送起始位。
但是,在設備傳輸需求中又是普遍存在的,比如某設備要求2位停止位,代表他 每接受完一個字節數據后,必須有 兩個位的間隔才能繼續接收下一個字節。通常出現在性能比較差的 老設備中。
回復

使用道具 舉報

16#
ID:1073939 發表于 2023-8-23 17:26 | 只看該作者
串口通訊到底有沒有累積誤差?對時鐘精度到底有何要求?_串口誤差容忍_liuxd3000的博客-CSDN博客  https://blog.csdn.net/liuxd3000/article/details/128396918

波特率誤差,上面鏈接講得很清楚了。下面的回答基于波特率為9600,1位停止位,無校驗的情形。
第1個問題:
單串口收到一字節數據時,只要在小于10/baud(約1.04ms)時間取出,就不會影響下一字節接收。很多單片機有串口緩存,這時間等于10/baud*(緩存數量+1),例如新唐的m0有16字節收發緩存。只要在17.7mS內處理不會出錯。
第2個問題:
只要收發波特率的偏差小于4.5%,就不會有問題。任意數量的數據通訊都不會有問題。
回復

使用道具 舉報

17#
ID:1091773 發表于 2023-8-24 15:27 | 只看該作者
感謝各位的解答,各位講的都對我有所幫助
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久蜜桃资源一区二区老牛 | 91久久久精品国产一区二区蜜臀 | 国产一区二区三区在线观看免费 | 成在线人视频免费视频 | 午夜噜噜噜| 精品一区二区三 | 国产91精品在线 | 日韩精品久久久 | 亚洲国产精品一区二区三区 | 伊人精品久久久久77777 | 99久久精品国产麻豆演员表 | 欧美二区三区 | 午夜精品久久久久久久久久久久久 | 99re在线视频 | 三级高清 | 涩在线 | 精品久久久久一区 | 国产欧美精品区一区二区三区 | 国产精品久久久免费 | 中文字幕欧美一区 | 日日爱夜夜操 | 亚洲成人网在线观看 | 一区二区伦理电影 | 亚洲国产精品一区二区第一页 | 欧美不卡一区 | 国产亚洲网站 | 亚洲激精日韩激精欧美精品 | 91精品国产乱码麻豆白嫩 | 一区二区三区在线看 | 91久久国产综合久久91精品网站 | 综合久久av| 欧美aaaa视频 | 精品综合网 | 欧美mv日韩mv国产网站91进入 | 人人草天天草 | 欧美精品一区二区三区在线 | 久久成人免费观看 | 国产一级黄色网 | 区一区二区三在线观看 | 国产最新视频在线 | 日韩欧美国产一区二区 |