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

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

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

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

引用
1
来源
1.
https://www.cnblogs.com/lijin-note/p/18814728

STM32单片机作为目前最流行的嵌入式开发平台之一,支持多种通信协议以满足不同应用场景的需求。本文将详细介绍8种常用的通信协议,包括UART/USART、SPI、I2C、CAN、USB、Ethernet与Modbus、MQTT以及RS-485,帮助开发者更好地理解和应用这些协议。

一、UART/USART协议

示例1-PC上通过UART来调试MCU

示例2-RS-232通过电平转换芯片与MCU通讯

示例3-MCU串口通讯

原理:异步串行通信,通过TXD(发送)和RXD(接收)两线实现全双工通信,支持自定义波特率(如9600bps、115200bps)。

实例:

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

特点:成本低、易实现,但无硬件流控制,适用于短距离、低速场景。

二、SPI协议

原理:全双工同步通信,通过SCK(时钟)、MOSI(主机发)、MISO(主机收)、CS(片选)四线实现高速数据传输(可达数十MHz)。

示例1-SPI 数据传输

示例2-SPI 数据传输

示例3-SPI时序信号

示例4-MCU SPI信号模拟图

实例:

  • 驱动OLED屏幕:STM32作为主机,发送显示数据至SSD1306OLED模块。
// SPI发送函数(HAL库)  
HAL_SPI_Transmit(&hspi1, oled_data, sizeof(oled_data), 100);  
  • 外接Flash存储:如W25Q128芯片,通过SPI实现固件存储或数据备份。

特点:速率快、接口简单,但需占用较多引脚资源。

三、I2C协议

原理:半双工同步通信,通过SCL(时钟)和SDA(数据)两线支持多主从设备,地址寻址机制实现设备区分。

示例1- I2C总线以及寻址方式

示例2- I2C总线以及寻址方式

实例:

  • 连接温度传感器:如BMP280,STM32通过I2C读取温湿度数据。
// I2C读取寄存器(HAL库)  
HAL_I2C_Mem_Read(&hi2c1, BMP280_ADDR, REG_TEMP, I2C_MEMADD_SIZE_8BIT, data, 2, 100);  
  • 管理EEPROM:如AT24C02,存储系统配置参数。

特点:节省引脚,支持多设备,但速率较低(通常≤400kHz)。

四、CAN协议

原理:差分信号抗干扰,支持多主通信,适用于复杂工业环境。

示例1-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节点同步执行动作指令。

特点:高可靠性,支持错误检测,但协议栈复杂度较高。

五、USB协议

原理:高速双向通信,支持设备模式(如U盘、HID设备)或主机模式(连接外设)。

示例1-USB2.0接线实例

实例:

  • 自定义HID设备:STM32模拟USB键盘,发送按键指令至PC。
// USB描述符配置(CubeMX生成)  
__ALIGN_BEGIN static uint8_t HID_REPORT_DESC[] __ALIGN_END = { ... };  
  • 数据传输:通过USB CDC类实现虚拟串口,替代传统UART。

特点:即插即用,速率高(USB2.0可达12Mbps),需复杂协议栈支持。

六、Ethernet与Modbus

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

示例1-Ethernet典型应用

示例2-tcp三次握手与四次挥手

实例:

  • 远程数据监控:STM32通过以太网上传传感器数据至云平台。
// Modbus/TCP报文处理  
modbus_tcp_poll(&ctx);  // LwIP回调处理请求  
  • RS485多设备通信:使用MAX485芯片,实现STM32与多个PLC的Modbus/RTU通信。

特点:支持远程控制,需外接PHY芯片或转换模块。

七、MQTT协议

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

示例1-mqtt典型应用

实例:

  • 环境监测系统: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协议

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

示例1-485芯片连线图

示例2-485电路图

实例:

  • 工业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号