大家好,我是專注分享職業(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í)例:
// 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);
- 管理EEPROM:如AT24C02,存儲系統(tǒng)配置參數(shù)。
特點(diǎn):節(jié)省引腳,支持多設(shè)備,但速率較低(通?!?00kHz)。
4.CAN協(xié)議原理:差分信號抗干擾,支持多主通信,適用于復(fù)雜工業(yè)環(huán)境。
示例1-CAN協(xié)議通信原理
實(shí)例:
// CAN報(bào)文發(fā)送(HAL庫)
CAN_TxHeaderTypeDef tx_header;
tx_header.StdId = 0x123; // 標(biāo)準(zhǔn)ID
HAL_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)處理請求
特點(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篇博文,下面是目錄: