衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

教你們STM32如何收發float類型數據

FPGA之家 ? 來源:開源博客 ? 作者:學以解憂 ? 2021-04-09 16:49 ? 次閱讀

實際應用中,我們可能需要兩個設備通過串口傳輸浮點數據:

fedd4e54-990e-11eb-8b86-12bb97331649.png

本篇筆記為了方便演示,使用串口助手模擬其中一個設備,本篇筆記內容如下:

02044fa6-990f-11eb-8b86-12bb97331649.png

我們創建一個用于管理float類型數據的共用體:

unionfloat_data { floatf_data; uint8_tbyte[4]; };

數據的流向如:

02316d10-990f-11eb-8b86-12bb97331649.png

本次使用串口助手模擬發送設備,省略了第一步,主要看第②、③步。

創建兩個共用體變量,用于發送與接收:

unionfloat_datarx_float_data,tx_float_data;

收發相關代碼:

左右滑動查看全部代碼>>>

// if(HAL_UART_Receive(&huart3,rx_float_data.byte,4,1000)==HAL_OK) { printf("rx_float_data.byte[0]=%.2x(addr:%#x) ",rx_float_data.byte[0],&rx_float_data.byte[0]); printf("rx_float_data.byte[1]=%.2x(addr:%#x) ",rx_float_data.byte[1],&rx_float_data.byte[1]); printf("rx_float_data.byte[2]=%.2x(addr:%#x) ",rx_float_data.byte[2],&rx_float_data.byte[2]); printf("rx_float_data.byte[3]=%.2x(addr:%#x) ",rx_float_data.byte[3],&rx_float_data.byte[3]); printf("rx_float_data.f_data=%f(addr:%#x) ",(float)rx_float_data.f_data,&rx_float_data.f_data); tx_float_data.f_data=rx_float_data.f_data+1.0f; printf("tx_float_data.f_data=%f ",tx_float_data.f_data); HAL_UART_Transmit(&huart3,tx_float_data.byte,4,1000); }

代碼很簡單,UART3接收到串口助手發送的float類型對應的16進制數據存于rx_float_data.byte中,并打印輸出rx_float_data.byte的各個字節,此時rx_float_data.f_data就是我們接收的浮點數據,接收到的數據加上1.0后賦予tx_float_data.f_data再通過UART3把tx_float_data.byte發送出去。

運行結果:

029ca5da-990f-11eb-8b86-12bb97331649.png

這里以傳輸數據1.28為例,1.28對應的十六進制數據是什么呢?

我們可以通過一些在線網站查看,比如

http://www.styb.cn/cms/ieee_754.php

02c9b12e-990f-11eb-8b86-12bb97331649.png

1.28對應的十六進制為:3FA3D70A。因為STM32是小端模式,所以使用串口助手發送時需要進行一個逆序,即發送0AD7A33F。從實驗結果可以看到:

02edf03e-990f-11eb-8b86-12bb97331649.png

STM32收到1.28之后,加上1.0之后通過UART3發回上位機,2.28對應4011EB85:

02fba01c-990f-11eb-8b86-12bb97331649.png

這里我們使用串口助手來模擬一個設備,所以需要查一下我們要發送的float數據對應的十六進制數據。實際兩個設備之間做傳輸是不需要這么做的,想發什么就傳什么就可以:

032a68ac-990f-11eb-8b86-12bb97331649.png

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 串口
    +關注

    關注

    14

    文章

    1558

    瀏覽量

    77072
  • STM
    STM
    +關注

    關注

    1

    文章

    557

    瀏覽量

    42583
  • float
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7793

原文標題:STM32如何收發float類型數據?

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    請問TLV320AIC3106怎么轉換32位float數據

    TLV320AIC3106怎么轉換32位float數據?
    發表于 11-05 08:07

    鴻蒙原生應用元服務開發-倉頡基礎數據類型整數類型

    是整數類型或浮點類型。 % 的操作數只支持整數類型。 ** 的左操作數只能為 Int64 類型Float64
    發表于 09-13 14:55

    鴻蒙原生應用元服務開發-倉頡基礎數據類型元組類型

    二元,例如,(Int64, Float64) 表示一個二元組類型,(Int64, Float64, String) 表示一個三元組類型。 元組的長度是固定的,即一旦定義了一個元組
    發表于 09-12 11:02

    鴻蒙原生應用元服務開發-倉頡基礎數據類型浮點類型

    浮點類型包括 Float16、 Float32 和 Float64,分別用于表示編碼長度為 16-bit、 32-bit 和 64-bit 的浮點數(帶小數部分的數字,如 3.1415
    發表于 09-10 10:22

    i2s_read返回的內存指針可以是float類型的數組嗎?

    (aux in輸入的音頻信號),如果我把float 改成int16_t就沒有問題了,但是我后續的數據處理精度需要是float數據類型,誰能給解答一下?i2s_read返回的到底是整形還
    發表于 06-28 08:07

    想用stm32f407完成數據收發功能,想裸機以中斷的方式控制數據收發,不知道該方案是否可行?

    想用stm32f407完成數據收發功能,暫時不想移植協議棧,想裸機以中斷的方式控制數據收發,不知道該方案是否可行?有沒有相關的例程?希望
    發表于 05-17 06:26

    關于stm32 unsigned int轉float數據變化問題求解

    Temp的值是2147553344 (0x80011040)數據類型是unsigned int型 Temp_float的值是2.14755328e+009數據類型float
    發表于 05-08 06:48

    關于go中接口類型的表示方法

    go是一個靜態性語言,每個變量都有靜態的類型,因此每個變量在編譯階段中有明確的變量類型,比如像:int、float32、MyType。
    的頭像 發表于 04-28 10:13 ?411次閱讀

    STM32F103VC使用simulation和虛擬串口進行串口數據收發時,進不了IDLE中斷的原因?

    單片機:STM32F103VC,keil版本:5.18; 在使用simulation和虛擬串口進行串口數據收發時,數據能夠正常發送,但是接收數據
    發表于 04-26 07:09

    stm32f4xx的CAN對ID配置有要求嗎?CAN收發器是什么型號的?

    stm32f4xx的CAN疑問: 1)標準幀收發時,對CAN ID有特殊的要求或約束嗎?比如哪些CAN ID不能用? 2)CAN收發器是什么型號?對CAN數據鏈路層的編碼有特殊操作嗎?
    發表于 04-22 06:03

    STM32F4用JSCOPE選參數的時候float類型的選不了是為什么?

    有人遇到這種問題嗎,JSCOPE選參數的時候float類型的選不了,不知道什么原因
    發表于 04-15 06:14

    stm32cubeIDE移植的UCOSIII,定義float變量后進入硬件錯誤怎么解決?

    如題:stm32cubeIDE移植的UCOSIII,STemwin,用的stm32407芯片,定義float變量后進入硬件錯誤 之前是Keil5移植的時候也遇到了這個問題,然后是在啟動文件中加了一段代碼解決了。 這次因為啟動文件
    發表于 04-12 06:09

    使用CubeMX配置STM32010C6T6的LPUART1外設,調用串口發送和接收函數均不能收發數據怎么解決?

    如題,STM32010C6T6串口1配置完成后,Cube界面接收引腳模式默認為推挽輸出,并且沒有其它選項可以更改,(其它系列MCU默認是輸入模式)生成的工程調用串口發送和接收函數均不能收發數據
    發表于 03-19 07:48

    STM32G491使用串口DMA收發數據,一直進中斷卡死其他任務是為什么?

    STM32G491使用串口DMA收發數據,一直進中斷卡死其他任務,具體原因是出現在哪里?
    發表于 03-18 07:49

    arcgis值類型與字段類型不兼容

    數據類型,用于定義字段可以存儲的數據范圍和格式。常見的字段類型包括整數(int),浮點數(float),日期(date),文本(string)等。當我們在創建
    的頭像 發表于 02-25 11:14 ?1871次閱讀
    百家乐咨询网址| 真钱百家乐官网注册送| 大发888老l| 月华百家乐官网的玩法技巧和规则 | 真博百家乐官网的玩法技巧和规则 | 怎样玩百家乐赢钱| 百家乐官网香港六合彩| 娱乐城棋牌| 必发娱乐| 真人百家乐官网出千| 百家乐官网神算子| 皇冠百家乐官网在线游戏| 百家乐官网筹码防伪套装| 百家乐庄和闲的赌法| 新百家乐的玩法技巧和规则| 打百家乐纯打庄的方法| 大发888娱乐城客户端lm0| 大发888网站是多少呢| 大发888在线娱乐城代理| 皇冠足球即时走地| 百家乐官网补牌规律| 长方形百家乐官网筹码| 做生意属虎的朝向| 尊龙百家乐娱乐网| 大发888下载ylc8| 讷河市| 百家乐官网赌场牌路分析| 红宝石百家乐官网娱乐城| 大上海百家乐官网娱乐城| 百家乐在线娱乐场| 大发888娱乐场下载ypu| 高阳县| 百家乐官网2号程序| 百家乐高档筹码| 大发888真钱棋牌| A8百家乐官网现金网| 将军百家乐官网的玩法技巧和规则| 百家乐投注技巧球讯网| 大发888娱| 百家乐官网是不是有技巧| 百家乐官网讲坛汉献|