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

一、项目实现要求

根据项目要求,我们需要在多台机器人间进行数据通信,系统搭建如下:在机器人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秒发送一次。

相关推荐
广州灵眸科技有限公司5 小时前
瑞芯微(EASY EAI)RV1126B 核心板供电电路
linux·运维·服务器·单片机·嵌入式硬件·电脑
浩浩测试一下6 小时前
汇编 16位32位64位通用寄存器(逆向分析)
汇编·windows·stm32·单片机·嵌入式硬件·逆向·二进制
潜创微科技8 小时前
IT68353:双 DP1.4a+HDMI2.0 转 HDMI2.0 单芯片 KVM 切换方案
嵌入式硬件·音视频
踏着七彩祥云的小丑9 小时前
嵌入式测试学习第 17 天:常见接口:USB、Type-C、排针
单片机·嵌入式硬件
szxinmai主板定制专家10 小时前
电力设备RK3568/RK3576+FPGA,多系统混合部署Linux+RTOS RT-THREAD,强实时性
linux·运维·服务器·人工智能·嵌入式硬件·fpga开发
振南的单片机世界11 小时前
EXTI边沿触发:按键一按就通知CPU,不用轮询
stm32·单片机·嵌入式硬件
jllllyuz11 小时前
STM32 BMP280 I2C通信驱动程序
stm32·单片机·嵌入式硬件
优信电子12 小时前
基于STM32F103C8T6单片机驱动ACS712模块进行电流检测
stm32·单片机·嵌入式硬件·嵌入式·电流检测·acs712·电流采集
崇山峻岭之间13 小时前
单片机外部中断实验
单片机·嵌入式硬件
chipsense13 小时前
工业UPS电流传感器选型实战指南:AS1V系列如何应对工业配电特殊挑战
单片机·嵌入式硬件·ups·电流传感器