• 正文
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

分享8種stm32單片機常用的通信協(xié)議

03/19 11:35
4202
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是專注分享職業(yè)規(guī)劃/技術(shù)科普/智能生活有關(guān)原創(chuàng)文章的allen康哥。

今天分享8種stm32單片機常用的通信協(xié)議

1.UART/USART協(xié)議

示例1-PC上通過UART來調(diào)試MCU

示例2-RS-232通過電平轉(zhuǎn)換芯片與MCU通訊

示例3-MCU串口通訊

原理:異步串行通信,通過TXD(發(fā)送)和RXD(接收)兩線實現(xiàn)全雙工通信,支持自定義波特率(如9600bps、115200bps)。實例:

    GPS模塊通信:STM32通過UART接收NMEA-0183格式數(shù)據(jù)。
// STM32Cube HAL庫配置示例HAL_UART_Receive_IT(&huart2, rx_buffer, 128);  // 中斷接收數(shù)據(jù)
    調(diào)試信息輸出:通過UART連接PC串口助手,實時打印傳感器數(shù)據(jù)。

特點:成本低、易實現(xiàn),但無硬件流控制,適用于短距離、低速場景。

2.SPI協(xié)議原理:全雙工同步通信,通過SCK(時鐘)、MOSI(主機發(fā))、MISO(主機收)、CS(片選)四線實現(xiàn)高速數(shù)據(jù)傳輸(可達數(shù)十MHz)。

示例1-SPI 數(shù)據(jù)傳輸

示例2-SPI 數(shù)據(jù)傳輸

示例3-SPI時序信號

示例4-MCU SPI信號模擬圖

實例:

    驅(qū)動OLED屏幕:STM32作為主機,發(fā)送顯示數(shù)據(jù)至SSD1306 OLED模塊。
// SPI發(fā)送函數(shù)(HAL庫)HAL_SPI_Transmit(&hspi1, oled_data, sizeof(oled_data), 100);
    外接Flash存儲:如W25Q128芯片,通過SPI實現(xiàn)固件存儲或數(shù)據(jù)備份。

特點:速率快、接口簡單,但需占用較多引腳資源。

3.I2C協(xié)議原理:半雙工同步通信,通過SCL(時鐘)和SDA(數(shù)據(jù))兩線支持多主從設備,地址尋址機制實現(xiàn)設備區(qū)分。

示例1-?I2C總線以及尋址方式

示例2-?I2C總線以及尋址方式

實例:

    連接溫度傳感器:如BMP280,STM32通過I2C讀取溫濕度數(shù)據(jù)。
// I2C讀取寄存器(HAL庫)HAL_I2C_Mem_Read(&hi2c1, BMP280_ADDR, REG_TEMP, I2C_MEMADD_SIZE_8BIT, data, 2, 100);

特點:節(jié)省引腳,支持多設備,但速率較低(通?!?00kHz)。

4.CAN協(xié)議原理:差分信號抗干擾,支持多主通信,適用于復雜工業(yè)環(huán)境。

示例1-CAN協(xié)議通信原理

實例:

    汽車電子控制:STM32作為CAN節(jié)點,與ECU(發(fā)動機控制單元)通信,傳輸油門或剎車信號。
// CAN報文發(fā)送(HAL庫)CAN_TxHeaderTypeDef tx_header;tx_header.StdId = 0x123;  // 標準IDHAL_CAN_AddTxMessage(&hcan, &tx_header, tx_data, &mailbox);
    工業(yè)機器人控制:多個CAN節(jié)點同步執(zhí)行動作指令。

特點:高可靠性,支持錯誤檢測,但協(xié)議棧復雜度較高。

5.USB協(xié)議原理:高速雙向通信,支持設備模式(如U盤、HID設備)或主機模式(連接外設)。

示例1-USB2.0接線實例

實例:

    自定義HID設備:STM32模擬USB鍵盤,發(fā)送按鍵指令至PC。
// USB描述符配置(CubeMX生成)__ALIGN_BEGIN static uint8_t HID_REPORT_DESC[] __ALIGN_END = { ... };

 

    數(shù)據(jù)傳輸:通過USB CDC類實現(xiàn)虛擬串口,替代傳統(tǒng)UART。

特點:即插即用,速率高(USB2.0可達12Mbps),需復雜協(xié)議棧支持。

6.Ethernet與Modbus原理:基于LwIP協(xié)議棧實現(xiàn)TCP/IP通信,結(jié)合Modbus/TCP或Modbus/RS485協(xié)議用于工業(yè)網(wǎng)絡。

示例1-Ethernet典型應用

示例2-tcp三次握手與四次揮手

實例:

// Modbus/TCP報文處理modbus_tcp_poll(&ctx);  // LwIP回調(diào)處理請求
    RS485多設備通信:使用MAX485芯片,實現(xiàn)STM32與多個PLC的Modbus/RTU通信。

特點:支持遠程控制,需外接PHY芯片或轉(zhuǎn)換模塊。

七、MQTT協(xié)議

原理:基于發(fā)布/訂閱模型的輕量級物聯(lián)網(wǎng)協(xié)議,運行于TCP/IP協(xié)議棧之上,支持低帶寬、高延遲網(wǎng)絡環(huán)境下的設備與云端雙向通信。采用心跳機制保持長連接,消息體最小僅需2字節(jié),支持QoS(服務質(zhì)量等級)保證數(shù)據(jù)傳輸可靠性。

示例1-mqtt典型應用

實例:

環(huán)境監(jiān)測系統(tǒng):STM32通過ESP8266 WiFi模塊連接阿里云IoT平臺,定時發(fā)布溫濕度數(shù)據(jù)至主題/sensor/data。

// 基于Paho MQTT嵌入式庫的核心代碼片段MQTTClient_publish(&client, "/sensor/data", "{"temp":25.6}", 12, QoS1, 0);

遠程設備控制:訂閱/device/ctrl主題,接收云端下發(fā)的繼電器控制指令。

特點:

支持百萬級設備連接,適合電池供電場景(心跳間隔可配置)

協(xié)議頭開銷僅2字節(jié),帶寬利用率高達95%

需外接網(wǎng)絡模塊(如ESP32/4G模組)

八、RS-485協(xié)議

原理:基于差分信號傳輸物理層標準,采用雙絞線傳輸,邏輯"1"對應A-B線間-2V~-6V電壓,邏輯"0"對應+2V~+6V。支持總線型拓撲,通過使能端控制收發(fā)方向?qū)崿F(xiàn)半雙工通信。

示例1-485芯片連線圖

示例2-485電路圖

實例:

工業(yè)PLC組網(wǎng):STM32作為Modbus從站,通過MAX485芯片接入RS-485總線,響應主站查詢指令:

// 使用USART2實現(xiàn)Modbus RTU協(xié)議HAL_UART_Receive_IT(&huart2, modbus_frame, 8); // 接收功能碼01查詢請求

樓宇自動化:連接1000米外的電表集群,每30秒輪詢用電量數(shù)據(jù)。

特點:

共模干擾能力達±15kV(通過雙絞線抵消電磁干擾

單總線最大支持32節(jié)點(需終端匹配120Ω電阻

傳輸速率與距離成反比(10Mbps@12米,100kbps@1200米)

最后推薦下我維護的原創(chuàng)博客專欄《STM32深入實踐教程》,點擊文末的“閱讀原文”直達。專欄目前已更新89篇博文,下面是目錄:

相關(guān)推薦