你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
每日签到
STM32团队2
论坛吐槽优化专区
升级测试
各位大哥大姐 ,给我来个串口发送float型数据的例程
[复制链接]
黄家村村长
提问时间:2018-6-1 18:07 /
阅读主题, 点击返回1楼
赞
0
收藏
0
评论
10
分享
发布时间:2018-6-1 18:07
请先
登录
后回复
10个回答
stm1024
回答时间:2018-6-2 15:35:29
a0a.1 32b0c
本帖最后由 stm1024 于 2018-6-4 11:34 编辑
串口发送,直接把float数据的四个字节送出去就行了 。介绍两个最简单经济的做法,思想类似,效率也很高。
当然前提是假设您的USART1设置工作已经做好了。=========================================================================
1.联合体
这种方式比较容易理解,就是让不同的变量在内存中具有重叠,然后分别读取。
union FB
{
float f;
uint8_t b[4];
};
复制代码
然后可以这么使用:
union FB fb;
uint8_t i;
fb.f=123.456f;
for(i=0;i<4;i++)
{
USART1->SR;
USART_SendData(USART1, fb.b[i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
复制代码
这种方式比较容易理解,也不容出错,但是比较编译后代码肯定是要大一点的。
2.强制类型转换
就是将float类型强制理解为四个字节的字节流,这种方式简单粗暴,也是我比较喜欢的
。
float f=123.456f;
uint8_t i;
uint8_t *pf=(uint8_t*)(&f);
for(i=0;i<4;i++)
{
USART1->SR;
USART_SendData(USART1,pf[i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
复制代码
玩指针是最爽的,就是要小心点。
截图看一下,两者效果差不多。
79 E9 F6 42 就是按IEEE754表示的浮点数123.456,不过,需要说明的是,顺序与特定机器(CPU)有关。例如,用我写的程序测试:
网站:
http://www.binaryconvert.com/res ... 9050051046052053054
显示的结果如下:
从这里可以看出,
STM32是Little-Endian的
。
反正用这两种搞法,别说一个小小的float类型,就是复杂的自定义类型,都能给你化整为零发出去,然后在接收端按约定好的字节流顺序,一个memcpy又能在接收端满血满魔复活。
串口接收float,这里有个可供参考:
https://www.stmcu.org.cn/module/foru ... ewthread&tid=615818
评分
参与人数
1
蝴蝶豆
+5
收起
理由
zero99
+ 5
查看全部评分
赞
0
评论
回复
支持
反对
1
2
/ 2 页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
串口发送,直接把float数据的四个字节送出去就行了 。介绍两个最简单经济的做法,思想类似,效率也很高。
当然前提是假设您的USART1设置工作已经做好了。=========================================================================
1.联合体
这种方式比较容易理解,就是让不同的变量在内存中具有重叠,然后分别读取。
2.强制类型转换
就是将float类型强制理解为四个字节的字节流,这种方式简单粗暴,也是我比较喜欢的
截图看一下,两者效果差不多。
79 E9 F6 42 就是按IEEE754表示的浮点数123.456,不过,需要说明的是,顺序与特定机器(CPU)有关。例如,用我写的程序测试:
网站:http://www.binaryconvert.com/res ... 9050051046052053054显示的结果如下:
从这里可以看出,STM32是Little-Endian的。
反正用这两种搞法,别说一个小小的float类型,就是复杂的自定义类型,都能给你化整为零发出去,然后在接收端按约定好的字节流顺序,一个memcpy又能在接收端满血满魔复活。
串口接收float,这里有个可供参考:https://www.stmcu.org.cn/module/foru ... ewthread&tid=615818
评分
查看全部评分