色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

如何在STM32中收發float數據?

FPGA之家 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2021-04-02 17:03 ? 次閱讀

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

65ff436e-92eb-11eb-8b86-12bb97331649.png

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

66130a98-92eb-11eb-8b86-12bb97331649.png

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

union float_data

{

float f_data;

uint8_t byte[4];

};

數據的流向如:

66614910-92eb-11eb-8b86-12bb97331649.png

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

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

union float_data rx_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發送出去。

運行結果:

66719c48-92eb-11eb-8b86-12bb97331649.png

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

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

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

66a6fd8e-92eb-11eb-8b86-12bb97331649.png

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

66d416d4-92eb-11eb-8b86-12bb97331649.png

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

66e68d96-92eb-11eb-8b86-12bb97331649.png

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

6700c6ac-92eb-11eb-8b86-12bb97331649.png

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

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

責任編輯:haq

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

    關注

    8

    文章

    7085

    瀏覽量

    89231
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356642
  • float
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7785

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

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

收藏 人收藏

    評論

    相關推薦

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

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

    何在Altium Designer快速定位器件

    想知道如何在Altium Designer快速定位器件嘛?
    的頭像 發表于 10-12 09:28 ?3776次閱讀
    如<b class='flag-5'>何在</b>Altium Designer<b class='flag-5'>中</b>快速定位器件

    何在STM32上運行AI應用

    1.X-Linux-AI概述X-LINUX-AI是STM32MPUOpenSTLinux擴展包,面向STM32MP1和STM32MP2系列微處理器的人工智能。它包含LinuxAI框架,以及用于開始
    的頭像 發表于 09-30 08:00 ?2576次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>STM32</b>上運行AI應用

    請問DTU如何在低功耗下正常收發數據

    DTU如何在低功耗下正常收發數據
    發表于 07-25 08:04

    何在SQL創建觸發器

    在SQL,觸發器(Trigger)是一種特殊類型的存儲過程,它自動執行或激活響應表上的數據修改事件(如INSERT、UPDATE、DELETE等)。觸發器可以用于維護數據庫的完整性、自動化復雜
    的頭像 發表于 07-18 16:01 ?2004次閱讀

    STM32串口1同時收發數據卡在回調函數怎么解決?

    只能正常收發幾次,卡住后進入不了user_main_program 同時使用了串口2連接esp8266進行數據收發
    發表于 05-29 06:34

    何在STM32F439 DMA流中斷中區分是哪個通道產生的中斷?

    STM32F439有兩個DMA控制器DMA1和DMA2,每個控制器有8個流,每個流有8個通道,我做的是采用串口1DMA中斷接收數據,DMA2的流2 通道4對應USART1_RX,STM32
    發表于 05-17 08:20

    想用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

    STM32F407官方LWIP例程,怎樣修改把需要發送的數據直接由應用層映射到數據鏈路層?

    STM32F407官方LWIP例程,怎樣修改把需要發送的數據直接由應用層映射到數據鏈路層,但又不會影響到LWIP堆棧的接收發送。
    發表于 04-29 06:21

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

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

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

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

    STM32WLE5JC SPI數據長度設置為8位,但接收數據緩存卻是16位,為什么?

    STM32WLE5JC單片機SPI數據長度設置了8位,并且相應的接收FIFO也設成了8位,但最后收發數據是卻是16位
    發表于 04-07 07:32

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

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

    何在stm32cubemx精確查詢?

    stm32cubemxfinder功能的確很方便,但我遇到一個問題 現在片子上pin復用功能越來越多,越來越方便 我同時需要多個接口,如,1個can,2個spi,1個csi...... 選擇時,會出現數量上滿足了,但不少pin是復用,不能共存。 請教如
    發表于 03-12 06:11
    主站蜘蛛池模板: 国产午夜伦鲁鲁| 九九久久国产| 久久国产视频网| 成人在线观看免费视频| 嫩草影院永久在线一二三四| 瑜伽牲交AV| 久久这里只有热精品18| 曰产无码久久久久久精品| 久久黄色录像| 67194在线入口免费| 欧美Av无码高清在线| 成 人 动漫3d 在线看| 涩涩伊人久久无码欧美| 国产99久久亚洲综合精品西瓜tv| 手机在线观看你懂的| 国产精品久久久久久久久久久| 学生小泬无遮挡女HD| 九九热精品在线观看| 97久久超碰中文字幕| 日本高清无卡码一区二区久久| 公和我做好爽添厨房中文字幕| 午夜福到在线4国产| 精品 在线 视频 亚洲| 最美女人体内射精一区二区 | 蜜桃视频一区二区| a久久99精品久久久久久蜜芽| 日本一在线中文字幕| 国产又粗又猛又爽又黄的免费视频 | 国产成人啪精视频精东传媒网站| 亚洲AV无码国产精品色午夜情 | 伊人不卡久久大香线蕉综合影院| 鲁大师影院在线视频在线观看| 啊灬啊灬啊灬快灬深高潮啦| 午夜噜噜噜私人影院在线播放| 精品九九视频| 99热久久精品国产一区二区| 手机看片国产免费| 久久午夜夜伦痒痒想咳嗽P| RUNAWAY韩国动漫免费官网版| 亚色九九九全国免费视频| 秘密教学93话恩爱久等了免费|