问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32单片机常用通信协议详解

创作时间:
作者:
@小白创作中心

STM32单片机常用通信协议详解

引用
与非网
1.
https://www.eefocus.com/article/1815891.html

STM32单片机在嵌入式系统领域应用广泛,其丰富的通信接口支持多种通信协议。本文将详细介绍8种常用的通信协议,包括UART/USART、SPI、I2C、CAN、USB、Ethernet与Modbus、MQTT以及RS-485。每种协议都有其独特的应用场景和特点,通过本文的介绍,读者可以更好地理解这些协议的工作原理和实际应用。

1. UART/USART协议

UART(通用异步收发传输器)是一种异步串行通信协议,通过TXD(发送)和RXD(接收)两线实现全双工通信,支持自定义波特率(如9600bps、115200bps)。

实例

  • 与GPS模块通信:STM32通过UART接收NMEA-0183格式数据。

    // STM32Cube HAL库配置示例
    HAL_UART_Receive_IT(&huart2, rx_buffer, 128);  // 中断接收数据
    
  • 调试信息输出:通过UART连接PC串口助手,实时打印传感器数据。

特点

  • 成本低、易实现
  • 无硬件流控制
  • 适用于短距离、低速场景

2. SPI协议

SPI(串行外设接口)是一种全双工同步通信协议,通过SCK(时钟)、MOSI(主机发)、MISO(主机收)、CS(片选)四线实现高速数据传输(可达数十MHz)。

实例

  • 驱动OLED屏幕:STM32作为主机,发送显示数据至SSD1306 OLED模块。

    // SPI发送函数(HAL库)
    HAL_SPI_Transmit(&hspi1, oled_data, sizeof(oled_data), 100);
    
  • 外接Flash存储:如W25Q128芯片,通过SPI实现固件存储或数据备份。

特点

  • 速率快、接口简单
  • 需占用较多引脚资源

3. I2C协议

I2C(集成电路互连总线)是一种半双工同步通信协议,通过SCL(时钟)和SDA(数据)两线支持多主从设备,地址寻址机制实现设备区分。

实例

  • 连接温度传感器:如BMP280,STM32通过I2C读取温湿度数据。

    // I2C读取寄存器(HAL库)
    HAL_I2C_Mem_Read(&hi2c1, BMP280_ADDR, REG_TEMP, I2C_MEMADD_SIZE_8BIT, data, 2, 100);
    
  • 管理EEPROM:如AT24C02,存储系统配置参数。

特点

  • 节省引脚
  • 支持多设备
  • 速率较低(通常≤400kHz)

4. CAN协议

CAN(控制器局域网络)是一种差分信号抗干扰的通信协议,支持多主通信,适用于复杂工业环境。

实例

  • 汽车电子控制:STM32作为CAN节点,与ECU(发动机控制单元)通信,传输油门或刹车信号。

    // CAN报文发送(HAL库)
    CAN_TxHeaderTypeDef tx_header;
    tx_header.StdId = 0x123;  // 标准ID
    HAL_CAN_AddTxMessage(&hcan, &tx_header, tx_data, &mailbox);
    
  • 工业机器人控制:多个CAN节点同步执行动作指令。

特点

  • 高可靠性
  • 支持错误检测
  • 协议栈复杂度较高

5. USB协议

USB(通用串行总线)是一种高速双向通信协议,支持设备模式(如U盘、HID设备)或主机模式(连接外设)。

实例

  • 自定义HID设备:STM32模拟USB键盘,发送按键指令至PC。

    // USB描述符配置(CubeMX生成)
    __ALIGN_BEGIN static uint8_t HID_REPORT_DESC[] __ALIGN_END = { ... };
    
  • 数据传输:通过USB CDC类实现虚拟串口,替代传统UART。

特点

  • 即插即用
  • 速率高(USB2.0可达12Mbps)
  • 需复杂协议栈支持

6. Ethernet与Modbus

基于LwIP协议栈实现TCP/IP通信,结合Modbus/TCP或Modbus/RS485协议用于工业网络。

实例

  • 远程数据监控:STM32通过以太网上传传感器数据至云平台。

    // Modbus/TCP报文处理
    modbus_tcp_poll(&ctx);  // LwIP回调处理请求
    
  • RS485多设备通信:使用MAX485芯片,实现STM32与多个PLC的Modbus/RTU通信。

特点

  • 支持远程控制
  • 需外接PHY芯片或转换模块

七、MQTT协议

MQTT(消息队列遥测传输)是一种基于发布/订阅模型的轻量级物联网协议,运行于TCP/IP协议栈之上,支持低带宽、高延迟网络环境下的设备与云端双向通信。采用心跳机制保持长连接,消息体最小仅需2字节,支持QoS(服务质量等级)保证数据传输可靠性。

实例

  • 环境监测系统:STM32通过ESP8266 WiFi模块连接阿里云IoT平台,定时发布温湿度数据至主题/sensor/data。

    // 基于Paho MQTT嵌入式库的核心代码片段
    MQTTClient_publish(&client, "/sensor/data", "{"temp":25.6}", 12, QoS1, 0);
    
  • 远程设备控制:订阅/device/ctrl主题,接收云端下发的继电器控制指令。

特点

  • 支持百万级设备连接
  • 适合电池供电场景(心跳间隔可配置)
  • 协议头开销仅2字节,带宽利用率高达95%
  • 需外接网络模块(如ESP32/4G模组)

八、RS-485协议

RS-485是一种基于差分信号传输的物理层标准,采用双绞线传输,逻辑"1"对应A-B线间-2V-6V电压,逻辑"0"对应+2V+6V。支持总线型拓扑,通过使能端控制收发方向实现半双工通信。

实例

  • 工业PLC组网:STM32作为Modbus从站,通过MAX485芯片接入RS-485总线,响应主站查询指令:

    // 使用USART2实现Modbus RTU协议
    HAL_UART_Receive_IT(&huart2, modbus_frame, 8); // 接收功能码01查询请求
    
  • 楼宇自动化:连接1000米外的电表集群,每30秒轮询用电量数据。

特点

  • 抗共模干扰能力达±15kV(通过双绞线抵消电磁干扰)
  • 单总线最大支持32节点(需终端匹配120Ω电阻)
  • 传输速率与距离成反比(10Mbps@12米,100kbps@1200米)
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号