串口發送浮點型數據及int(2個字節)long int(4個字節)的方法

2020-12-13 電子工程世界網

方法一:


直接把float數據拆分為4個unsigned char(由於數字沒法拆分,所以只能用指針的),發過去,在合併為float。


其中有兩點要注意。


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


 (2)字對齊。不然就合併不成float(我先前沒注意直接一個很怪異的數據)


發送端



void package_frame(const void *data)  

{  

    int i;  

    for(i=0; i<4; i++)  

    {  

        send_frame[i] = ((uchar *)data)[i];  

    }  

}  


將float data數據拆分成uchar後存儲在數組send_frame[]發送。




float exchange_data(uchar *data)  

{  

  

    float float_data;  

    float_data = *((float*)data);  

    return float_data;  

}  


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


 


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


方法二:


   讀取的adc數據寄存器的值不*3.3V(或5V)除以2的N次方,直接把這個數據發到上位機,在上位機程序裡再*3.3V除以2的N次方。


這樣就避免了傳遞浮點數的麻煩。


關鍵字:串口發送  浮點型數據  int  long 編輯:什麼魚 引用地址:http://news.eeworld.com.cn/mcu/article_2016121632401.html 本網站轉載的所有的文章、圖片、音頻視頻文件等資料的版權歸版權所有人所有,本站採用的非本站原創文章及圖片等內容無法一一聯繫確認版權者。如果本網所選內容的文章作者及編輯認為其作品不宜公開自由傳播,或不應無償使用,請及時通過電子郵件或電話通知我們,以迅速採取適當措施,避免給雙方造成不必要的經濟損失。

推薦閱讀

【STM32】HAL庫 STM32CubeMX教程十一---DMA (串口DMA發送接收)

。關於DMA的介紹我們僅介紹到這裡,如果需要更詳細的了解DMA原理 DMA寄存器以及庫函數 可以參考這篇文章《【STM32】 DMA原理,步驟超細詳解,一文看懂DMA》下面我們將介紹CubeMx 如何創建DMA具體流程如下:我們以USART1 的DMA傳輸為例工程創建1設置RCC設置高速外部時鐘HSE 選擇外部時鐘源2設置串口1點擊USATR12設置MODE為異步通信(Asynchronous)3基礎參數:波特率為115200 Bits/s。傳輸數據長度為8 Bit。奇偶檢驗無,停止位1 接收和發送都使能4GPIO引腳自動設置 USART1_RX/USART_TX5 NVIC Settings 一欄使能接收中斷關於串口部分的講解可以參考

發表於 2020-05-12

51單片機串口通信(字符串接收和發送)

1200bps//11.0592MHz 0xfa 9600bps//0xf4 11.0592MHz  0xf3 12MHz 4800bps//均在SMOD=1的情況下(波特率倍增模式)*******************************///串口發送函數void PutString(unsigned char *TXStr)  {                    ES=0;          while(*TXStr

發表於 2020-05-12

一個簡易的51單片機串口接收和發送程序

/*********************程序功能:接收上位機發過來的一個字符串,然後把該字符串發送給上位機,  字符串必須以!結尾**********************/#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit LED = P2^7;uchar flag = 0;uchar index = 0;uchar data c[100];void Delay_ms(uint n){ uchar i; while(n--)     for(i = 0;i

發表於 2020-05-12

STM8L101F3P6串口查詢發送

先說幾句,一直都沒有對STM8的串口應用進行總結,最近小結一下。STM8應用庫來開發,在基本的串口的應用上,我自己的理解現在還很不到位。我本以為STM8的串口也會有查詢發送、中斷發送、查詢接收、中斷接收這樣幾種方法呢~!可事實上我現在對於中斷發送這路模式還沒太搞明白,與51單片機的串口工作還是有區別的。STM8提供了發送中斷和發送完中斷,我自己的理解是,在發送時進入中斷和發送一個字節完成時進行中斷。這與我大腦中理解的串口中斷還是不一樣的,回頭要繼續把這裡搞明白。一般情況下,STM8的串口多數是用查詢發送,中斷接收,這樣來做。使用串口前要如下幾點:1.配置TX和RX的GPIO管腳狀態2.初始化串口,這裡要打開串口設備的時鐘,配置串口

發表於 2020-03-28

MSP430F247串口發送字符串並接受PC機發來的並送回電腦顯示

//******************************************************************************//   MSP430x24x Demo - USCI_A0, 9600 UART Echo ISR, DCO SMCLK////   實驗效果說明:首先發送一個數組的數據到PC,然後接受PC發送來的數據,在發送到//                  PC機上。//   Baud rate divider with 1MHz

發表於 2020-03-23

STM8 固件庫編寫 使用外部晶振串口通信時,發送是亂碼

因為我需要做9600波特率的串口通信,所以外部接的是11.0592MHz的晶振。時鐘初始化程序如下:void Clock_init()  {    CLK_DeInit();    CLK_HSECmd(ENABLE);  //啟用外部時鐘  while(SET!=CLK_GetFlagStatus(CLK_FLAG_HSERDY));  //等待外部時鐘啟動  CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);  //1分頻&nbsp

發表於 2020-03-08

相關焦點

  • 嵌入式系統串口傳輸int float型數據的處理
    在做嵌入式系統通信時往往會用到串口,包括嵌入式系統將數據傳輸給PC,或者是嵌入式系統之間進行數據傳輸,這時候就會遇到發送數據的問題。我們知道單片機通過串口發送數據時往往是一次一個字節(8位),如果傳輸char(8位)型數據則很好辦,只需要直接發送就可以了,但是在發送int型數據和float型數據時就會稍微有些複雜。
  • Arduino串口通信簡介
    2.清空串口緩存Serial.flush();   等待輸出數據傳送完畢,避免數據讀取錯誤。3.Serial.read()函數讀取串口緩存中的一個字符,並刪除已讀字符。4.Serial.print(); 說明串口輸出數據函數,寫入字符串數據到串口。
  • MSSQL數據類型-整數數據類型(bigint、int、smallint、tinyint)
    整數型數據包括bigint型、int型、bit、smallint型和tinyint型。 bigint型數據的存儲大小為8個字節,共64位。其中63位用於表示數值的大小,1位用於表示符號。因此,當 bigint值在int數據類型支持的範圍內時,SQL Server 才將 bigint隱式轉換為int。如果 bigint表達式包含了一個在int數據類型支持範圍之外的值,就會在運行時出現轉換錯誤。int型數據的存儲大小為4個字節,共32位。
  • mysql中bigint、int、mediumint、smallint 和 tinyint的取值範圍
    mysql資料庫設計,其中,對於數據性能優化,欄位類型考慮很重要,搜集了些資料,整理分享出來,這篇為有關mysql整型bigint、int、mediumint、smallint 和 tinyint的語法介紹,如下:1、bigint從 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807
  • 浮點型數據存儲方式分析
    在面試的過程中一般面試官也很少問關於浮點數的問題,因為浮點數對於很多的處理器是不支持的,對於上層應用的程式設計師而言,存儲類型的問題都會考慮,但是對於嵌入式程式設計師掌握內存的分配情況是必須的,只有這樣才能把握基本的操作,關於浮點型數據,在C語言中存在兩種類型的浮點型,其中一種是單精度的浮點型 (float)、雙精度的浮點型(double)。
  • arduino設置串口模式專題及常見問題 - CSDN
    默認SERIAL_8N1表示8個數據位,無校驗位,1個停止位。返回值:無。2、關閉串口Serial.end()描述:禁止串口傳輸。此時串口Rx和Tx可以作為數字IO引腳使用。原型:Serial.end()參數:無。返回值:無。
  • Java基本數據類型
    ,在內在中佔32位,即4個字節,取值範圍-2147483648~2147483647,默認值0long:長整型,在內存中佔64位,即8個字節-2^63~2^63-1,默認值0Lfloat:浮點型,在內存中佔32位,即4個字節,用於存儲帶小數點的數字(與double的區別在於float類型有效小數點只有6~7位),默認值0
  • 第2節:常量、變量與C語言的數據類型
    2.變量變量代表一個有名字的、具有特定屬性的一個存儲單元。它用來存放數據,也就是存放變量的值,在程序運行期間,變量的值是可以改變的。變量必須先定義,後使用。在定義時制定該變量的類型和名字。3.常變量定義方式例如const int a=1;變量存在期間其值不變。
  • 大數據開發基礎:Java基礎數據類型
    首先,Java八種數據類型,其實可以整合為四大數據類型,分別是:整型(byte、short、int、long)、浮點型(float、double)、字節型(char)、布爾型(boolean)。Java基礎數據類型
  • 答疑 | boolean類型佔幾個字節?
    | 顏 群公眾號 | 大數據和人工智慧技術boolean佔幾個字節老師,今天面試官問我java中,boolean類型佔幾個字節。從這個結論可以說明,int的長度大致是boolean的4倍,而int是佔4個字節。因此可以猜測,boolean類型佔1個字節。繼續往下讀。
  • Java基本數據類型通俗詳解,這再看不懂,我該怎麼拯救你~
    1.整型(byte、short、int、long)                 儘管byte、short、int、long的數據類型皆用來表示整數,但是在取值範圍上卻並不相同。int是最常用的類型,因為其取值範圍基本已經可以滿足日常的計算需求。          2.浮點型(float、double)float和double都是用來表示浮點型的數據類型,其區別在於精確度上的差異。
  • C 語言學習之變量、數據類型
    字節0到255(2^8-1)int/signed int2或4個字節unsigned int2或4個字節0到2^16-1或0到2^32-1long/signed long4位元組-2^31 到 2^31-1
  • 面試常考,項目易錯,長文詳解C/C++中的字節對齊
    (short int) <= sizeof(int)sizeof(int) <= sizeof(long int)short int至少應為16位(2位元組)long int至少應為32位自然對齊指的是將對應變量類型存入對應地址值的內存空間,即數據要根據其數據類型存放到以其數據類型為倍數的地址處。例如char類型佔1個字節空間,1的倍數是所有數,因此可以放置在任何允許地址處,而int類型佔4個字節空間,以4為倍數的地址就有0,4,8等。編譯器會優先按照自然對齊進行數據地址分配。
  • C語言簡明教程(二)數據類型
    如果大家對二進位、字節這些概念不是很熟悉,可以點擊查看字節、二進位學習了解相關概念。基本類型(int 類型)編譯系統分配給 int 類型數據 2 個字節或者 4 個字節(由具體的編譯系統自行決定)。我們使用的 gcc 編譯器為每個整數類型分配四個字節(32 個二進位)。在存儲單元中的存儲方式是:用整數的補碼形式存放。
  • 一起學JAVA——數據類型
    如下圖數據類型分類原始類型(基本類型)整數:byte 1個字節,最小值:-128,最大值:127short 2個字節,最小值:-32768,最大值:32767int 4個字節,最小值:-2147483648,最大值:2147483647long 8個字節,最小值:- 9223372036854775808,最大值:9223372036854775807浮點數(小數):
  • C語言基礎——短短幾分鐘就讓你了解數據是怎樣在內存中存儲的
    談到數據的類型,我們就會想到我們用過的最多的整型和浮點型,就以這兩個數據類型為例,我們知道在計算機內存中的整數與小數不像在現實生活中可以無限大,它們的大小往往都是受制約的,比如 int 類型只能佔4個字節,double 類型只能佔8個字節等等。
  • C語言中常用的69個函數庫(帶參數解釋與頭文件申明)
    ungetchar (char);將輸入的字符回送輸入緩衝區,成功返回char,否則返回EOF4、extern char putchar (char);通過單片機的串口輸出字符,與_getkey()函數一樣5、extern int printf   (constchar *, ...)