STM32與樹莓派通信

STM32 與樹莓派(Raspberry Pi)的通信常見方案及實現步驟:


1. UART 串口通信(最簡單)

適用場景:短距離、低速數據交換(如傳感器數據、調試信息)。
硬件連接

STM32引腳樹莓派引腳備注
TXRX (GPIO15)交叉連接
RXTX (GPIO14)交叉連接
GNDGND共地

軟件配置

  • STM32 端(使用HAL庫):

    UART_HandleTypeDef huart1;
    huart1.Instance = USART1;
    huart1.Init.BaudRate = 115200;
    huart1.Init.WordLength = UART_WORDLENGTH_8B;
    huart1.Init.StopBits = UART_STOPBITS_1;
    HAL_UART_Init(&huart1);// 發送數據
    uint8_t data[] = "Hello Raspberry Pi!";
    HAL_UART_Transmit(&huart1, data, sizeof(data), HAL_MAX_DELAY);
  • 樹莓派端(Python):

    import serial
    ser = serial.Serial('/dev/ttyS0', 115200, timeout=1)  # 使用硬件串口(GPIO14/15)
    while True:if ser.in_waiting > 0:received = ser.readline().decode('utf-8').strip()print(f"Received: {received}")

注意事項

  • 禁用樹莓派串口控制臺(通過?raspi-config?→?Interface Options?→?Serial?→ 關閉登錄shell)。

  • 電平匹配:STM32是3.3V,樹莓派GPIO也是3.3V,可直接連接;若為5V設備需電平轉換。


2. I2C 通信(多設備共享總線)

適用場景:中低速、多設備(如多個傳感器)。

注意事項

  • 確保STM32和樹莓派的I2C地址不沖突。

  • 使用?i2cdetect -y 1?檢測設備地址。

硬件連接

STM32引腳樹莓派引腳備注
SCLSCL (GPIO3)接4.7kΩ上拉電阻到3.3V
SDASDA (GPIO2)接4.7kΩ上拉電阻到3.3V
GNDGND共地

軟件配置

  • STM32 端(作為從設備):

    #include "stm32f1xx_hal_i2c.h"I2C_HandleTypeDef hi2c1;
    hi2c1.Instance = I2C1;
    hi2c1.Init.ClockSpeed = 100000;  // 100kHz
    HAL_I2C_Init(&hi2c1);uint8_t buffer[10];
    HAL_I2C_Slave_Receive(&hi2c1, buffer, sizeof(buffer), HAL_MAX_DELAY);
  • 樹莓派端(Python,主設備):

    import smbus
    bus = smbus.SMBus(1)  # 樹莓派默認I2C總線
    address = 0x08        # STM32的I2C從地址
    bus.write_byte(address, 0x55)  # 發送數據


3. SPI 通信(高速數據傳輸)

適用場景:高速、全雙工(如攝像頭、顯示屏數據)。

注意事項

  • 樹莓派SPI需啟用(raspi-config?→?Interface Options?→?SPI)。

  • 電平匹配:確保3.3V兼容。

硬件連接

STM32引腳樹莓派引腳備注
SCKSCLK (GPIO11)時鐘線
MOSIMOSI (GPIO10)主發從收
MISOMISO (GPIO9)主收從發
CSCE0 (GPIO8)片選信號
GNDGND共地

軟件配置

  • STM32 端(SPI從模式):

    SPI_HandleTypeDef hspi1;
    hspi1.Instance = SPI1;
    hspi1.Init.Mode = SPI_MODE_SLAVE;
    HAL_SPI_Init(&hspi1);uint8_t tx_data = 0xAA, rx_data;
    HAL_SPI_TransmitReceive(&hspi1, &tx_data, &rx_data, 1, HAL_MAX_DELAY);

  • 樹莓派端(Python,主模式):

    import spidev
    spi = spidev.SpiDev()
    spi.open(0, 0)  # 總線0,設備0(CE0)
    spi.max_speed_hz = 1000000  # 1MHz
    resp = spi.xfer2([0x55])    # 發送并接收數據


4. USB CDC(虛擬串口)

適用場景:即插即用、免驅動(如調試日志傳輸)。
硬件連接:STM32的USB接口 ? 樹莓派USB端口。

軟件配置

  • STM32 端(使用CubeMX配置USB CDC):

    1. 在CubeMX中啟用USB Device模式,選擇CDC類。

    2. 生成代碼后,通過?CDC_Transmit_FS()?發送數據。

  • 樹莓派端(自動識別為?/dev/ttyACM0):

    import serial
    ser = serial.Serial('/dev/ttyACM0', 115200)
    ser.write(b"Hello STM32!")

注意事項

  1. 電平兼容:STM32和樹莓派GPIO均為3.3V,直接連接時避免5V設備。

  2. 共地:所有通信方式必須共地(GND連接)。

  3. 協議一致性:雙方波特率、地址、數據格式需匹配。

通信方式速率距離復雜度適用場景
UART低(≤1Mbps)簡單調試、傳感器數據
I2C中(≤400kHz)中等多從設備控制
SPI高(≥10Mbps)高速數據傳輸(如屏幕)
USB中等即插即用通信

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915586.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915586.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915586.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 數據持久化到Mysql

大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解數據持久化到Mysql 視頻在線地址&#xff…

【Java EE】多線程-初階-Thread 類及常見方法

多線程-初階2. Thread 類及常??法2.1 Thread 的常?構造?法2.2 Thread 的?個常?屬性2.3 啟動?個線程 - start()2.4 中斷?個線程2.5 等待?個線程 - join()2.6 獲取當前線程引?2.7 休眠當前線程本節?標? 認識多線程? 掌握多線程程序的編寫? 掌握多線程的狀態? 掌握…

LVS技術知識詳解(知識點+相關實驗部署)

目錄 1.1 LVS簡介 1.2 LVS體系結構 1.3 LVS相關術語 1.4 LVS工作模式 1.5 LVS工作原理 1.6 LVS調度算法 2.LVS相關實驗部署 2.1 lvs軟件相關信息 2.1.1 ipsadm常見參數 2.1.2 試例 2.2 LVS部署NAT模式 2.2.1 實驗環境 2.2.2 實驗步驟 2.2.2.1 實驗基礎環境 2.2.…

芋道導入邏輯

一、代碼 PostMapping("/import")Operation(summary "導入用戶")Parameters({Parameter(name "file", description "Excel 文件", required true),Parameter(name "updateSupport", description "是否支持更新&a…

gradle7.6.1+springboot3.2.4創建微服務工程

目錄 一、創建主工程cloud-demo并刪除src目錄 二、創建子工程user-service/order-service 三、更改父工程build.gradle文件 四、子工程使用mybatis框架 五、子工程使用mybatis-plus框架 六、相關數據庫創建 七、最終目錄結構 一、創建主工程cloud-demo并刪除src目錄 二、…

電腦windows系統深度維護指南

🖥? 電腦系統全方位維護指南 預防故障 提升性能 延長壽命 🔍 引言:為什么需要系統維護? 電腦如同汽車,定期保養可避免: ? 突發藍屏死機 ? 系統卡頓崩潰 ? 硬件過早損壞 ? 數據丟失風險 本指南提供…

字節內部流傳的數據分析手冊

之前2領導整理內部分享的,所以很多內部業務的分析,比如工作中怎么落地、怎么推進。(數據都是脫敏的哈) **里面的內容都偏應用,比如產品迭代怎么做數據評估、用戶增長靠什么指標拆解、AB實驗怎么設計、運營活動怎么閉環。**數據分析都是很實際…

Nginx Proxy Manager + LB + Openappsec + Web UI 構建下一代WAF

Nginx Proxy Manager + LB + Openappsec + Web UI部署 一、環境介紹 二、系統參數優化 三、安裝docker 四、創建docker網絡 五、創建測試容器 六、部署NPM和openappsec 1、下載docker-compose文件 2、拉取相關鏡像 3、web UI 獲取token 4、修改compose文件并安裝 七、登陸NPM配…

【React】npm install報錯npm : 無法加載文件 D:\APP\nodejs\npm.ps1,因為在此系統上禁止運行腳本。

使用vsCode打開react項目安裝依賴時報錯,把terminal打開的powershell改成command prompt即可

深入解析C#裝箱轉換:值類型如何“變身”為引用類型?

當你將 int i 賦值給 object oi 時, 看似簡單的操作背后,藏著一場精密的類型轉換革命!🔑 一、核心概念:什么是裝箱? 裝箱(Boxing) 是C#中的一種隱式轉換機制,它將值類型&…

java list 與set 集合的迭代器在進行元素操作時出現數據混亂問題及原因

為什么 List 和 Set 迭代器刪除結果不同?1. List 和 Set 的本質差異List(如 ArrayList):有序集合,元素按插入順序存儲,允許重復元素。迭代器遍歷時,元素按索引順序返回。刪除操作(通…

大語言模型:人像攝影的“達芬奇轉世”?——從算法解析到光影重塑的智能攝影革命

導言在攝影術誕生之初,達芬奇或許無法想象,他對于光影、比例和解剖的嚴謹研究,會在數百年后以另一種形式重生。今天,當攝影師面對復雜的光線環境或苦苦尋找最佳構圖時,一位由代碼構筑的“光影軍師”正悄然降臨——大語…

Java——MyBatis從入門到精通:一站式學習指南

MyBatis從入門到精通:一站式學習指南 作為一款優秀的半自動ORM框架,MyBatis以其靈活的SQL控制和簡潔的配置方式,成為Java后端開發中持久層框架的首選。本文將從基礎概念到高級特性,全面講解MyBatis的使用方法,包含實用…

面試150 添加與搜索單詞--數據結構設計

思路 通過哈希法去實現,這里主要描述search的思路:如果’.‘不在word中,我們只需要去查詢word在不在set中。如果’.‘存在,我們對哈希中的字符串進行遍歷w,如果當前字符串的長度不等于word跳過,對word進行遍歷&#xf…

學習打卡網站(搭子版本)

概述 之前用了網上的一些學習打卡類app,基本都是收費的,而且有些自己想要的功能卻沒有,甚至還有廣告,正好暑假是個需要容易懶惰的時間,所以干脆自己做了一個能和學習搭子一起記錄計劃的小網站。 昨天早上開始寫&#x…

分享如何在Window系統的云服務器上部署網站及域名解析+SSL

最近看到阿里云的服務器有個199的活動,買了個2核4G帶寬5M的服務器,用于小網站的運營也足夠,于是就買一個,并且我還挑了個新加坡的站點,本想著運營獨立站,用新加坡的站點外網訪問會更友好一點。于是問題就來…

FastAdmin系統框架通用操作平滑遷移到新服務器的詳細步驟-優雅草卓伊凡

FastAdmin系統框架通用操作平滑遷移到新服務器的詳細步驟-優雅草卓伊凡我們蜻蜓hr系統采用的后端框架就是fastadmin,因此我們平穩遷移以此為例,為什么要遷移一份是因為有甲方需要。遷移FastAdmin系統到新服務器需要確保數據完整性和系統功能正常。以下是…

Request和Response相關介紹

Request 和 Response 是什么? Request(請求對象):用來接收瀏覽器發過來的數據。 Response(響應對象):用來把服務器處理后的結果返回給瀏覽器。 1. request 的作用(獲取請求數據&am…

Springboot 實現熱部署

spring為開發者提供了一個名為spring-boot-devtools的模塊來使Spring Boot應用支持熱部署&#xff0c;提高開發者的開發效率&#xff0c;無需手動重啟Spring Boot應用。引入依賴<dependency><groupId>org.springframework.boot</groupId><artifactId>s…

虛擬機擴展磁盤容量后擴展分區大小

1. 首先檢查磁盤剩余空間sudo fdisk -l /dev/sda2. 如果有未分配空間&#xff0c;直接擴展分區sudo fdisk /dev/sda在fdisk交互界面中&#xff0c;依次寫入d # 刪除分區 3 # 例如選擇分區3&#xff08;/dev/sda3&#xff09; n # 新建分區 p # 主分區 3 # 分區號3 # 起始扇…