嵌入式硬件篇---TOF陀螺儀SPI液晶屏


文章目錄

  • 前言
  • 1. TOF傳感器(Time of Flight)
    • 原理
    • STM32使用方法
      • 硬件連接
        • SDA
        • SCL
        • VCC\GND
      • 軟件配置
        • 初始化I2C外設
        • 庫函數驅動:
        • 讀取數據
  • 2. 陀螺儀(如MPU6050)
    • 原理
    • STM32使用方法
      • 硬件連接
        • SDA/SCL
        • INT
        • VCC/GND
      • 軟件配置
        • 初始化I2C
        • 校準與配置
        • 讀取數據
  • 3. SPI液晶屏(如ST7735/ILI9341)
    • 原理
    • STM32使用方法
      • 硬件連接
        • SCK
        • MOSI
        • CS
        • DC
        • RESET
      • 軟件配置
        • SPI初始化
        • GPIO設置
        • 顯示數據
  • 4.整合與優化建議
    • 多外設共存
    • 實時性處理
    • 代碼結構
    • 調試工具
    • 常見問題
      • I2C通信失敗
      • SPI屏幕無顯示
      • 數據噪聲


前言

在STM32平臺上使用TOF傳感器陀螺儀SPI液晶屏需要結合硬件接口協議和嵌入式編程。


1. TOF傳感器(Time of Flight)

原理

TOF傳感器通過測量光(激光或紅外)從發射到被物體反射回來的**時間差(Time of Flight)**計算距離。公式為:

距離=𝑐?Δ𝑡/2
其中 𝑐是光速,Δ𝑡是時間差。

常見的TOF模塊如VL53L0X、VL6180X,使用I2C通信。

STM32使用方法

硬件連接

SDA

SDA:連接STM32的I2C數據引腳(如PB9)

SCL

SCL:連接I2C時鐘引腳(如PB8)

VCC\GND

VCC/GND:3.3V供電

軟件配置

初始化I2C外設

初始化I2C外設:使用STM32CubeMX配置I2C模式標準模式或快速模式)。

庫函數驅動:
// 示例:VL53L0X初始化
VL53L0X_Dev_t dev;
dev.I2cHandle = &hi2c1; // 指向配置好的I2C句柄
VL53L0X_Init(&dev);
讀取數據
uint16_t distance;
VL53L0X_RangingMeasurementData_t data;
VL53L0X_GetRangingMeasurementData(&dev, &data);
distance = data.RangeMilliMeter;

2. 陀螺儀(如MPU6050)

原理

陀螺儀基于MEMS技術,通過檢測科里奧利力引起的電容變化測量角速度。MPU6050整合了3軸陀螺儀和3軸加速度計,通過I2C或SPI輸出原始數據。

STM32使用方法

硬件連接

SDA/SCL

SDA/SCL:連接I2C引腳(如PB11/PB10)

INT

INT:中斷引腳(可選)

VCC/GND

VCC/GND:3.3V供電

軟件配置

初始化I2C

初始化I2C:配置STM32CubeMX,啟用I2C外設。

校準與配置
// 初始化MPU6050
MPU6050_Init(&hi2c2);
// 校準陀螺儀(需保持靜止)
MPU6050_Calibrate();
讀取數據
int16_t gyro_x, gyro_y, gyro_z;
MPU6050_ReadGyro(&gyro_x, &gyro_y, &gyro_z);
// 轉換為角速度(單位:°/s)
float gyro_x_dps = gyro_x / 131.0;

3. SPI液晶屏(如ST7735/ILI9341)

原理

SPI液晶屏通過串行外設接口(SPI)接收命令和數據。屏幕控制器(如ST7735)解析SPI數據,驅動像素顯示。SPI協議包含SCK時鐘、MOSI(主發從收)、CS片選和DC數據/命令控制線

STM32使用方法

硬件連接

SCK

SCK:SPI時鐘引腳(如PA5)

MOSI

MOSI:主輸出引腳(如PA7)

CS

CS:片選引腳(如PA4)

DC

DC:數據/命令控制(如PA3)

RESET

RESET:復位引腳(如PA2)

軟件配置

SPI初始化

SPI初始化:在STM32CubeMX中配置SPI為全雙工主模式,設置時鐘分頻(如8MHz)

GPIO設置

GPIO設置:配置CS、DC、RESET輸出模式

顯示數據
// 發送命令(如設置顯示區域)
void ST7735_WriteCommand(uint8_t cmd) {HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET); // DC=0表示命令HAL_SPI_Transmit(&hspi1, &cmd, 1, 100);
}// 發送像素數據
void ST7735_WriteData(uint8_t data) {HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET); // DC=1表示數據HAL_SPI_Transmit(&hspi1, &data, 1, 100);
}
// 示例:顯示紅色矩形
ST7735_FillScreen(ST7735_RED);

4.整合與優化建議

多外設共存

若同時使用I2C和SPI,需分配不同的GPIO,避免引腳沖突。
使用DMA傳輸減少CPU負載(如SPI屏刷新)。

實時性處理

陀螺儀數據讀取使用中斷或定時器觸發,確保采樣頻率(如100Hz)。
TOF傳感器可通過輪詢或中斷讀取

代碼結構

// 主循環示例
while (1) {// 讀取TOF距離uint16_t dist = VL53L0X_GetDistance();// 讀取陀螺儀數據int16_t gx, gy, gz;MPU6050_ReadGyro(&gx, &gy, &gz);// 更新屏幕顯示char buffer[50];sprintf(buffer, "Dist: %d mm", dist);ST7735_DrawString(10, 10, buffer, ST7735_WHITE, ST7735_BLACK);
}

調試工具

使用邏輯分析儀檢查SPI/I2C時序。
通過串口打印傳感器數據驗證。

常見問題

I2C通信失敗

I2C通信失敗:檢查上拉電阻(通常4.7kΩ)地址設置(MPU6050地址0x68)。

SPI屏幕無顯示

SPI屏幕無顯示:確認RESET時序DC引腳電平是否正確。

數據噪聲

數據噪聲:對陀螺儀進行軟件濾波(如滑動平均)。

通過合理配置外設和優化代碼邏輯,可在STM32上高效集成TOF、陀螺儀和SPI液晶屏


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

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

相關文章

【scikit-learn基礎】--『預處理』之 正則化

數據的預處理是數據分析,或者機器學習訓練前的重要步驟。 通過數據預處理,可以 提高數據質量,處理數據的缺失值、異常值和重復值等問題,增加數據的準確性和可靠性整合不同數據,數據的來源和結構可能多種多樣&#xff…

LeetCode Hot100 刷題筆記(2)—— 子串、普通數組、矩陣

目錄 前言 一、子串 1. 和為 K 的子數組 2. 滑動窗口最大值 3. 最小覆蓋子串 二、普通數組 4. 最大子數組和 5. 合并區間 6. 輪轉數組 7. 除自身以外數組的乘積 8. 缺失的第一個正數 三、矩陣 9. 矩陣置零 10. 螺旋矩陣 11. 旋轉圖像 12. 搜索二維矩陣 II 前言 一、子串&#…

【Git 常用操作指令指南】

一、初始化與配置 1. 設置全局賬戶信息 git config --global user.name "用戶名" # 設置全局用戶名 git config --global user.email "郵箱" # 設置全局郵箱 --global 表示全局生效,若需針對單個倉庫配置,可省略該參數 2.…

教培行業創建自己品牌的重要意義——教育培訓小程序

在競爭激烈的教培行業,創建自身品牌意義重大。 擁有獨特品牌能顯著提升機構競爭力與辨識度。如今教培市場同質化嚴重,一個亮眼的品牌小程序可使機構從眾多競爭者中脫穎而出,讓學員和家長快速識別并記住。 品牌小程序有助于增強信任度和口碑。…

Docker 介紹 · 安裝詳細教程

為什么選擇 Docker? ? 環境一致性 – 告別“在我機器上能跑”的問題,確保開發、測試、生產環境一致。 ? 高效輕量 – 秒級啟動,資源占用遠低于傳統虛擬機。 ? 跨平臺支持 – 可在任何支持 Docker 的環境中運行,包括云服務器、…

GitHub 上開源一個小項目的完整指南

GitHub 上開源一個小項目的完整指南 🚀 第一步:準備你的項目 在開源之前,確保項目是可用且有一定結構的: ? 最低要求 項目文件清晰、結構合理(比如:src/、README.md、LICENSE)項目能在本地正…

React 第三十節 使用 useState 和 useEffect Hook實現購物車

不使用 redux 實現 購物車案例 使用 React 自帶的 useState 和 useEffect Hook 即可實現購物車 export default function ShoppingCar() {// 要結算的商品 總數 以及總價const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…

藍橋杯第十一屆省賽C++B組真題解析

藍橋杯第十一屆省賽CB組真題解析 八、回文日期https://www.lanqiao.cn/problems/348/learning 方法一&#xff1a;暴力枚舉所有的日期&#xff0c;記錄有多少個回文日期。 #include <bits/stdc.h> using namespace std; int month[13]{0,31,28,31,30,31,30,31,31,30,31…

Python和MicroPython的解釋器區別

Python和MicroPython的解釋器不是同一個&#xff0c;它們在設計目標、實現方式和運行環境上都有顯著的區別。以下是它們的主要區別&#xff1a; 1. 底層實現 Python解釋器&#xff08;CPython&#xff09;&#xff1a; Python的標準解釋器是CPython&#xff08;C語言實現的Pyt…

Cython加密多層目錄中的Python腳本方案

近期有一個VueJavaDocker項目中需要加密Python腳本的需求&#xff0c;調研后決定采用Cython。 使用Cython編譯為二進制 步驟&#xff1a; 安裝Cython&#xff1a;pip install cython創建setup.py&#xff1a; from distutils.core import setup from Cython.Build import c…

力扣DAY40-45 | 熱100 | 二叉樹:直徑、層次遍歷、有序數組->二叉搜索樹、驗證二叉搜索樹、二叉搜索樹中第K小的元素、右視圖

前言 簡單、中等 √ 好久沒更了&#xff0c;感覺二叉樹來回就那些。有點變懶要警醒&#xff0c;不能止步于笨方法&#xff01;&#xff01; 二叉樹的直徑 我的題解 遍歷每個節點&#xff0c;左節點最大深度右節點最大深度當前節點當前節點為中心的直徑。如果左節點深度更大…

頭歌數據庫【數據庫概論】第10-11章 故障恢復與并發控制

第1關&#xff1a;數據庫恢復技術 1、事務的&#xff08; A&#xff09;特性要求事務必須被視為一個不可分割的最小工作單元 A、原子性 B、一致性 C、隔離性 D、持久性 2、事務的&#xff08;C &#xff09;特性要求一個事務在執行時&#xff0c;不會受到其他事務的影響。 A、原…

windows下,cursor連接MCP服務器

1.下載并安裝node 安裝后&#xff0c;在cmd命令框中&#xff0c;輸入命令node -v可以打印版本號&#xff0c;證明安裝完成 2.下載MCP服務器項目 在MCP服務器找到對應項目&#xff0c;這里以server-sequential-thinking為例子 在本地cmd命令窗口&#xff0c;使用下面命令下載…

前端配置husky,commit-lint導致的git提交錯誤:git xx@0.0.0 lint:lint-staged

前端配置husky&#xff0c;commit-lint導致的git提交錯誤&#xff1a;git xx0.0.0 lint:lint-staged git commit -m "xxx"時出現以下報錯&#xff0c;可能是前端配置husky&#xff0c;commit-lint的原因 //報錯信息 git xx0.0.0 lint:lint-staged首先要知道出現這個錯…

各種場景的ARP攻擊描述筆記(超詳細)

1、ARP報文限速 上一章我們說過ARP報文也是需要上送CPU進行處理的協議報文,如果設備對收到的大量ARP報文全部進行處理,可能導致CPU負荷過重而無法處理其他業務。因此,在處理之前需要對ARP報文進行限速,以保護CPU資源。 1.根據源MAC地址或源IP地址進行ARP限速 當設備檢測到某一…

Django 創建CSV文件

Django使用Python內置的CSV庫來創建動態的CSV&#xff08;逗號分隔值&#xff09;文件。我們可以在項目的視圖文件中使用這個庫。 讓我們來看一個例子&#xff0c;這里我們有一個Django項目&#xff0c;我們正在實現這個功能。創建一個視圖函數 getfile() 。 Django CSV例子 …

HTTPS為何仍有安全漏洞?解析加密協議下的攻擊面

本文深度剖析HTTPS協議在傳輸層、證書體系、配置管理三個維度的安全盲區&#xff0c;揭示SSL/TLS加密掩蓋下的11類攻擊路徑。基于Equifax、SolarWinds等重大事件的技術復盤&#xff0c;提供包含自動化證書巡檢、動態協議升級、加密流量威脅檢測的立體防御方案。 HTTPS不等于絕…

MyBatis 動態 SQL 使用詳解

&#x1f31f; 一、什么是動態 SQL&#xff1f; 動態 SQL 是指根據傳入參數&#xff0c;動態拼接生成 SQL 語句&#xff0c;不需要寫多個 SQL 方法。MyBatis 提供了 <if>、<choose>、<foreach>、<where> 等標簽來實現這類操作 ? 二、動態 SQL 的優點…

樂觀鎖與悲觀鎖的使用場景

悲觀鎖的應用場景 悲觀鎖的基本思想是假設并發沖突會發生&#xff0c;因此在操作數據時會先鎖定數據&#xff0c;直到完成操作并提交事務后才釋放鎖。這種方式適用于寫操作較多、并發沖突可能性較高的場景。 高寫入比例的數據庫操作&#xff1a;如果系統中有很多寫操作&#x…

cpp(c++)win 10編譯GDAL、PROJ、SQLite3、curl、libtiff

cpp&#xff08;c&#xff09;編譯GDAL、PROJ、SQLite3 Sqlite3libtiffcurlprojGDAL Sqlite3 1、下載 Sqlite3 源碼、工具、二進制預編譯 exe Sqlite3 官網&#xff1a;https://www.sqlite.org/download.html 下載 sqlite-amalgamation-3430200.zipsqlite-dll-win64-x64-3430…