MQTT协议和PB协议??

刚开始做CloudAPI时跑出来的问题
当时一帮不懂的人在那里说的头头是道,有这功夫不如多查查资料
结论:一个是网络传输协议(MQTT),一个并不是网络协议(PB),而是一种数据编码格式和接口描述语言,类比JSON

MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息传输协议,通常被用于物联网(IoT)和即时通讯应用中。它通常被归类为应用层协议,因为它建立在 TCP/IP 协议栈之上,其功能与应用层密切相关,为应用程序之间的通信提供支持。

PB(Protocol Buffers,即协议缓冲区)是一种用于序列化结构化数据的协议,通常用于通信协议、数据存储和配置文件等领域。它本身并不是一种网络协议而是一种数据编码格式和接口描述语言。因此,PB协议本身并不属于OSI模型中的任何一层。然而,它常用于应用层协议的数据传输,例如在HTTP、RPC(Remote Procedure Call,远程过程调用)等应用中,因此通常与应用层协议关联紧密。

### STM32F103ZE 微控制器通信协议使用教程 #### 一、概述 STM32F103ZE 是一款高性能 ARM Cortex-M3 内核的微控制器,广泛应用于嵌入式系统设计中。该芯片支持多种通信协议,包括 UART、SPI、I²C、CAN Ethernet 等。这些协议可以满足不同场景下的数据传输需求。 --- #### 二、UART 协议 UART(Universal Asynchronous Receiver/Transmitter)是一种异步串行通信方式,常用于短距离设备间的数据交换。STM32F103ZE 可通过 USART 外设实现 UART 功能。 - **应用场景**: STM32F103ZE 将采集到的数据通过串口发送给 ESP8266,后者再利用 MQTT 协议将数据上传至腾讯云物联网平台[^1]。 - **配置要点**: - 初始化波特率、数据位数、停止位校验位。 - 设置中断或 DMA 模式以提高效率。 ```c // 配置USART外设 void USART_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); // 配置GPIO引脚为复用功能 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; // TX GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; // RX GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStruct); // 配置USART参数 USART_InitStruct.USART_BaudRate = 115200; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStruct); USART_Cmd(USART1, ENABLE); // 启动USART模块 } ``` --- #### 三、I²C 协议 I²C(Inter-Integrated Circuit)是一种同步双向二线制通信协议,适用于连接低速外围设备。 - **应用场景**: 基于 TOF250(IIC 接口),可以通过 I²C 总线读取传感器数据并处理[^2]。 - **配置要点**: - 定义 SCL SDA 引脚。 - 设定时钟频率(通常为 100kHz 或 400kHz)。 ```c // 配置I2C外设 void I2C_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; I2C_InitTypeDef I2C_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); // 配置SCLSDA引脚 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // PB6(SCL), PB7(SDA) GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); // 配置I2C参数 I2C_InitStruct.I2C_ClockSpeed = 100000; // 100kHz I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; I2C_InitStruct.I2C_OwnAddress1 = 0x00; I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_Init(I2C1, &I2C_InitStruct); I2C_Cmd(I2C1, ENABLE); // 启动I2C模块 } ``` --- #### 四、Ethernet 协议 Ethernet 支持高速网络通信,适合复杂工业控制环境中的数据交互。 - **应用场景**: DM9000 芯片一般挂载在 STM32 的 FSMC 上,提供以太网接入能力[^3]。 - **配置要点**: - 利用 HAL 库初始化以太网 MAC 层。 - 实现 TCP/IP 协议栈(如 LwIP)完成高层应用开发。 ```c // 配置以太网MAC层 void ETH_Init(void) { ETH_HandleTypeDef heth; MX_ETH_Init(&heth); // 初始化ETH外设 HAL_ETH_Start(&heth); // 开启ETH服务 } // 数据收发函数 uint8_t* ETH_ReadPacket() { ... } void ETH_SendPacket(uint8_t *data, uint16_t length) { ... } ``` --- #### 五、其他注意事项 - **RX SRAM 结构**: 在某些情况下,RX SRAM 被定义为环形缓冲区,初始地址固定为 `0xC00`。每次接收到的新数据包会附带 CRC 校验码以及特定格式的头部信息(如状态字节长度字段)。 - **调试工具**: 使用逻辑分析仪或者串口终端程序验证实际通信效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值