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

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

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

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

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

1.UART/USART協(xié)議

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

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

示例3-MCU串口通訊

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

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

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

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

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

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

示例3-SPI時(shí)序信號

示例4-MCU SPI信號模擬圖

實(shí)例:

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

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

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

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

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

實(shí)例:

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

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

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

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

實(shí)例:

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

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

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

示例1-USB2.0接線實(shí)例

實(shí)例:

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

 

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

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

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

示例1-Ethernet典型應(yīng)用

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

實(shí)例:

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

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

七、MQTT協(xié)議

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

示例1-mqtt典型應(yīng)用

實(shí)例:

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

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

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

特點(diǎn):

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

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

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

八、RS-485協(xié)議

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

示例1-485芯片連線圖

示例2-485電路圖

實(shí)例:

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

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

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

特點(diǎn):

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

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

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

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

相關(guān)推薦