串列埠傳送接收浮點型資料

2021-06-22 01:06:17 字數 971 閱讀 1609

最近正在除錯nrf24l01無線通行模組,由於要fpga與pc機相互通訊,pc機沒spi,所以要個開發板**,資料傳輸流程如下:

上位機 <-> 串列埠 <-> arm開發板 <-> spi<->nrf24l01<->另乙個nrf24l01<->spi<->fpga開發板。

其中遇到乙個頭疼的問題是傳輸的都是浮點型數,但傳送接受的是unsigned char型。

float,佔4位元組,

包括符號位(1位,第31位),指數為(8位,-126~128,22~30位

),尾數字(23位,0~22位)

當時想出了兩種方案

(1)其實精度要求不高的話,直接把浮點數x100轉化成16位或32位整數,在拆分為unsigned char型別發過去,在接收後合併,並強制轉化為float在除以100.(不太好放棄)

(2)直接把float資料拆分為4個unsigned char,發過去,在合併為float。

我使用方案(2),其中有兩點要注意。

(1)大端儲存,小段儲存;如果搞錯讀取資料就不是你接收的資料位址(我主要使用了fpga,arm以及pc機,很有可能儲存方式不同,一般可能不需要考慮)

(2)字對齊

。不然就合併不成float(我先前沒注意直接乙個很怪異的資料)

方法如下:

(1)傳送端

void package_frame(const void *data)

}

將float data

資料拆分成uchar後儲存在陣列

send_frame

傳送。(2)接收端

float exchange_data(uchar *data)

將uchar *data首位址付給float_data來合併成float型資料(記得字對齊和大小端儲存,不然資料不對)

其實發整數等大於1位元組的資料也一樣。

串列埠傳送和接收訊息

stm32f4開發板搭載乙個usb串列埠,2個rs232串列埠,部落格內容介紹usb串列埠和電腦通訊 步驟 1 串列埠和io口使能 rcc apb2periphclockcmd rcc apb2periph usart1,enable rcc ahb1periphclockcmd rcc ahb1p...

C 串列埠除錯 傳送接收

串列埠接收 private long receive count 0 接收位元組計數 public static serialport serialport1 newserialport public static stringbuilder sb newstringbuilder 為了避免在接收處...

串列埠通訊中整型和浮點型資料的處理和傳送

在做下位機通訊時往往會用到串列埠,包括下位機將資料傳輸給上位機,或者是下位機與下位機之間進行資料傳輸,這時候就會遇到傳送資料的問題,微控制器通過串列埠 傳送資料時往往是一次乙個位元組 8位 如果傳輸char 8位 型資料則很好辦,只需要直接傳送就可以了,但是在傳送int型資料和float型資料時 就...