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

一、项目实现要求

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

相关推荐
qq_75568224010 小时前
STM32使用NRF2401进行数据传送
stm32·单片机·嵌入式硬件
FreakStudio16 小时前
开源一款串口舵机驱动扩展板-FreakStudio多米诺系列
单片机·嵌入式·大学生·电子diy
艾格北峰17 小时前
STM32 物联网智能家居 (六) OLED显示设备
arm开发·stm32·单片机·嵌入式硬件·物联网·智能家居
weixin_5358542219 小时前
oppo,汤臣倍健,康冠科技,高途教育25届春招内推
c语言·前端·嵌入式硬件·硬件工程·求职招聘
热爱嵌入式的小许20 小时前
STM32 HAL库&标准库+ESP8266+机智云
stm32·单片机·嵌入式硬件·stm32移植机智云·stm32连接机智云·hal库移植机智云·标准库移植机智云
无际单片机编程20 小时前
面对STM32的庞大体系,如何避免迷失在细节中?
java·stm32·单片机·嵌入式硬件·嵌入式开发
2301_764602231 天前
stm32hal库寻迹+蓝牙智能车(STM32F103C8T6)
stm32·单片机·嵌入式硬件
楼台的春风1 天前
PWM(脉宽调制)技术详解:从基础到应用实践示例
c语言·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式
Jack153027682791 天前
芯谷D668:便携式录音机与耳机式盒式录音机的理想音频解决方案
嵌入式硬件·音视频·家庭影院·麦克风阵列处理器·便携式录音机·耳机式盒式录音机
深圳市青牛科技实业有限公司 小芋圆1 天前
芯谷D2761:为扬声器保护而生的音频限幅器
人工智能·科技·单片机·嵌入式硬件·机器人·音视频