传感器浮点数数据在串口通信中封包技术解析

一、项目实现要求

根据项目要求,我们需要在多台机器人间进行数据通信,系统搭建如下:在机器人A上搭载大气压模块传感器和zigbee通信模块,在机器人B上搭载手势传感器和zigbee通信模块,在机器人C上搭载zigbee通信模块,要求A和B的传感器数据能够通过zigbee模块传输到机器人C并用以做进一步的控制处理。

二、由于分析大气压传感器采集到的数据为double型的浮点数数据,项目开发是基于STM32标准库,而标准库中的串口传输数据调用的函数只能传输字节数据,所以在数据进行传输前需要将传感器的double类型数据转换为字节数据,具体实现如下说明:

三、机器人A发送大气压数据前的转化过程

(1)该转化过程对应发送端程序,发送端程序所包含的模块有大气压模块采集程序GYBMP280.c和GYBMP280.h,采集大气压传感器的I2C驱动程序以及串口发送程序USART3.c。

(2)转化处理程序在主函数main.c中,进入主函数后,首先初始化大气压传感器模块和串口3。

(3)然后进入while循环,具体处理如下

首先,获取传感器模块的温度数据temperature和气压数据pressure,由于这两个数据类型都未double型,接下来则需要将这两个double型数据转化为字节型,因为在USART3.c中,传输数据的函数如下:

由于double型数据占用8个字节的存储空间,所以定义两个8字节数组charArray18、charArray28,用于存放double型温度和气压数据转化后字节数据。

首先,需要取temperature的地址将其强制转化为unsigned char *类型的指针pdata1,由于temperature的8个字节的数据依次存放在存储空间中,所以将pdata1指针连续加1,并将指向的字节数据存储在charArray18中,则完成了double型温度数据到字节数据的转化,pressure数据的转化同样如此。

接下来,则调用串口的发送函数,将已经转化为字节数据的温度数据和气压数据发送出去。

这里,在发送数据的时候,添加了简单的枕头、帧尾。同时,在传输温度、气压数组的数据的时候,可以调用在USART3.c中封装好的发送数据函数,该函数如下:

这里,传入USART3_TransmitArray()函数的参数为数组名即数组指针、偏移量(这里为0偏移)和字节长度为8个字节。

最后,在while循环内调用延时函数设置数据的发送循环时间为每1秒发送一次。

相关推荐
女神下凡2 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
硅基手札4 小时前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位
何粥学6 小时前
Vivado 2024.2 开发记录(AC820 Zynq-7020)——软件使用,点亮led灯
单片机·嵌入式硬件·zynq
Sakura_j_h_7 小时前
51 单片机驱动四位数码管:动态扫描、限流电阻与消影的取舍
单片机·嵌入式硬件·51单片机·嵌入式·数码管·动态扫描·限流电阻
HANDY092008 小时前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
飞凌嵌入式11 小时前
千次静电放电试炼,守住飞凌嵌入式硬件可靠底线
嵌入式硬件
蹊黎19 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
无敌贵点大王1 天前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何1 天前
二进制和十六进制
stm32·单片机
国科安芯1 天前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射