stm32中串列埠一次最多能接受幾位資料? 一直弄不明白上位機為什麼傳送一串字串給下位機都能收到,
1樓:
串列埠都是一次接一組資料,具體是幾位要看你設定的比如9600 n,8,1那樣是8個資料位,1個起始位,1個停止位(起始和停止位是晶元接收部分自己判斷的)
之所以發一組都能收到是因為stm32(其實51也一樣的,不信你可以試試)執行速度要遠大於串列埠傳送資料的速度。比如9600波特率,就是1秒鐘發9600個位(bit)這樣按n,8,1算的話是10個位(bit)是1個位元組(加起始和停止位,還有8個資料位)也就是1秒鐘傳送960個8位資料。1/960=秒(傳送乙個位元組 而微控制器執行指令週期都是以us為單位的。
換算下來就是也是1040us了 按51微控制器1us執行乙個指令的話,接受乙個位元組的過程中,晶元可以執行1040個指令,完全可以運算處理完成在傳送回去。更何況是速度更高的stm32 的處理速度。
接收乙個位元組資料的時間,夠他完成n個複雜的運算處理。
主機板上的序列介面一次傳輸幾位二進位數
2樓:太平洋電腦網
1位。主機板上的序列介面傳輸的是資料位,資料一位一位的按順序傳送,最少只需一根傳輸線即可完成。電腦主機串列埠可以用於連線外接數據機、繪圖儀或序列印表機。
它也可以控制檯連線的方式連線網路裝置,例如路由器和交換機。
序列介面的傳輸上具有的特點是通訊線路簡單,只要一對傳輸線就可以實現雙向通訊(可以直接利用**線作為傳輸線),從而大大降低了鄭攔成本,特別適用於遠距離通訊,但傳送速度較慢。
序列介面的標準
序列介面按磨埋電氣標準及協議來分包括rs-232-c、rs-422、rs485等。
1、rs-232
rs-232採取不平衡傳輸方式,即所謂單端通訊。由於其傳送電平與接收電平的差僅為2v至3v左右,所以其共模抑制能力差,再加上雙絞線上的分佈電容,其傳送距離最大為約15公尺,最高速率為20kb/s。
2、rs-422
rs-422四線介面由於採用單獨的傳送和接收通道,因此不必控制資料方向,各裝置之間任何必須的訊號交換均可以按軟體方式(xon/xoff握手)或硬體方式(一對單獨的雙絞線)實現。rs-422的最大傳輸距離為1219公尺,最大傳輸速率為10mb/s。
3、rs-485
從rs-422基礎上發展而來的,rs-485可以採用二線與四線方式,二線制可實現真正的多點雙向通訊,採用四線連線時,與rs-422一樣只能實現點對多的通訊,即只能有乙個主(master)裝置,其餘為從裝置。
以上內容參喊遊胡考 百科-序列介面。
微控制器串列埠傳送的資料一直是00;求解
3樓:盤永芬方儀
由於你說的不詳細,也不知道你晶振。
是拆神物多少,微控制器是什麼型號,波特率。
是多少。也才旅液不清楚你微控制器串列埠的資料是否是一直有用的。我就大概說一下,你可以參考:
第一:如果串列埠的資料是在你需要的時候才有用,這樣你可以在需要的地方開啟串列埠中斷,在中斷中判斷接收的是不是所用串列埠資料的最後乙個位元組,如果是那麼就關閉中斷,如果不是那麼就就會繼續接收。這樣會提高串列埠和微控制器的工作效率。
第二:如果串列埠資料是必須接收的,那麼1樓和2樓瞎備所說的就不可以了,其實正常的處理中斷就可以了,只要注意中斷的優先順序。
就好。串列埠處理佔用的時間其實不是你想的那麼多,我不防給你算一下:假設波特率是9600b/s,晶振8m,至於微控制器什麼型別就不去假設了,畢竟太多了。
串列埠資料8b乙個位元組,那麼9600的波特率1s傳播的次數也就是9600b/s/8b每次=1200次每秒,這個能理解吧。那麼中斷的時間間隔也就是1s/1200次每秒=。再看微控制器的處理速度,8m晶振(不算大吧),執行每條指令的時間基本上是1s/8m=,(就算是51微控制器。
處理週期是晶振週期的12倍,那每條指令的時間週期也不過是1點幾微秒,通過資料你看,一次中斷微控制器能處理上千條指令,所以不會出現你想的它只是在接收資料,其他什麼也許不幹的情況。你所要做的就是如果有其他中斷,處理好中斷的優先順序,哪些中斷重要,需要優先處理之類的事情即可。
你不會存在誤區吧,認為一直有資料,就一直在中斷中吧,它接收是乙個位元組乙個位元組的。乙個位元組一中斷。
樓上說的定時器你還是不要考慮了,需要多少次數不定,處理定時器中斷後還要在處理串列埠,耽誤的時間會更多。而且可靠性不高,串列埠一直傳輸資料的專案我做過,正常處理就不會出問題。
微控制器怎樣通過串列埠向計算機傳送資料
4樓:塞一瑾和茗
微控制器可以實現與計算機的傳送和接收。首先,要正確配置微控制器的串列埠,包括波特率、使用時鐘源、com口、資料位位數、奇偶校驗位、停止位位數等,同時要保證計算機的配置和微控制器的一致。然後,把要傳送的資料送到傳送快取,只能乙個位元組乙個位元組的傳送。
啟動微控制器傳送,就可以完成傳送操作。如果開啟接收中斷,計算機傳送資料過來的時候,就會進入到接收中斷,微控制器進入接收資料狀態。
要注意的是,微控制器是ttl電平,而計算機是232電平,所以在硬體電路連線上要有電平轉換晶元,常用的有max232等。
5樓:鈄靜珊少銳
可以傳送,接收!開啟後,設定相應的埠號,資料位數,停止位,波特率,效驗在設定上要與微控制器的設定一致,否則會有通訊問題!如果不使用串列埠助手,也。
請教乙個微控制器8位串列埠傳送的問題
6樓:智趣派
由於你把8位的所有位數都用作表示數字,所以導致255以內的數和255以上的數無法分開。
這個問題的關鍵是怎麼讓電腦知道你什麼時候發的數字是8位的,什麼時候發的數字是16位拆成兩個8位的對吧!
我這裡說乙個方法吧!你可以把8位全一作為乙個判斷符,如果電腦受到乙個全一的字元,那麼接受到的下兩個位元組就進行拼接。
例如需要傳送254,那麼直接傳送乙個位元組即可。
如果傳送255,可以這樣:
先傳送 11111111
然後傳送 00000000 11111111這樣拼接得到255
如果是傳送 1024,可以這樣:
先傳送 11111111
然後傳送 00000100 00000000當然,這樣可能傳輸效率有所降低,但也不會太差!
7樓:下一秒笑靨如花
乙個位元組乙個位元組的發唄,比方說你先發高位元組的微控制器接收並存放在30h中,延遲一會再發低位元組的存放在31h中,到時候在微控制器中用的時候你只要記住30h中放的是高位元組,31h中放的是低位元組就行了。
當然啦你需要在微控制器接收完第乙個位元組的資料後將ri清零,再傳送下乙個位元組。
8樓:網友
int_h = 原變數/100
int_l = 原變數%100
這樣就把原來的16位數變成了兩個8位數。
就可以正常傳送了。
到了微控制器以後再定義乙個long型的。
long = int_h*100+int_l搞定收工。
9樓:做而論道
正確的說法是:uart(通用非同步序列通訊介面)傳送的一幀資料,是8位二進位數。
利用這種介面,可以傳送8的任意整數倍位數的資料。
51微控制器程式設計問題(串列埠很難將資料傳送至上位機)
10樓:矮子根
首先,串列埠波特率2400,作為串列埠波特率**的定時器1計數方式2初值應為0xf4;而你的初裝值。
為0xfd,且pcon中最高位又設定為1,那麼波特率實為19200,其次,pcon=0x80為波特率倍增設定,故而19200又倍增為38400。這已遠遠超出了51微控制器的頻。
率範圍,第三,雖然設定了串列埠方式1(t1控波),但未設定串列埠中斷(ti)。所以當傳送完乙個字元後,cpu並未產生中斷訊號,無法判斷是否已傳送完畢 ,故而持續等待中斷的發生,造成時間上的佔用,延緩了傳送速度。
51微控制器串列埠傳送資料,51微控制器串列埠同時傳送文字和資料
程式採用了查詢copy式傳送,for i 0 i 6 i 共發bai送了6個字元。再去查詢收到否du。這種方法zhi,就是有問題的,發 dao送6個字元時,就可能收到了好幾個字元,而沒有及時儲存,完全可能丟失資訊。應該採用中斷方式接收 傳送,也可以用查詢,也可以用中斷。方法弄清楚了,程式就容易編寫 ...
51微控制器串列埠問題 傳送位元組 為什麼串列埠除錯軟體連續接收 下附程式
兩個錯誤復。while ti ti 0 這是一個。制while ti 後面少一個分bai號!變成了,du原本正確的程式是想讓zhiti 1的時候,把daoti清零,但是你現在變成了 當ti為0的時候執行ti 0,而當ti變成1的時候卻反而不執行ti 0了,因此每次傳送完成一個字元以後,ti的值沒有清...
51微控制器與vb通過串列埠通訊,微控制器為什麼只能傳送0至
傳送大數,你只能多次傳送,一次只能傳送一幀,而串列埠傳送的一幀可能是7 8 9位,由你設定而定。51微控制器是8位的,一次只能處理8位資料,也就是一個位元組,一個位元組只能表示0 255的大小的資料。一個位元組確實只能是0 255,但你可以連續發兩個位元組然後在vb裡面組成一個大於255的數。比如發...