導航:首頁 > 數據處理 > 串口接收什麼類型數據

串口接收什麼類型數據

發布時間:2023-11-04 22:46:14

① 串口發送與接收數據

使用RS-485串口進行通訊。
1.定義串口接收數據的緩沖區,最大可以保存64個位元組 u8 RS485_RX_BUF1[64];
2.定義接收發送數據的長度 u8 RS485_RX_CNT;
3.發送數據的函數一般有兩個printf和 USART_SendData,這里主要說USART_SendData的使用。printf實現的是格式化字元串,字元串比較有優勢。
USART_SendData傳遞單個字元和指令。
4.給發送方定義一個標記位 u32 flags_send1; flags_send1

5.要發送的事件很多定義一個枚舉類型的數據,將所有要發送的事件放入枚舉類型數據中。

枚舉類型數據將第一個定為1,其他的數據依次加1.
6.定義一個發送事件函數SendCmd(u8 cmd)

定義

7.假設要傳遞E_CKEYDN_INUSE1事件,要實現事件的傳遞,就應該將事件做參數傳入SendCmd(u8 cmd)函數
此時flags_send1 |= EBIT(9)=;由第四點知道flags_send1是一個32位的無符號整型數據。所以 flags_send1 = 0000 0000 0000 0000 0000 0001 1111 1111
8.(1)UARTSend1()函數

此時的flags_send1 = 0000 0000 0000 0000 0000 0001 1111 1111;
sb[2] = (flags_send1 >> 0) & 0xff = 1111 1111;
sb[3] = (flags_send1 >> 8) & 0xff = 0000 0001;
sb[4] = (flags_send1 >> 16) & 0xff = 0000 0000;
sb[5] = (flags_send1 >> 24) & 0xff = 0000 0000;
(2)checksum()函數

d0=(senddata >> 0) & 0xff=0000 0001 1111 1111;
d1=(senddata >> 8) & 0xff=0000 0001 & 0xff=0000 0000 0000 0001;
d2=(senddata >> 16) & 0xff=0000 0000 & 0xff = 0000 0000 0000 0000;
d3=(senddata >> 24) & 0xff=0000 0000 & 0xff = 0000 0000 0000 0000;
sum=0000 0010 0000 0000;
~sum=1111 1101 1111 1111;
sb[6] = (sum >> 0) &0xff = 1111 1111 & 0xff = 1111 1111 ;
sb[7] = (sum >> 8) &0xff = 1111 1101;
(3)
為什麼定義sb[8]的前兩位是0x55,0xaa?

0xaa是1010 1010,0x55是0101 0101在通訊編碼原理中,應該避免過多的重復0或者1,因為當傳輸變成一個長0/1時,一個脈沖干擾就會將數據截斷,增加誤碼的概率。若通訊機不能接受10101010或者01010101,那麼就是線路出現問題。這是一個判斷線路狀態的手段。

9.串口1接收數據
(1)通過UARTRead1()函數實現

receive += (RS485_RX_BUF1[2] << 0) = 0000 0000 0000 0000 0000 0000 1111 1111; ;
receive += (RS485_RX_BUF1[3] << 8) = 0000 0000 0000 0000 0000 0001 1111 1111
receive += (RS485_RX_BUF1[4] << 16) = 0000 0000 0000 0000 0000 0001 1111 1111
receive += (RS485_RX_BUF1[5] << 24) = 0000 0000 0000 0000 0000 0001 1111 1111
(2)將receive傳入checksum(u32 senddata)函數中
d0= 0000 0000 1111 1111;
d1=0000 0000 0000 0001
d2= 0000 0000 0000 0000
d3=0000 0000 0000 0000
sum=0000 0001 0000 0000
~sum = 1111 1110 1111 1111
(3)定義接收數據標記位是 u32 flags_receive1;
通過判斷RS485_RX_BUF1[6] 、RS485_RX_BUF1是否等於 ((sum >> 0) & 0xff)、((sum >> 8) & 0xff))來判斷讀入的數據是不是正確的。
RS485_RX_BUF2[6] ==1111 1111
RS485_RX_BUF2[7] == 1111 1110
正確時
接收到的數據是flags_receive1 = receive= 0000 0000 0000 0000 0000 0001 1111 1111;
不正確時 flags_receive1 |= EBIT(E_ERROR); 接收數據標記位置為錯誤位。

閱讀全文

與串口接收什麼類型數據相關的資料

熱點內容
蘇州哪裡有核心技術 瀏覽:452
襄陽職業技術學院附近有什麼 瀏覽:881
nba有哪些令人驚艷的數據 瀏覽:665
纖伏代理怎麼樣 瀏覽:373
如何查看自己定向傭金產品 瀏覽:122
簡歷配偶信息怎麼寫 瀏覽:564
商貿代理怎麼做 瀏覽:63
hmi模具加工有哪些技術 瀏覽:55
完美蘆薈膠怎麼代理 瀏覽:439
合約交易避開8點能省多少手續費 瀏覽:448
人類目前缺什麼技術 瀏覽:431
警察與程序員哪個好 瀏覽:708
夢見臨時市場在哪裡 瀏覽:420
交易所流水是什麼 瀏覽:153
小程序代理怎麼找客 瀏覽:915
學電子技術專業的筆記本要什麼配置 瀏覽:809
特效生發產品有哪些 瀏覽:725
國產哪些技術不如國外 瀏覽:851
朝鮮生產什麼農產品 瀏覽:193
掛什麼號可以查到違章信息 瀏覽:435