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

一、项目实现要求

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

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

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

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

传感器浮点数数据在串口通信中封包技术解析_第1张图片

 

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

传感器浮点数数据在串口通信中封包技术解析_第2张图片

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

传感器浮点数数据在串口通信中封包技术解析_第3张图片

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

传感器浮点数数据在串口通信中封包技术解析_第4张图片

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

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

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

传感器浮点数数据在串口通信中封包技术解析_第5张图片 这里,在发送数据的时候,添加了简单的枕头、帧尾。同时,在传输温度、气压数组的数据的时候,可以调用在USART3.c中封装好的发送数据函数,该函数如下:

 传感器浮点数数据在串口通信中封包技术解析_第6张图片

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

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

 

你可能感兴趣的:(嵌入式,c语言,STM32,单片机,嵌入式硬件)