一、利用protobuf通信原理 最近项目中需要用到stm32与Orange Pi(移植了linux)进行数据交互,H6端是用C++编写的串口底层驱动,与stm32的串口连接并通信。串口间的通信协议定为采用protobuf打包数据并通过串口发出的形式, 即发送端编码数据并序列化成数组通过串口发出,接收端接收到一帧数据,进行解码并解析数据。 二、 移植protobuf(nanopb-0.3.8)到stm32工程 protobuf是一种打包数据的工具,和JSON打包数据的作用是一样的。在C++下用protobuf传递数据,要先写一个.proto文件,然后在linux环境下编译该文件,或者直接放在CMake里面编译,便可以生成出来一个类(.cpp 和 .h),利用protobuf打包便是打包这个类。 可以理解成把这个类的所有数据加上帧头帧尾帧校验,然后通过串口,网络等通信格式将数据发送出去,这个过程称为序列化。解包就是把收到序列化的数据反序列化,然后把有效数据放入生成的类中。 一般开发stm32的环境是在Windows下,基于Keil开发,要通过.proto文件生成结构体(.c和.h)需要下载一个官方protobuf的轮子,然后在命令行下编译即可生成我们需要的结构体文件。这个轮子的下载地址放在文末。 三、编写.proto文件 编写.proto文件很简单,开头先写protobuf的版本号