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

一、项目实现要求

根据项目要求,我们需要在多台机器人间进行数据通信,系统搭建如下:在机器人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字节数组charArray1[8]、charArray2[8],用于存放double型温度和气压数据转化后字节数据。

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

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

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

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

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

相关推荐
Wave8452 小时前
STM32-----SPI
stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi3 小时前
基于FPGA的电梯控制系统设计(论文+源码)
单片机·fpga开发·毕业设计·计算机毕业设计·电子交易系统
2401_888423093 小时前
51单片机-串口通信
网络·嵌入式硬件·51单片机
南山十一少3 小时前
STM32CubeMX + HAL 库:基于 I²C 通信的 BMP280气压海拔测量
c语言·stm32·嵌入式硬件
小莞尔4 小时前
【51单片机】【protues仿真】基于51单片机PM2.5空气质量检测系统
stm32·单片机·嵌入式硬件·51单片机·proteus
zgc12453675 小时前
51单片机基础day3
单片机·嵌入式硬件·51单片机
竹照煜_ysn6 小时前
STM32——WDG看门狗
stm32·单片机·嵌入式硬件
学习噢学个屁6 小时前
基于STM32智能阳台监控系统
c语言·stm32·单片机·嵌入式硬件
糖糖单片机设计7 小时前
硬件开发_基于物联网的老人跌倒监测报警系统
stm32·单片机·嵌入式硬件·物联网·51单片机
一川月白70915 小时前
51单片机---硬件学习(电子琴、主从应答模式、modbus模型、DS18B20传感器显示温度)
嵌入式硬件·51单片机·串口通信·异步通信·串行通信·同步通信·并行通信