8種stm32單片機常用的通信協議

示例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作為主機,發送顯示數據至SSD1306 OLED模塊。
// 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,存儲系統配置參數。
特點:節省引腳,支持多設備,但速率較低(通?!?00kHz)。
四、CAN協議
原理:差分信號抗干擾,支持多主通信,適用于復雜工業環境。

示例1-CAN協議通信原理
實例:- 汽車電子控制:STM32作為CAN節點,與ECU(發動機控制單元)通信,傳輸油門或剎車信號。
// CAN報文發送(HAL庫)CAN_TxHeaderTypeDef tx_header;tx_header.StdId = 0x123; // 標準IDHAL_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米)

浙公網安備 33010602011771號