久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

STM32F103驅(qū)動(dòng)VL53L0X激光測距:IIC驅(qū)動(dòng)源碼詳解與避坑指南

STM32F103驅(qū)動(dòng)VL53L0X激光測距:IIC驅(qū)動(dòng)源碼詳解與避坑指南 簡介基于STM32F103單片機(jī)的VL53L0X測距傳感器IIC接口驅(qū)動(dòng)源碼面向嵌入式開發(fā)者和STM32入門學(xué)習(xí)者解決激光測距模塊在Keil MDK環(huán)境下的快速集成與調(diào)用問題。工程在KEIL UV5下開發(fā)完成引腳與IIC配置后可直接運(yùn)行主程序依次完成LED指示燈、SysTick定時(shí)器與USART串口初始化并調(diào)用vl53l0x_start_single_test執(zhí)行單次測距狀態(tài)判斷與串口輸出接口均已預(yù)留模塊劃分簡潔注釋清晰便于順著思路理解驅(qū)動(dòng)架構(gòu)。資源包共238個(gè)文件其中h頭文件47個(gè)、c源文件42個(gè)核心驅(qū)動(dòng)代碼完整另附uvprojx工程文件可直接用Keil打開編譯、hex燒錄文件可快速驗(yàn)證map映射文件與編譯中間產(chǎn)物也能輔助排查問題整體約8.28MB。已有1569人學(xué)習(xí)下載對熟悉IIC時(shí)序和傳感器驅(qū)動(dòng)移植的初學(xué)者具有較好的參考價(jià)值。1. 從 IIC 波形臺(tái)階到 STM32F103 與 VL53L0X 的這場“硬仗”做嵌入式開發(fā)這幾年我上手過的測距方案不算少超聲波、紅外、激光三角都有各自的脾氣。但如果你手頭正好有一塊 STM32F103 最小系統(tǒng)板又想把測距精度做到毫米級VL53L0X 這顆激光測距傳感器幾乎是繞不開的選擇。它用的是 ToF飛行時(shí)間原理而不是靠反射光強(qiáng)度估距離所以在弱光、強(qiáng)光下都比紅外靠譜得多它和 MCU 之間走的是 IIC 接口也就是標(biāo)題里那個(gè)“IIC 驅(qū)動(dòng)程序源代碼”要解決的核心問題。我最早在 STM32F103 上調(diào)試 VL53L0X 時(shí)最大的感受是硬件連接十分鐘就能搞定真正耗時(shí)間的全在 IIC 時(shí)序、寄存器讀寫和那個(gè)復(fù)雜到讓人頭皮發(fā)麻的 API 初始化流程上。更別提用示波器看 SCL/SDA 波形時(shí)發(fā)現(xiàn)臺(tái)階、用邏輯分析儀抓到 ACK 丟失這類玄學(xué)問題。這篇筆記我就把基于 STM32F103 的 VL53L0X IIC 驅(qū)動(dòng)從原理到源碼、再到排錯(cuò)方法完整拆一遍給你一條能直接照著復(fù)現(xiàn)的落地路徑。2. VL53L0X 為什么非用 IIC 不可接口選型與上拉電阻的關(guān)鍵參數(shù)2.1 從 ToF 原理看 VL53L0X 的通信需求VL53L0X 內(nèi)部集成了激光發(fā)射器、單光子雪崩二極管陣列和復(fù)雜的測距算法引擎。它對外暴露的接口只有一路 IICI2C而且芯片本身不帶地址線7 位地址是寫死的 0x29想在同一總線上掛多顆就得靠 XSHUT 引腳逐個(gè)上電復(fù)位來改地址。這顆傳感器不提供 SPI 或 UART 選項(xiàng)所以 IIC 驅(qū)動(dòng)不是“選型之一”而是唯一路徑。這里要先糾正一個(gè)常見誤解很多人覺得 IIC 就是兩根線隨便接一接就能通但實(shí)際上 VL53L0X 的數(shù)據(jù)手冊明確規(guī)定 SCL 和 SDA 需要外部上拉電阻。我見過不少翻車案例都是直接把 STM32F103 的 PB6/PB7 接到模塊上忘了上拉結(jié)果讀寫寄存器時(shí)好時(shí)壞。IIC 是開漏協(xié)議沒有上拉電阻總線根本拉不至高電平波形會(huì)變成一條緩慢爬升的斜線通信時(shí)序自然一塌糊涂。2.2 上拉電阻阻值怎么定1.8k 到 4.7k 的取舍上拉電阻的取值直接影響 IIC 的上升沿時(shí)間。VL53L0X 支持標(biāo)準(zhǔn)模式100kHz和快速模式400kHzSTM32F103 的 IIC 外設(shè)跑 400kHz 完全沒問題但前提是上拉電阻要匹配。電阻太大RC 充電時(shí)間常數(shù)變大上升沿變緩400kHz 下可能觸發(fā) SCL 高電平時(shí)間不足電阻太小總線驅(qū)動(dòng)電流過大雖然波形更陡但會(huì)增加功耗且對長線傳輸不友好。我一般會(huì)分兩種情況處理如果模塊和 MCU 在同一個(gè) PCB 上、走線很短用 4.7k 上拉到 3.3V 就夠了這也是絕大多數(shù) VL53L0X 模塊的默認(rèn)配置如果用了杜邦線連接線長超過 10cm或者周圍有電機(jī)、繼電器這類干擾源我會(huì)直接換成 2.2k 甚至 1.8k把上升沿壓下來。還有一個(gè)容易忽視的點(diǎn)STM32F103 的 PB6/PB7 如果配置成了開漏輸出片上沒有上拉必須靠外部電阻如果你圖省事把引腳配置成推挽輸出那總線就變成單端驅(qū)動(dòng)了雖然短線上也能跑通但一旦掛多設(shè)備就會(huì)出現(xiàn)總線沖突這個(gè)后面講多設(shè)備掛載時(shí)再細(xì)說。// 標(biāo)準(zhǔn)外設(shè)庫方式初始化 IIC 引腳PB6SCLPB7SDA GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_OD; // 開漏輸出必須配合外部上拉 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; // 高速模式下壓擺率足夠 GPIO_Init(GPIOB, GPIO_InitStructure);這里把引腳配置成開漏輸出邏輯上完全兼容 IIC 協(xié)議因?yàn)殚_漏模式下器件只能拉低總線拉高靠外部上拉電阻這正是 IIC 總線仲裁機(jī)制的基礎(chǔ)。50MHz 速度等級是為了保證 GPIO 翻轉(zhuǎn)速率不成為 400kHz 時(shí)序的瓶頸雖然實(shí)際 IIC 翻轉(zhuǎn)頻率遠(yuǎn)低于 50MHz但 STM32F103 的 GPIO 輸出驅(qū)動(dòng)能力配置在高速檔時(shí)邊沿更陡抗干擾能力更好。2.3 5V 轉(zhuǎn) 3.3V 電平與 VL53L0X 的兼容性邊界熱詞里提到“stm32f103 5v轉(zhuǎn)3.3v電路”這背后是一個(gè)關(guān)鍵約束VL53L0X 的絕對最大額定電壓是 3.6V供電必須用 3.3V不能接 5V。很多 STM32F103 最小系統(tǒng)板是 3.3V 供電的這部分不難難的是如果周圍還有其他 5V 器件、或者你手上的模塊是 5V 邏輯的舊器件就得小心電平轉(zhuǎn)換。VL53L0X 模塊上一旦接了 5V大概率直接燒毀內(nèi)部的 LDO 和傳感器核心。我自己的習(xí)慣是不管模塊上有沒有板載穩(wěn)壓一律外部供 3.3V并且用萬用表確認(rèn)模塊 VIN 引腳電壓不超過 3.45V。如果系統(tǒng)里確實(shí)只有 5V 電源就得先過一個(gè) AMS1117-3.3 或更低壓差的 LDO再給 VL53L0X 供電同時(shí) STM32F103 的 IIC 引腳如果被外部上拉到 5V也要通過電平轉(zhuǎn)換芯片如 TXS0102或分壓電阻把高電平鉗位到 3.3V否則 VL53L0X 的 IIC 引腳可能因?yàn)檫^壓進(jìn)入閂鎖狀態(tài)。3. 驅(qū)動(dòng)源碼的核心骨架從寄存器讀寫到 API 移植的完整鏈路3.1 IIC 底層驅(qū)動(dòng)用 GPIO 模擬還是用硬件 IIC這是 STM32F103 上做 VL53L0X 驅(qū)動(dòng)最糾結(jié)的一個(gè)選擇。STM32F103 有硬件 IIC 外設(shè)但老工程師都知道這塊芯片的硬件 IIC 在早期批次里有著名的 Bug雖然實(shí)際上大部分場景能用但總有一些超頻、總線繁忙、多主沖突的邊界情況會(huì)莫名其妙卡死。我自己的血淚經(jīng)驗(yàn)是VL53L0X 的驅(qū)動(dòng)本來就復(fù)雜初始化要讀寫上百個(gè)寄存器而且官方 API 里有一些地方會(huì)連續(xù)做多次沒有 STOP 的重復(fù)起始條件這時(shí)候硬件 IIC 如果配置不對就可能等 BUSY 位一直不釋放卡死在 while 循環(huán)里。所以常見的從業(yè)方案是直接用 GPIO 模擬 IIC。兩條 GPIO 線用延時(shí)函數(shù)控制翻轉(zhuǎn)雖然會(huì)占用 CPU但對 VL53L0X 這種單次測距才幾十毫秒的傳感器來說完全夠用。而且 GPIO 模擬 IIC 的時(shí)序完全可控出了問題用邏輯分析儀一看就知道是哪一步不對比對著數(shù)據(jù)手冊查硬件外設(shè)寄存器狀態(tài)快得多。// GPIO 模擬 IIC 的起始條件 void VL53L0X_I2C_Start(void) { VL53L0X_SDA_H(); VL53L0X_SCL_H(); delay_short(10); // 保持時(shí)間確保 SDA 建立 VL53L0X_SDA_L(); // SDA 先拉低 delay_short(10); VL53L0X_SCL_L(); // SCL 再拉低完成起始條件 delay_short(10); }這里的關(guān)鍵是時(shí)序順序IIC 起始條件是 SCL 為高時(shí) SDA 產(chǎn)生下降沿。如果 SDA 拉低后沒有等 SCL 也拉低就開始傳數(shù)據(jù)從機(jī)可能會(huì)誤判起始條件。delay_short 是微秒級延時(shí)我建議直接在 startup 文件或 systick 上做一個(gè)簡易延時(shí)函數(shù)不要用 for 循環(huán)空轉(zhuǎn)因?yàn)榫幾g器優(yōu)化等級不同for 循環(huán)的空轉(zhuǎn)時(shí)間會(huì)變驅(qū)動(dòng)在 -O0 下能跑到 -O2 下就亂套了。// GPIO 模擬 IIC 寫一個(gè)字節(jié)返回 ACK 狀態(tài) uint8_t VL53L0X_I2C_WriteByte(uint8_t data) { uint8_t ack 0; for (uint8_t i 0; i 8; i) { if (data 0x80) VL53L0X_SDA_H(); else VL53L0X_SDA_L(); data 1; VL53L0X_SCL_H(); delay_short(5); VL53L0X_SCL_L(); delay_short(5); } VL53L0X_SDA_H(); // 釋放 SDA準(zhǔn)備讀 ACK VL53L0X_SCL_H(); delay_short(5); ack VL53L0X_SDA_READ(); // 在第 9 個(gè)時(shí)鐘讀取從機(jī) ACK VL53L0X_SCL_L(); delay_short(5); return ack; }這段代碼是整套驅(qū)動(dòng)的底層地基。寫字節(jié)時(shí)從高位開始每發(fā)一位拉高 SCL讓從機(jī)在 SCL 高電平期間采樣 SDA 上的電平然后拉低 SCL 準(zhǔn)備下一位。發(fā)送完 8 位后主機(jī)釋放 SDA在第 9 個(gè)時(shí)鐘周期讀取從機(jī)的應(yīng)答信號。有一個(gè)細(xì)節(jié)容易被忽略讀 ACK 之前必須把 SDA 引腳模式從輸出切換為輸入或者至少把輸出寄存器寫 1 讓它呈現(xiàn)高阻態(tài)。我用的是開漏輸出加外部上拉的方案所以直接寫 1 就能釋放總線但如果你的引腳配置成了推挽輸出這一步就會(huì)把 SDA 死死拉高永遠(yuǎn)讀不到 ACK。3.2 官方 API 的移植套路從 ST 官網(wǎng) SDK 到 Keil MDK 工程VL53L0X 的官方驅(qū)動(dòng)包是一整套 API包含約 20 個(gè) C 源文件核心文件是 vl53l0x_api.c、vl53l0x_i2c.c 和 vl53l0x_platform.c。這些文件不要求你全部讀懂但需要把平臺(tái)相關(guān)的接口對接上。最省事的做法是只保留 API 目錄下的必要文件然后把 vl53l0x_i2c.c 里的讀寫函數(shù)替換成你自己的 GPIO 模擬 IIC。// 在 vl53l0x_platform.c 中對接底層 IIC 讀寫 int32_t VL53L0X_WriteMulti(VL53L0X_Dev_t *dev, uint8_t index, uint8_t *pdata, uint32_t count) { VL53L0X_I2C_Start(); VL53L0X_I2C_WriteByte((dev-I2cDevAddr 1) | 0); // 從機(jī)地址 寫標(biāo)志 VL53L0X_I2C_WriteByte(index); // 寄存器地址 for (uint32_t i 0; i count; i) { VL53L0X_I2C_WriteByte(pdata[i]); } VL53L0X_I2C_Stop(); return VL53L0X_ERROR_NONE; } int32_t VL53L0X_ReadMulti(VL53L0X_Dev_t *dev, uint8_t index, uint8_t *pdata, uint32_t count) { VL53L0X_I2C_Start(); VL53L0X_I2C_WriteByte((dev-I2cDevAddr 1) | 0); // 先寫寄存器地址 VL53L0X_I2C_WriteByte(index); VL53L0X_I2C_Start(); // 重復(fù)起始條件 VL53L0X_I2C_WriteByte((dev-I2cDevAddr 1) | 1); // 從機(jī)地址 讀標(biāo)志 for (uint32_t i 0; i count; i) { if (i count - 1) pdata[i] VL53L0X_I2C_ReadByte(1); // 最后一個(gè)字節(jié)前返回 ACK else pdata[i] VL53L0X_I2C_ReadByte(0); // 最后一字節(jié)返回 NACK } VL53L0X_I2C_Stop(); return VL53L0X_ERROR_NONE; }這段移植代碼里最講究的是讀多字節(jié)時(shí)的 ACK/NACK 處理讀倒數(shù)第二個(gè)字節(jié)之前返回 ACK告訴從機(jī)繼續(xù)發(fā)讀到最后一個(gè)字節(jié)時(shí)返回 NACK然后再發(fā) Stop 條件從機(jī)就知道數(shù)據(jù)傳輸結(jié)束了。如果順序反了要么多讀一個(gè)字節(jié)造成后續(xù)時(shí)序錯(cuò)亂要么少收一個(gè)字節(jié)導(dǎo)致數(shù)據(jù)不完整。這也是很多新手移植時(shí)只改底層不處理 ACK導(dǎo)致測距數(shù)據(jù)忽大忽小的原因之一。3.3 初始化流程里那些繞不開的“黑匣子”寄存器VL53L0X 的初始化不像普通傳感器那樣寫幾個(gè)配置寄存器就能用。官方 API 的初始化過程會(huì)執(zhí)行校準(zhǔn)、設(shè)置參考 SPAD、寫入 NVM 數(shù)據(jù)等一系列操作整個(gè)流程下來要寫幾百個(gè)寄存器。這些寄存器的含義大部分沒有公開詳細(xì)說明驅(qū)動(dòng)里把它們當(dāng)作黑匣子處理你只需要保證每個(gè) API 調(diào)用順序正確。// VL53L0X 初始化的標(biāo)準(zhǔn)調(diào)用順序 VL53L0X_Dev_t dev; dev.I2cDevAddr 0x52; // VL53L0X 的 7 位地址 0x29 左移一位后的 8 位地址 dev.comms_speed_khz 400; VL53L0X_Data_Init(dev); // 寫入基礎(chǔ)配置 VL53L0X_Static_Init(dev); // 加載 NVM 校準(zhǔn)數(shù)據(jù) VL53L0X_Perform_RefCalibration(dev); // 執(zhí)行參考校準(zhǔn) VL53L0X_Set_DeviceMode(dev, VL53L0X_DEVICEMODE_SINGLE_RANGING); // 單次測距模式 VL53L0X_SetGpioConfig(dev, 0, 0, VL53L0X_REG_GPIO_HTR_GPIO_INTR_SOURCE_GPIO_NEW_SAMPLE_READY, VL53L0X_REG_GPIO_HTR_GPIO_INTR_POLARITY_HIGH, VL53L0X_REG_GPIO_HTR_GPIO_OUTPUT_ACTIVE_HIGH, VL53L0X_REG_GPIO_HTR_GPIO_OUTPUT_ACTIVE_HIGH);這里有一個(gè)新手容易踩的坑dev.I2cDevAddr 不是 0x29而是 0x52。因?yàn)?IIC 地址是 7 位0x29 是芯片的 7 位地址但驅(qū)動(dòng)里函數(shù)的入?yún)⑼ǔJ?8 位地址也就是 7 位地址左移一位加上讀寫位。0x29 1 0x52如果你直接填 0x29驅(qū)動(dòng)會(huì)把地址當(dāng)成 0x14因?yàn)?0x29 的最高位被當(dāng)成讀寫位丟掉了IIC 總線上根本找不到從機(jī)。這個(gè)地址換算問題我見過至少不下五次每次都是找不到傳感器時(shí)排查半天才發(fā)現(xiàn)的。4. 在 STM32F103 最小系統(tǒng)上跑通測距工程搭建與最小可復(fù)現(xiàn)流程4.1 Keil MDK 工程搭建Pack 包、芯片選型和 ST-Link 調(diào)試熱詞里提到“stm32f103 keil mdk工程搭建與st-link調(diào)試全流程”這里就把完整流程濃縮成可執(zhí)行步驟。第一步是裝芯片支持包STM32F103 對應(yīng)的 Pack 包在 Keil 的 Pack Installer 里直接搜 STM32F1xx_DFP 安裝即可。裝完后新建工程芯片型號選 STM32F103C8這里注意如果你的板子是 C8T6 最小系統(tǒng)板Flash 是 64KB如果代碼編譯后超過這個(gè)容量鏈接器會(huì)報(bào)錯(cuò)需要裁剪調(diào)試信息或換用 CB/RC 等更大 Flash 的型號。工程文件結(jié)構(gòu)我一般這么組織user 目錄放 main.c 和中斷服務(wù)函數(shù)driver 目錄放 GPIO、USART、IIC 的底層驅(qū)動(dòng)vl53l0x 目錄放從官方 SDK 拷過來的 API 文件。編譯前要檢查一個(gè)關(guān)鍵設(shè)置C/C 編譯選項(xiàng)里的 C99 Mode 必須勾上因?yàn)?VL53L0X 的源碼里大量使用 C99 的變量聲明方式不勾這個(gè)編譯會(huì)報(bào)一堆“identifier”錯(cuò)誤。// main.c 中最簡測距主循環(huán) int main(void) { uint16_t distance_mm 0; VL53L0X_RangingMeasurementData_t measure_data; delay_init(72); // 在 72MHz 主頻下初始化微秒延時(shí) uart_init(115200); // 串口打印用 I2C_GPIO_Init(); // 初始化 PB6/PB7 開漏輸出 VL53L0X_Data_Init(dev); VL53L0X_Static_Init(dev); VL53L0X_Perform_RefCalibration(dev); VL53L0X_Set_DeviceMode(dev, VL53L0X_DEVICEMODE_SINGLE_RANGING); while (1) { VL53L0X_PerformSingleRangingMeasurement(dev, measure_data); distance_mm measure_data.RangeMilliMeter; printf(distance: %d mm\r\n, distance_mm); delay_ms(200); } }這段代碼就是一個(gè)能跑通的最小框架。delay_init(72) 這個(gè) 72 是關(guān)鍵它告訴延時(shí)函數(shù)系統(tǒng)主頻是 72MHz如果這里填錯(cuò)所有微秒延時(shí)都會(huì)按錯(cuò)誤的主頻縮放IIC 時(shí)序會(huì)變得極其詭異。VL53L0X_PerformSingleRangingMeasurement 是阻塞式測距內(nèi)部會(huì)等測量完成單次耗時(shí)大約 23ms 到 50ms 不等取決于測距模式和精度設(shè)置。如果不需要等結(jié)果可以改用中斷模式讓傳感器測量完成后通過 GPIO 中斷通知 MCU。4.2 VL53L0X 與 STM32F103 之間的關(guān)鍵上拉電路實(shí)測你可以做一個(gè)非常簡單的實(shí)驗(yàn)來驗(yàn)證上拉電阻的作用先把 4.7k 上拉接好用示波器看 SCL 波形上升沿大約是幾十納秒然后拔掉上拉電阻再看波形上升沿會(huì)變成一條幾微秒的緩慢爬升曲線而且高電平可能根本到不了 3.3V 就會(huì)被下一幀的下降沿打斷。如果你沒有示波器用邏輯分析儀抓也能看出明顯的“臺(tái)階”。上拉電阻的這個(gè)“臺(tái)階”在 SCL 和 SDA 上表現(xiàn)形式略有不同。SCL 上的臺(tái)階會(huì)讓從機(jī)在每個(gè)時(shí)鐘周期的高電平時(shí)間不足嚴(yán)重時(shí)芯片直接不響應(yīng)SDA 上的臺(tái)階會(huì)影響數(shù)據(jù)采樣窗口表現(xiàn)為讀回來的寄存器值偶爾是錯(cuò)的。所以熱詞里“iic波形出現(xiàn)臺(tái)階”這個(gè)問題八成不是信號反射而是上拉電阻失效或阻值過大導(dǎo)致的充放電時(shí)間過長。遇到這種問題第一件事不是換主控、調(diào)延時(shí)而是檢查上拉電阻的阻值和供電軌。// 用 STM32F103 的 ADC 簡單驗(yàn)證 VL53L0X 供電電壓可選步驟 // 將 VL53L0X VIN 經(jīng)過 10k10k 分壓后接入 PA0 ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_Clock ADC_PCLK2_Div8; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_Init(ADC1, ADC_InitStructure); ADC_Cmd(ADC1, ENABLE); uint16_t read_vin_voltage(void) { ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); return ADC_GetConversionValue(ADC1); // 實(shí)際電壓 ADC值 * 2 * 3.3 / 4096 }注意我在 ADC 采樣時(shí)間上選了最長的 239.5 個(gè)周期這是因?yàn)闇y量對象的電源線可能有紋波短采樣時(shí)間下采樣到尖峰會(huì)被誤判為過壓。分壓電阻的精度也要注意10k10k 分壓后ADC 讀到的是 VIN 的一半如果 VIN 是 3.3VADC 讀到約 1.65V對應(yīng) ADC 值約 2047。這個(gè)驗(yàn)證手段是為了排除供電不足導(dǎo)致傳感器初始化失敗的問題。4.3 第一次上電如何判斷驅(qū)動(dòng)是真的通了驅(qū)動(dòng)移植完上電后先不要急著看測距數(shù)據(jù)先做一個(gè)最簡單的自我檢查通過 IIC 讀 VL53L0X 的 ID 寄存器。0xC0 和 0xC1 這兩個(gè)寄存器分別存儲(chǔ)芯片型號 ID 和版本號固定值分別是 0xEE 和 0xAA。如果讀出來這個(gè)值說明 IIC 鏈路是通的地址換算沒錯(cuò)上拉電阻也夠用如果讀回來全是 0xFF說明總線根本沒有從機(jī)應(yīng)答大概率是地址填錯(cuò)或 SDA/SCL 接反了如果讀回來是隨機(jī)跳變的數(shù)說明時(shí)序有問題可能是延時(shí)不匹配或上拉電阻偏大。// 讀 VL53L0X ID 寄存器的自檢代碼 uint8_t id_0 0; uint8_t id_1 0; VL53L0X_I2C_Start(); VL53L0X_I2C_WriteByte(0x52); // 8位地址 VL53L0X_I2C_WriteByte(0xC0); // ID 寄存器地址 VL53L0X_I2C_Start(); // 重復(fù)起始 VL53L0X_I2C_WriteByte(0x53); // 地址 讀標(biāo)志 id_0 VL53L0X_I2C_ReadByte(0); VL53L0X_I2C_Stop(); if (id_0 0xEE) { printf(VL53L0X detected!\r\n); } else { printf(IIC comm failure, id0x%02X\r\n, id_0); }這段自檢代碼的精髓在于它繞開了整個(gè)官方 API只用最底層的 GPIO 模擬 IIC 讀寫一個(gè)寄存器把問題域縮到最小。如果這一步就失敗了不要急著深入 API先排查硬件連接如果這一步通過再跑完整初始化流程就能精準(zhǔn)定位問題出在 API 配置還是硬件鏈路上。我每次移植一個(gè)新的 VL53L0X 模塊到某塊板子上都會(huì)先做這個(gè) ID 自檢它能幫你至少省掉半天排查時(shí)間。5. IIC 驅(qū)動(dòng)常見問題避坑指南現(xiàn)象、原因與解決5.1 波形里有臺(tái)階傳感器偶爾無響應(yīng)現(xiàn)象邏輯分析儀抓 SCL/SDA 波形發(fā)現(xiàn)信號不是陡峭的方波而是有明顯的斜坡甚至臺(tái)階VL53L0X 有時(shí)能讀到 ID有時(shí)讀不到。原因上拉電阻阻值偏大加上總線電容線纜、模塊上的電容、芯片引腳寄生電容導(dǎo)致 RC 時(shí)間常數(shù)過大信號上升沿太慢。尤其在 400kHz 模式下高電平時(shí)間被壓縮從機(jī)采樣窗口落在上升沿中間導(dǎo)致時(shí)序違規(guī)。解決先把總線降速到 100kHz 試試如果問題消失就基本確認(rèn)是時(shí)序邊沿問題。然后把上拉電阻從 4.7k 換成 2.2k或者把總線走線縮短。我自己的標(biāo)準(zhǔn)做法是杜邦線連接一律用 2.2kPCB 走線短距離再用 4.7k。還有一個(gè)小技巧是給 VL53L0X 模塊的 VIN 引腳并聯(lián)一個(gè) 100nF 和 10uF 電容減少電源紋波對 IIC 輸出的調(diào)制作用。5.2 地址換算錯(cuò)誤導(dǎo)致設(shè)備無應(yīng)答現(xiàn)象IIC 總線上用邏輯分析儀能看到波形但 VL53L0X 從不 ACK讀任何寄存器都返回 0xFF。數(shù)據(jù)手冊上明明寫著地址是 0x29。原因驅(qū)動(dòng)代碼里 I2cDevAddr 字段填成了 0x29而 API 內(nèi)部會(huì)把這個(gè)值左移一位作為 8 位地址發(fā)送或者反過來你直接填了 0x52 但 API 又做了一次左移。這類地址換算錯(cuò)誤在多個(gè)廠商的驅(qū)動(dòng)里都很常見因?yàn)橛行?qū)動(dòng)用 7 位地址有些用 8 位地址接口歸一化做得不好。解決直接看驅(qū)動(dòng)源碼里發(fā)送地址的那一行確認(rèn)它是把 I2cDevAddr 左移一位還是直接用。VL53L0X 官方驅(qū)動(dòng)是直接用 I2cDevAddr 作為 8 位地址發(fā)送所以你要填 0x52。如果你不確定當(dāng)前驅(qū)動(dòng)是哪種約定用邏輯分析儀抓起始條件后的第一個(gè)字節(jié)數(shù)一下實(shí)際發(fā)送的地址值就能反推出應(yīng)該填什么。5.3 初始化卡死在 while 循環(huán)里現(xiàn)象調(diào)用 VL53L0X_Data_Init 后程序進(jìn)入死循環(huán)在調(diào)試模式下看到卡在某個(gè) while (status BUSY) 類似的等待代碼。原因最常見的是 IIC 底層讀寫返回值恒為 0 或恒為 1導(dǎo)致 API 內(nèi)部的狀態(tài)機(jī)反復(fù)重試還有一些情況是傳感器在初始化中途掉電或復(fù)位導(dǎo)致 API 后續(xù)讀取的寄存器值全部無效。解決在 IIC 讀寫函數(shù)里加入超時(shí)機(jī)制比如連續(xù)重試 3 次仍失敗就返回錯(cuò)誤碼而不是無限死等。同時(shí)在 main 函數(shù)開頭加一個(gè)延時(shí) 100ms等 VL53L0X 上電穩(wěn)定后再初始化。另外注意 STM32F103 的 GPIO 模擬 IIC 引腳如果有第二個(gè)外設(shè)復(fù)用比如 PB6/PB7 默認(rèn)是 USART1 的 TX/RX需要確認(rèn)沒有外設(shè)搶占引腳否則總線會(huì)被 USART 的電平干擾。5.4 Keil 編譯報(bào)錯(cuò) peer 未定義或函數(shù)找不到現(xiàn)象移植官方驅(qū)動(dòng)時(shí)編譯報(bào)錯(cuò)提示找不到 VL53L0X_GetDeviceAddress 等函數(shù)或者在鏈接階段報(bào)一堆 undefined symbol。原因官方 SDK 里的源碼文件不是每個(gè)都需要編譯的有些文件是參考實(shí)現(xiàn)有些是平臺(tái)相關(guān)。編譯時(shí)如果缺少 vl53l0x_platform.c 或者包含路徑?jīng)]有覆蓋到 API 目錄鏈接器就找不到函數(shù)實(shí)現(xiàn)。解決檢查 Keil 工程的 Include Paths 是否包含 SDK 的 Core/inc 目錄確保所有以 vl53l0x 開頭的 .c 文件都添加到了工程中但要注意不要重復(fù)添加同一個(gè)文件Keil 會(huì)編譯兩次導(dǎo)致重復(fù)定義。如果還有問題在編譯選項(xiàng)里打開 “One ELF Section per Function” 可以減小未使用函數(shù)導(dǎo)致的鏈接誤差。這里提一下熱詞里“windows 無法驗(yàn)證此設(shè)備所需的驅(qū)動(dòng)程序的數(shù)字簽名”那是 PC 端 USB 驅(qū)動(dòng)的問題和 MCU 工程無關(guān)但如果你用的 ST-Link 仿真器在 Win10/Win11 下無法連接可以臨時(shí)禁用驅(qū)動(dòng)程序強(qiáng)制簽名后重新安裝 ST-Link 驅(qū)動(dòng)。5.5 測距數(shù)據(jù)固定不變或全為 0xFFFF現(xiàn)象初始化明明成功了ID 也讀出來了但測距結(jié)果要么一直是同一個(gè)值要么是 65535。傳感器好像沒有真正開始測距。原因VL53L0X 測距需要先完成內(nèi)部校準(zhǔn)如果跳過 Perform_RefCalibration 直接測距結(jié)果可能會(huì)異常。另一種可能是傳感器正對的目標(biāo)表面吸光太強(qiáng)比如黑色絨布返回光子數(shù)太少ToF 算法無法提取有效信號。解決嚴(yán)格按照 Data_Init → Static_Init → RefCalibration → SetDeviceMode → PerformSingleRangingMeasurement 的順序調(diào)用。如果目標(biāo)表面是純黑低反射率材質(zhì)可以把測距模式從單次改為連續(xù)模式并嘗試降低傳感器內(nèi)部的 SPAD 閾值。另外檢查 XSHUT 引腳的電平如果被外部拉低傳感器會(huì)一直處于復(fù)位狀態(tài)測距自然無效。6. 進(jìn)階技巧VL53L0X 連續(xù)測距模式與多設(shè)備掛載的 IIC 仲裁實(shí)戰(zhàn)到了最后這一層驅(qū)動(dòng)已經(jīng)能單點(diǎn)測距了但實(shí)際項(xiàng)目里往往要面對兩個(gè)更高頻的需求一是追求更低的測距延遲和更高的一致性二是單顆 STM32F103 要同時(shí)掛多顆 VL53L0X。這兩件事都繞不開 IIC 時(shí)序的深入理解和驅(qū)動(dòng)層面的策略調(diào)整。連續(xù)測距模式是個(gè)關(guān)鍵技巧。單次模式每次調(diào)用 PerformSingleRangingMeasurement 都會(huì)完整地走一遍測距狀態(tài)機(jī)準(zhǔn)備、測量、讀取結(jié)果時(shí)間開銷大而且測距間隔不均勻。改成 VL53L0X_DEVICEMODE_CONTINUOUS_RANGING 后傳感器會(huì)自己按內(nèi)部節(jié)奏不停測距結(jié)果更新到內(nèi)部的測量緩沖區(qū)里MCU 只需要在需要時(shí)讀取最新結(jié)果。這時(shí) IIC 總線負(fù)載會(huì)明顯下降因?yàn)?MCU 不再需要頻繁地發(fā)起寫命令再讀數(shù)據(jù)。// 連續(xù)測距模式 中斷通知讀取IIC 只在需要時(shí)工作 VL53L0X_Set_DeviceMode(dev, VL53L0X_DEVICEMODE_CONTINUOUS_RANGING); VL53L0X_SetGpioConfig(dev, 0, 0, VL53L0X_REG_GPIO_HTR_GPIO_INTR_SOURCE_GPIO_NEW_SAMPLE_READY, VL53L0X_REG_GPIO_HTR_GPIO_INTR_POLARITY_HIGH, VL53L0X_REG_GPIO_HTR_GPIO_OUTPUT_ACTIVE_HIGH, VL53L0X_REG_GPIO_HTR_GPIO_OUTPUT_ACTIVE_HIGH); // 在 GPIO INT 外部中斷服務(wù)函數(shù)里做一次快速讀取 void EXTI0_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_Line0) ! RESET) { VL53L0X_GetRangingMeasurementData(dev, measure_data); distance_mm measure_data.RangeMilliMeter; EXTI_ClearITPendingBit(EXTI_Line0); } }這里我用了 GPIO 中斷而不是輪詢好處是 MCU 可以把時(shí)間片讓給其他任務(wù)只在 VL53L0X 真正完成一次測距時(shí)才讀取。注意中斷服務(wù)函數(shù)里不要做復(fù)雜計(jì)算或打印只復(fù)制測量數(shù)據(jù)到全局變量打印放到主循環(huán)里做避免外部中斷處理過長導(dǎo)致丟中斷。多設(shè)備掛載是另一個(gè)硬骨頭。VL53L0X 的固定 7 位地址是 0x29直接并聯(lián)在總線上會(huì)導(dǎo)致兩個(gè)設(shè)備同時(shí) ACK數(shù)據(jù)完全錯(cuò)亂。正確的做法是每顆 VL53L0X 的 XSHUT 引腳單獨(dú)連到 STM32F103 的一個(gè) GPIO并且每顆的 XSHUT 引腳要有一個(gè)獨(dú)立的下拉或上電默認(rèn)狀態(tài)。初始化流程是先把所有設(shè)備的 XSHUT 拉低讓它們?nèi)刻幱趶?fù)位狀態(tài)然后逐顆抬高某顆的 XSHUT等它啟動(dòng)完成立刻通過 IIC 寫入一個(gè)新的 IIC 地址之后它就不會(huì)再響應(yīng) 0x29 了再抬高二顆初始化并改地址依次類推。// 多設(shè)備改地址的典型流程先復(fù)位全部再逐個(gè)激活 void VL53L0X_Multi_Init(void) { // 假設(shè)有兩顆XSHUT 分別接 PB0、PB1 GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1); // 全部拉低復(fù)位 delay_ms(50); // 第一顆激活保持默認(rèn)地址 0x29 GPIO_SetBits(GPIOB, GPIO_Pin_0); delay_ms(50); // 在這里完成第一顆的 Data_Init / Static_Init VL53L0X_Data_Init(dev1); VL53L0X_Static_Init(dev1); // 第二顆激活改地址為 0x308位地址形式 0x60 GPIO_SetBits(GPIOB, GPIO_Pin_1); delay_ms(50); VL53L0X_SetDeviceAddress(dev2, 0x30); // 內(nèi)部會(huì)換算成 8 位地址 0x60 VL53L0X_Data_Init(dev2); VL53L0X_Static_Init(dev2); }改地址這個(gè)操作有個(gè)先后順序的講究必須先激活第二顆、再改地址因?yàn)槿绻雀牧说刂吩偌せ顐鞲衅髟趶?fù)位期間是不會(huì)響應(yīng)任何 IIC 命令的。而且改地址操作后這顆傳感器會(huì)立即失去對 0x29 的響應(yīng)所以改地址是瞬時(shí)生效的。如果你有第三顆、第四顆用同樣的流程逐個(gè)激活并分配地址即可。這個(gè)方案不需要額外的 IIC 多路復(fù)用器缺點(diǎn)是每顆傳感器占一個(gè) GPIO對 STM32F103 這種 IO 豐富的芯片完全不是問題。最后再分享一個(gè)我自己的查錯(cuò)習(xí)慣任何 IIC 問題第一反應(yīng)不是看代碼而是用邏輯分析儀抓實(shí)際波形。把地址幀、寄存器地址幀、數(shù)據(jù)幀逐個(gè)對照數(shù)據(jù)手冊上的時(shí)序圖通常十分鐘內(nèi)就能定位問題出在地址、時(shí)序、還是 ACK 處理上。這個(gè)習(xí)慣幫我排掉過無數(shù)個(gè)看似復(fù)雜的玄學(xué)故障也希望你能用上。希望這些基于 STM32F103 的 VL53L0X IIC 驅(qū)動(dòng)經(jīng)驗(yàn)和避坑記錄能幫到你少走一點(diǎn)我當(dāng)年走過的彎路。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲AV成人精品网站在AV| 国产日韩欧美三级片| 九七毛片九九毛片 | #NAME?| 能看的AV| 日本精品不卡一二三区| 日韩欧美亚洲自拍偷拍| 超碰在线日韩一区| 素颜老阿姨乱情色| 欧美亚洲第1页| 国产在线76页| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 亚洲加勒比| 欧美亚洲清纯| 欧美加勒比| 大香蕉手机在线| 久久6热精品99视频| 黄色污污污污污污网站| 91久久久久久| 在线啊v一区| 中文字幕成人理论在线| 熟女突然公开看18禁影片| 免费久久一级毛片大黄| 国产91会所女技师在线观看| 男人的天堂 在线一区| 另类图片五月天| 日韩久久艹| 少妇与黑人高潮在线| 久操精品网| 99自拍视频在线| 日韩免费性爱视频在线观看| 日韩97超碰中文字幕| 五月天综合网| 9/A片 | 97色欧洲| 中文字幕99999| 狠狠操,使劲操| 超碰色综合| 欧美美女视频| 中文字幕三四区| 久久久久九九九| 五月丁香黄色网| 操逼操逼操| 一本色道综合久久欧美| 国产精品电影| 欧美性爱一内片一区二区三区| 亚洲图片 91| 久久的网站啊啊啊啊啊| 亚州高清av| 91色伦| 大香蕉淫人| 思思热国产高清| 日本操逼视频免费| 密乳AV免费观看| 久久久久亚洲AV无码专区少妇| 东京热视频网| 精品v日韩欧美国产| www.夜夜| 狠肏骚人妻| 五月天伊人| 精品网站99999| 日本一卡二区在线| 操逼网站网站| 男人的天堂一区三区| 操一区| 蜜臀99999| 欧美性高潮在线| 人妻密肉在线观看| 一区二区三区四区理论片| 国产精品久久久无码aV去| 欧美综合娱乐久久| 天天插天天射| 91久久久久久久| 日韩三级伊人| 亚洲人人操| 欧美 日韩 国产传媒| 中精品一区二区三区| 啊v在线观看视频| 国产日韩精品人妻久久久久色欲网站 | 麻豆这里只有精品| 亚洲色性情三级| 人乳av| 精品一区二区三区国产| 亚洲国产无码精品首页久久久| 亚洲最大网站av| 蜜臀久久99精品久久久久久| 亚洲欧美日韩制服另类| 激情婷婷丁香| 精品无码人妻一区二区免费蜜桃| 久久久成人免费av电影| 欧美日韩插逼视频| 欧美麻豆成人同性GⅤ在线| 99在线精品视频| 久热久| 五月天欧美色图| 91成人无码| 国产亚洲精品农村妇女| 成人在线视频二区| 韩日欧亚a级| 手机在线A片| 91熟女熟妇视频网站| 亚洲自拍欧美国产首页网曝| 亚洲另类春色| 婷婷中文字幕| 四季av一区二区凹凸精品小说| 女性喷水高潮在线观看| 色色色综合网| 91日产桃蜜| 天天日天天干天天整| 亚洲揄拍网| 丁香色狠狠色综合久久小说| 啊啊啊啊视频免费| av久日| 狠狠色伊人亚洲综合网站色| 亚洲。日韩。欧美| 亚洲精品久久久久毛片A片拉屎| 欧美性爱五月天| 人人摸人人舔一区二区| 五月天婷精品激情| 久久人妻一区二区三区高清| 亚洲国产精品成人无码久久久 | 欧美欧美少妇| 丁香五月婷婷啪啪| 校园春色AV天堂| 一区二区三区欧美激情| 99无码| 天天综合精品| 试看60秒 爽| 欧美色婷婷| 久久亚洲日韩国产欧| 家庭乱伦性爱av| 精彩国产视频播放1区2区| 亚洲乱妇p22| 欧美少妇熟女| 精品久久久久久中文字幕视频免费 | 人妻少妇精品一区二区三区| 久热这里只有精品9| 无码伊人久久大杳蕉中文无码| 99re在线视频国产| 九九综合久久| 国产精品久久久久久久久久久久| www鬼畜国产男人的天堂| 丰满人妻一区二区三区| 97资源超碰| 国产精品成久久久久午夜午夜| 日本不卡一区二区| 久久97| 国产精品久久天天干| 欧美一级色| 熟女少妇视频| 日韩人体偷拍| 欧美一区二区三区四区综合| 啊啊啊不要嗯嗯在线观看| 亚洲欧洲国产综合av| 九九操久久国产免费视频| 国模限制级电影| 国产精品视屏| 中文字幕aⅴ在线视频| 日韩美脚一区二区网站| 热99这里有精品综合久久 | 亚熟在线| 人妻81p| 麻豆国产第一| 精品国产www久久| 97久久精品不卡| 熟女视频久久| 蜜臀99久久精品久久久懂爱| 色五月69夫妻| 91高清无码下载| 日韩本不卡视频在线观看| 亚洲18禁| 国产探花精品在线| 欧美综合综合| 久久精品一区| 久久久久国产精品片区无码直播 | 日本影视久久免费| 东京热激情视频一二三区| 日本色色视频网站| 日本大香蕉综合网| 韩日精品福利视频一区不卡在线免| 亚州一区二区成人片免费| 黑人性欧美| 夜夜一区二区| 超碰99在线| 中文字幕国产在线天堂| 欧美综合777| 日韩人妻无码专区| 人妻aa| 校园春色亚洲| 天天干人人乐| 国产欧美后入| 亚洲熟妇熟在线电影视频| 熟女人妇一区二区三区| 伦激情人妻另类人妻| 香蕉国产97| 久热伊人| 熟女人妻一区二区三区| 91久久青青草原精品| 色综合久久夜色精品国产天堂| 九九色综合| 女同女同恋久久级三级| 久久精品熟女亚洲AV麻豆软件| 久久超碰av在线| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 少妇第一页| 台湾佬激情综合| 99re在线观看| 人、人、摸,人、人、草| 久久久久久网址| 91精品国产日韩欧美综合| 哈哈操电影| 九九av| 狠狠图片青青草| 欧美色棕合| 丁香五月性| 欧美日韩国内不卡| 曰韩av中文字幕专区| 人人妻人人爽 97人人看碰人免费公开视频| chaopen97久久| 日韩钢筋无码高清啾啾啾| 91亚洲黑人| 99色色网| 亚洲人精品久久久喷水| 91色艳| 亚洲不卡AV在线| 欧美黄片视频在线观看免费 | 精品免费视频国产一区| 天美传媒婬乱| 日本性感人妻91| 91亚州| 欧美天天综合网版| 亚洲欧美小说| 98久久| 啊啊啊想要| 人妻久久一区二区三区 | 亚洲古典另类欧美在线| 天天干人妇| 国产懂色精品国产av| 一区二区三区 日韩欧美| 98福利在线视频| 精品人妻一区春色| 亚洲在线A| 超碰97久久| 欧美Ⅴ性爱| 亚洲色欲天天天堂色欲网女| 成人七区| 亚洲欧洲另类| 久九九九九九九热| 东北老熟女| 亚洲丝袜在线观看| 久久精品熟妇丰满人妻99| 呦呦一区| 天天懆天天日| 中文字幕在线免费观看视频| 偷拍欧美激情| 久久久天美| 男女啊啊啊| 思思热在线视频在线| 91人妻中文| 在线人人人人人人精品超| 亚洲精品三| 抽查国产福利主播| 欧美日韩人妻精品一区二区三区| 精品久久久久,69国产成人精| 亚洲天堂,男人| 大香网伊人久久综合网eew| 夜夜操中文字幕| 久久亚洲日韩熟女精品| 中文字幕天堂在线| 懂色AV蜜臀无码精品APP| 国产女上位好爽在线| 亚洲Av噜噜一区二区三区妖精| 9999久久久久| 日韩啪啪视频| 欧美日韩性爱操大逼| 久久乐| 伦在线97| 日本操逼aaaaa| 精品在线观看视频在线| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 亚洲综合在线91| 久久久久国产精品久久久| 亚洲国产av中文字幕久久| 99热最新| 欧美久久人妻少妇一区二区| www熟女乱伦com| 极品极品色影院| 久久伊人青青草| 国产精品白丝www| 久久人人舔人人爽舔人人av片| 91精品91久久久中77777| 超碰人妻中文在线| 五月天久久综合网| 韩国轻伦国内自拍一区| 亚洲影视综合| 久久极品一区二区| 日本高清视频在线观看黄已三辽| 黄片www.| 亚洲欧美精品91| 好一吊区二区| 操婷婷逼| 成人久久久精品| 久久九九视频九九视频| 欧美熟女丝袜| 国产福利小视频高清在线观看| 国产精品色哟哟| 日韩国产精品人妻无码久久久| 亚洲成人网站在线观看| 久久9精品| 91在线精品| 亚洲成人在线资源| 日韩欧美俄罗斯A片| 在线观看A啊啊啊| 免费国产视频| 91久久国产综合久久| 美女91网| 99精品无码| 蜜臀在线网站| 五月天婷婷基地| 亚洲情色 欧美| 97人妻碰碰中文无码久热丝袜| 97欧美日韩中文| 日日夜夜精品| 国产熟女高潮一区二区三区| 综合色色网| 99999国产| 久久综合乱子伦国产免费| 成人蜜乳小视频网站| 中文字幕55555| 久久久精品电影| 亚洲第91页| 精品毛片av一区二区| 九九九九九九九九九九九九九九九女| 欧美熟女操屄| 久久久久久久9| 9久综合网| 97人妻碰碰中文无码久热丝袜| 五月天精品| 色性综合| 日韩欧美tv一区二区在线观看| 金典av| 国产又色又爽又舒服的三级视频| 干少妇视频| 丰满搜索结果 -第18页- 久久高清无码| 色黄污美女啪啪啪免费网站| 中文字幕第23区| 国产又爽又黄| 一二三四视频中文字幕在线看| 中出后入| 日日夜夜干| 在线播放成人高清免费视频| 夜夜青青无码影院| 国产伦精品一区二区三区视频女| 亚川综合视频| 亚洲性少妇| 尹人大香蕉视频在线| 人人看人人插| 伊人久久AV诱惑悠悠| 欧美精品91| 极品极品色影院| 欧美性天天| av东京热男人的天堂| 亚洲 图片 综合91| 国产熟女完整版中字 | 人人妻人人爽人人精品| 蜜奶av| 91啪啪视频| 成人精品久久久午夜福利| 91性网| 日韩欧美资源| 亚洲一本色码中文字幕| 污啪啪啪视频| 亚洲精品日韩国产欧美| 国产精品女久久久久av爽| 天堂成人网| 熟女露脸激情自拍视频| 精品96久久| 麻豆视频test| 婷婷中文字幕| 超碰人人色| 国产精品国产自产高清AV| 五月天激情网图片| 顶级丝袜熟女一区二区三区| 狠狠操官网| 91综合色噜噜| 97视频免费| 欧美性Fer办公室秘书| 91视频成人福利网站在线一区| 九九热九九| 国产h片在线观看视频| 91精品久久久| 国产中文字幕在线点播| 一起草三级AV电影在线观看 | 国产亚洲人妻综合日韩 久久| 在线观看精品国产免费| 色婷婷视频| 日韩精品在线观看观看| 超清中文乱码字幕| 大二网站亚洲| 波多野结衣一级视频| 久久国产逼| 淫荡网址| 国产9 9在线 | 亚洲| 20cm女自慰在线日韩欧美| 亚洲图片激情小说| 日韩成人无码| 日本羞羞的视频在线播放| 搡老女人911熟妇老熟女| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | av九九| 无码少妇精品一区二区60岁老人| 爱我干综合| 狠日欧美| 黄色大片视频在线免费看| 91精品老女人| 少妇一区二区三区高速| 亚洲密乳AV| 欧洲成人性爱视频| 日本高清_区二区三区| 久久美女国产| 日本免费亚洲欧美| 国产精品91一样| 日韩99神马视频片| 自拍亚洲综合| 9久久久久| 激情 欧美 亚洲 小说| 国产精品一区午夜福利| 亚洲五月天激情| 99热色精品| 蜜桃中文字日产乱幕4区| 人人澡综合涩| 日韩欧美中文字亚洲慕| 五月丁香激情四射| 国产亚洲精品美女久久久久久2021| 亚洲AV性爱电影| 五月激情视频| 亚洲国产综合久久久性感熟妇| 欧美少妇性乱| 91老熟女91老女人| 国产亚洲福利第一页丝袜| 一本大道不卡一二三区| 精品久久久无码| 日日夜夜天天| 亚洲欧美91√| 97超碰人人模人人拍人人| 黄色AAAAAAAAAAA大片| 久久婷婷热| 泰国AV在线观看| 夫妻AV网站| 好湿好紧视频| 极品综合| www.狠狠干.coom| 75大香蕉| 九九九九精品精| 草莓精品视频在线免费观看| 国产免费一区二区在线A片视频| 午夜后入| 人人人干干人人干| 日本岛国黄色网址| 九九综合网| 白丝AV| 自慰白浆在线观看| 伊人 俄罗斯 a v| 一起草视频在线| 日韩性爱电影一区| 伊人午夜福利视频| 亚洲中文国际强奸字幕| 综合日韩激情另类图片| 中文字幕在线免费观看 | 热99这里有精品综合久久| 欧美一二三级精品在线| 欧美色九九九| 精品对白久久不卡| 婷婷五月丁香五月| 黄色交缠性感爆操91国产精品免费一区二区三区 | 欧美72网页| 蜜臀va69| 九九热精品视频在线观看| 96精品一区| 天天摸夜夜添无码小视频| 久久国产99精品72福利| 丝袜美腿亚洲| 精品无码久久久| 欧美色图99| 无码免费精品高清| 日韩三级在线观看mp4| 波多野结衣AV无码一区| 啊嗯好大视频在线观看| 91肉片| 亚洲 欧美 中文 日韩超碰| 久久亚洲日韩国产欧| 91P0RNY大屁股人妻| 免费精品福利在线观看| 久久亚洲不卡| 热99这里有精品综合久久 | 婷婷五月天补不补| 九九久久久| 亚洲一二三精品久久网| 国产精品爆乳懂色蜜乳| 婷婷三区| 香蕉久久AⅤ...| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 久草电影网| 丰满人妻av一区二区三区 | 欧美人人AAA| 我要色综合网站| 九九毛片这里只有精品| 亚洲国产一级黄色视频| 日韩9999| 日韩激情中文字幕有码| 美女啊啊啊啊啊| 久久99国产综合精品女同| 呦呦影院| 97热视频在线观看| 人妻少妇色综合| 久操国产在线| 大香蕉一人在线| 天天干天天狼在线视频| 性猛交| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 人妻素股| 日韩久久三区| www.av在线视频| 国产精品伦理| 欧美三级免费伊人| 青青草丝袜在线视频| 91亚洲综合在线| 日韩本不卡视频在线观看| 91综合网站| 91oumei| 一区二区乱码福利| 97亚洲国产| 粉嫩国产精品久久粉嫩| 亚洲精品xxx| 青娱乐妇女性生活| 91麻豆天美国产欧美高潮| 女同性恋久久| 尤物视频一区| 大香蕉乱级| 中欧人妻丝袜中文字幕| 欧美熟妇色| 精产品久久| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 亚洲91在线播放影院| 日少妇视频| 蜜臀99久久精品| 久久m| 亚洲限制级在线| 亚洲精品久| 蜜桃久久一区二区三区| 欧美第一页性| 久久综合18p| 亚洲高潮少妇| 97国产精品国| 国产污视频麻豆传媒一区二区| 丰满翘臀美女影院视频| 怡红院怡春院| 麻豆精品天美| 2019亚洲男人天堂| 色约约一区=区三区| 99999国产精品| 91美女在线观看| 国产精品福利资源在线尤物| 国产美女销魂在线观看不卡| 亚洲暴力强奸AV| 91中文精品日韩欧美在线| 久婷婷一区| 欧美日韩国产人人| 97色视频在线| 欧美手机在线综合| 久草新在线| 日韩性爱一级片| 91在线超高颜值国产| 3028国产精品| 夜夜操天天肏| 51一区二区三区| 精品人妻一区二区三区四区不卡在| 日本操逼视频在线| 色婷婷网| av72网| 久久精品国产亚洲粉嫩| 99久久久无码精品国产人| 99爱爱| 91爱看| 东京热男人的天堂| 色一色综合网| 国产成自自拍在线观看| 99在线精品视频| 乱伦图av| 啊啊啊97视频| 美女被啪到深处抽搐视频| 人、人、摸,人、人、草| 91女神在线视频| 精品亚洲| 婷婷色播婷婷| 精品人妻一区二区三区四区| 亚洲成人福利电影免费| 91成人国产综合久久精品蜜月| 美女黄站| 啊啊啊啊嗯嗯嗯用力好爽 | 99色在线视频| 91日韩网站| 久久久国产三级黄色片| 日韩色图 一区二区| 在线色导航| 久久一二三四五六七八九区区| 国产拍偷精品网站| 97爱欧美| 亚欧性爱无码| 97免费视频在线观看视频| 欧美成人精品一区| 欧亚免费视频| 精品久久久久久久久久久久| 日韩欧美大力操| 好舒服视频| 鸡巴插逼视频| 丰满熟妇大乳做爰| 一区二区三区四区五区高清无码永久视频 | 亚洲、日韩、综合、另类| 日韩啊V| 亚洲人综合| 亚洲天堂电影精品一区| J?P?NESEHD熟女熟妇伦| 2026国产精品视频| 久久香蕉网| 亚洲欧洲自拍图片专区满春格| 久久女人一区二区三区| 免费精品99| 青娱乐999| 941超碰| 18一区二区三区| 日本性爱网址| 国产日韩无码一区二区三区久久区| 亚洲精品一卡二卡三卡福利视频网站| 亚洲操逼网| 五月天黄色av| 日韩Va亚洲va欧美Ⅴa久久| 另类欧美综合| WWW美腿丝袜香蕉中文| 亚洲,欧美,春色,另类| 免费1级a做爰片观看| 蜜臀久久99精品久久久久久酒店| 人妻丝袜一区二区三区在线| 99热啪啪| 最好看的中文字幕在线2018| 99av| 91 天天综合| 亚洲男人天堂视频| 啊啊啊啊啊啊在线看| 秋霞久久亚洲精品成人| 超碰99在线| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 色噜噜国产精品视频一区二区| 超碰欧美在线欧美| 啊啊啊不要嗯嗯在线观看| 99xav| 国产熟妇一区二区| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 久久免费中文字幕在线观看| 91精品综合久久久久久五月丁香| 色五月婷婷色| 欧美综合站| 日韩欧亚太美不卡| 超碰人妻中文在线| 青青草字幕AV| 天天日熟妇| 天堂精品| 美女啊啊啊啊啊| 黑人免费福利视频| 人人操人人干网页| 黄色一级视| 成人 日韩欧美一区| 男女91| 日本黄页视频在线观看| 少妇一区二区三区| 综合免费无码中文| 天天综合网站| 亚熟在线| 久草毛片| 蜜臀久久99精品久久久久久久久| 日韩人妻精品久久久久| 久偷拍| 成人草草视频| 国产精品电影大全| 日本精品免费一区二区三区四区| 亚州久久9| 亚春色色| 人人做,人人操,人人摸| 福利在线观看一区二区| 色五月婷婷麻豆在| 亚洲污污网站| 97超碰色| 欧美视频中文字幕区| 久妇网| 亚洲图片视频小说| 欧美aaaaaaa| 日韩啪啪啪啪啪| 中文字幕无码不卡啪啪| 欧美性生活男人的天堂| 亚洲日韩一区电影| 亚洲成人一二三区| 诱惑网综合| 亚洲av乱伦色图网站| 亚洲中文字幕97久久精品少妇| 4虎在线视频| 操逼视频国产无套| 九久久九精品视频| 欧美熟妇精品黑人巨大91| 国产美女高潮叫床视频| 亚洲欧美一区二区不卡视频播放| 久久午夜色播影院免费高清| 国产福利在线视频网站| 99热 按摩 日韩| 少妇久久久久久| 久久久久国产亚洲一区欧美色图日韩| 欧美综合色图片| 日日骚中文字幕| AV一二区| 成全动漫视频观看免费下载| 麻豆天美国美国产AV| 美欧色综合| 久久久久久久九九九九九九| 国产精品操| 中文字幕88av在线| 亚洲国产欧美另类自拍| 亭亭丁香激情| 做爱A级亚欧| avav青青草久久夜| 天天欧美色| 亚州免费啪啪视频| 久久亚州大香蕉| 六九九九| 91少妇人妻| 欧美大香蕉97| 亚洲av乱伦色图网站| 国产精品日日摸夜夜添骚逼| 精品国产72| 国产亚洲99久久精品| 欧美精品久久96人妻无码| 东北操逼| 日本精品88888888| 精品人人插人人操| 日夜尻逼网| 九九热免费国产视频婷婷伊人| 国产乱伦性爱区| 国产精品一区二区密臀| 色婷婷综合久久久久中文一区二区| 日韩精品 视频一区二区| 超碰97丝袜| 久久这里只精品| 亚洲欧美在线综合| 美欧老女人97| 91丝袜美腿网站| 强奸乱伦αv片| 国产精品久久久久久久久久梁医生| 超碰97人人乐| 少妇熟女视频一区二区三区| 久久色情| 在线黄页看毛片| 色色色999| www.国产高潮精品| 大香蕉视频一二三区| 女欧美一区二三区| TS人妖另类精品视频系列| 嗯嗯不要 视频| 中文三一区| 91亚洲人| 国产白丝精品在线观看| 久久精品一区二区| 另类图片综合| 中日韩免费看男女操逼大全| 精品免费视频国产一区| 日本久久女同性恋视频| 国产精品蜜臀久久久久无码AV| 农村少妇久久久久久久| 色臀AV| 国产成人超碰在线| 国产精品一级毛片不卡视| 国产 v乱码一区二| 久久99久久99久久99人受| 最新欧美色网| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | www亚洲欧美| 国产内射爽爽大片| 日本性爰一道本| 国产精品免费视频人成| 人妻夜夜爽天天爽麻豆三区网站 | 国产午夜视频| 9九九国产| 天天澡天天狠天天天做| 五月天啪啪| 在线黄色污污网站| 台湾佬中文娱乐自偷自拍| A一区片| 蜜臀久久99精品久久久久久成人小说 | 操学生天天| 亚一综合久久久久久久久久| 人妻熟妇一区二区三区| 成人五月香网在线| 亚洲欧美一区二区三区一猛片| 日韩精品在线放| 欧美高清16| 亚洲男人的天堂AV| 伊人亚洲国产一成人久久精品,久久| 在线岛国新天堂8| 人妻夜夜爽天天爽麻豆三区网站 | 热天堂一区二区| 欧美日韩性爱操大逼| 久久久精品91八戒| 性色亚洲| 国产伊人精品在线| 中 文字幕一区二区三四 五 区日 日 骚| 免费伦费视频在线观看| 中国国产精品一区视频| 国产97综合| 久久九九精品一区二区| 色妇91| 国产精品九九| 欧美高清色| 欧美狠狠弄| 狠狠色综合网| 大香蕉乱伦视频网| 综合五月婷婷| 精品区9| 大香蕉AV丝袜| 69精品在线| 99热销国产这里有精品| 国产在线能看的你懂的| 日本欧美不卡| 激情一区二区| 欧美日韩午夜精品一区二区三区| 十八禁视频一区二区| 中文字幕奈奈美被公侵犯| 乱伦AVxx| 欧美少妇大量自拍视频在线观看| 操人妻丝袜高跟| 99国内熟女露脸视频| 97在线视频免费看| 色吧5亚洲| 精品黑人一区二区| 青娱乐av在线| 久久久久久91香蕉国产| 9久9久| 亚洲色图图片| 日韩Va亚洲va欧美Ⅴa久久| 亚洲图片色图欧美另类| 新版天堂中文资源8在线| 激情五月天网站| 91少妇香蕉久久精品| 亚洲欧美首页| 高跟丝袜AV专区国产| 高清不卡一二三区视频......| 另类欧美| 在线播放免费av福利片| 人妻aa| 99国产精品久久久在线播放| 色欧美在线| 日本淫色网| 天天操天天射天天日| 久久人妻视频网| 蜜臀99久久精品久久久久久| 强奸乱伦免费网站| 亚洲天堂色图| 色色九区| 色欲无码人妻日韩欧美精品| 色穴精品| 大香网伊人久久综合网eew| 黄片免费日韩| 天天肏美女| 亚洲国产精品久久AV| 久久天堂婷婷网| 欧美激情精品久久久久久| 亚洲中文一区二区三区视频| 欧美国产操逼| 91超碰人人操| 高精欧美色| www.夜夜| 天天综合网日韩| 久99| 最新无码国产| 伊人久久久日韩一区| 99久久e免费热视| 青青草在线视频美女| 97操操| 男女啪啪网站免费视频| 91色图片| 狠狠色噜噜狠狠狠狠狠色综合久久 | 国产av色网| 亚洲 日韩 欧美 国产综合体| 色综合av综合久久| 97视频www| 成人免费不卡在线视频| 天天日美女的B| 99热啪啪| 一中国女人毛片水真多| 亚洲欧美日产国产91毛片| 日本欧美不卡| 亚洲丝袜在线观看| 操狠狠| 日韩性爱再线视频| 热久久无毒不卡| 一本正道久久熟女| 国产尹人在线视频免费| 人人妻人人澡人人爽久久av| xxx亚洲午夜天堂| 91色婷婷综合久久中文字幕二区| 天天射天天操天天干天天吃2018| 色香91| 试看福利| 久操视频免费在线观看| 五月婷婷色色| 色综合网1| 久久五十路熟女人妻| 亚洲第一页综合在线| 1204金沙人妻懂旧版免费| 性在久久久久久| 久操操AV电影| 久久性爱视频免费看| 久久久一区二区三区麻豆| 激情四射熟女丝袜| 欧美亚洲涩涩| 天天欧美欧美亚洲网| www.色操逼| 日韩探花精品在线视频| 精品国产一区二区三区在线播出| 超碰97人妻在线| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 麻豆60秒| 丁香五月天堂网| 丁香五月婷婷色| 国产熟女完整版中字| 国产AV激情无码久久无码| 日韩亚洲精品一区二区| 午夜AV人气不卡| 秋霞免费AV| 婷婷五月天激情网| 亚洲男人天堂2019| 色色丁香| 亚洲中文人妻色| 97公开久久| 成人草草视频| 97国产超碰| 日韩操啪| 色狠狠 - 百度| 无码国产精品午夜不卡(| 国产真实野战在线视频| 免费观看的av| AV天天综合| 亚洲熟久久| 人妻丝袜日本| 黄页网站免费高清在线观看| 老熟妇一区二区三区…| a天堂视频| 五月天色色色| 国产白丝在线| 精品天堂| 殴美在线AⅤ| 高清不卡视频| 2019午夜福利视频| 99re视频这里只有精品| 狠狠色噜噜狠狠狠狠狠色综合久久 | 色五月激情网| 和协影院中文字幕三区| 南澳成人一级片在线播放| 久久国产性爱| 亚洲青色欧美| 亚州操操穴网| 老鸭窝在线视频播放| 国产精品一区二区 尿失禁| 好湿好紧好爽 视频| 51一区二区三区| 欧美国产伊人久久久久| 日本精品国产视频| 青青青国产手线观看视频2| 精品区9| 无码人妻一区二区三区四区老鸭窝| 亚洲人精品午夜不卡| 免看60秒涩涩视频| 中文字幕蜜乳av| 嗯啊不要啊在线| 欧美啪啪色吧在线| 激情五月天婷婷| 啊啊啊爽爽| 欧亚乱色熟一区二区三四区| 日韩情色一区二区| 久久大香蕉手机高清视频| 婷婷五月天激情四射| 麻豆视频test| 久久成年片色大黄全免费网站| 亚洲高潮少妇| 亚洲中文字幕熟女| 熟女中出视频| 亚洲一区二区三区中文字幕| Aa东京男人的天堂| 不卡啪啪视频| 国产综合日韩伦理| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 精品高清一区二区三区三州| 色狠人在线99| 蜜乳AV一区二区三区四| 亚洲91射| 蜜臀久久99精品久久久久久久久| 精品蜜乳AV免费观看| 91N综合在线| 超碰在线看| 日韩成人精品| 婷婷丁香人妻 | 黑人无码一区二区| 欧美亚洲首页| 色婷婷蜜臀av| 97综合在线| 成人av性爱电影在线观看| 蜜臀久久99精品久久久久久成人小说 | 青青草中文-久久青草精品一区二区三| 美女久久久久久久久久久| 婷婷中文字幕| 国产精品视频一区二区三区八戒| 农村少妇久久久久久久| 日本男人插女人的逼黄色| 日韩人妻资源在线看| 欧美日本国产日韩激情视频| 天天综合欧美| 91中出在线| 亚洲欧美一区二区不卡视频播放 | 亚洲色偷偷色噜噜狠狠99网| 国产精点久久久成人| 国产乱伦性爱区| AV乱伦国产| 国产精品久久久 | 天天视频黄| 综合夜夜| 久久精品国产亚洲av水密被窝| 东京热99999| 国产青青美女玩逼视频| 欧美熟妇人体| 97资源欧美| 曰本精品久久久| 五月婷丁香| 久久久久骚| 97精品一二区| www.AV有限公司一区| 99热 按摩 日韩| 97中文天堂| 国产成人主播| 日韩精品9区| 超碰色大香蕉| 国产精品96久久久久久| 欧美999| 国产精品高清2021在线| 亚洲 日本 国产 综合| 91强热人妻| 999久久久精品国产| 欧美亚洲日本视频久久久| 色激情综合网站| 试看日韩黄片| 一区二区三区视频在线观看免费| 睡产熟女乱伦| 欧美东京热精品A∨| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 超碰偷拍| 91另类| 女同性恋久久| 综合国产97| 殴美综合色88| 蜜桃午夜视频一区二区 | 黄色AAAAAAAAAAA大片| 综合网色| 五月天久久婷婷亚洲| 亚洲欧美校园| 精品中文字幕一区二区| 狠狠色婷婷7777久| 久久久久久久久久久久欧美日| 懂色av一区二区三区天美传媒| 啪啪AV导航| 北条麻妃99精品青青久久| 亚洲免费精品一区| 亚洲第一视频 欧美风情 日韩| 日韩一区二区精彩视频| 91狠| 97综合激情| 91久久久久久久| 久久久久久中文| 久久草在线综合视频| 欧美日韩一干二干| 台湾一区国产高清在线| 欧美内射少妇| 91东北熟女| 亚洲天堂另类小说男人| 日本精品一区二区三区四区的功能| 91操人视频| 综合少妇网| 爽爽淫人网| 97在线免费看视频| 91久久久久免| 国产欧美另类久久久精品课程| 免费一级毛片在线视频观看| 国模91| 中文久久爆乳| 素人伊尹大香蕉免费下载视频| 一区二区视频在线播放| 久色99999| 色噜噜人妻丝袜a∨先锋影| 国产一| 色综合久久久久| 91综合国产精品| 新婚人妻扶着粗大强行坐下| 久久婷婷国产一区二区色| aaa亚无码专区| 很很干很很操| 国产日韩区| 韩国三级三级BD在线| 亚洲蜜乳av| 肥臀熟女一区二区三区视频| 96精品在线| 成人a级高清视频在线观看| 日本中文字幕一区| 99久久9| 久久线上视频免费看| 欧美72网页| 成人国产精品三级A片| 亚洲精品免费中文字幕| 黑人干亚洲| 60秒试看最爽10分钟网站| 天天干天天操天天干天天操| 国产乱伦搜索结果91P| 激情文学小说一区二区| 1234区中文字幕在线观看_青青草国产在线_日韩一区二区 | 芊芊操逼视频无码| 中文字幕色AV| 熟妇一区二区三区| 777奇米影视777四色| 国产一级特黄大片处女| 久久久久久AV无码免费网站| 欧美日韩另类在线播放| 亚洲第一狼人丝袜美女另类| 91欧洲入口| 中亚黄色三级大片| 中文字幕国产精品1区| 99热综合| 综合啪啪| 啪啪一区| 狼人久草| 五月婷婷激情网| 国产福利影视| 91三级理论片播放器| AV和黑人在线播放| 男人女人18禁片免费看网站| 东京热双插| 亚欧色图在线激情| 蜜臀久久99精品久久久久| 97超碰久久| 国产精品不卡少妇白| 国产精品扒开腿做爽爽爽视频| 四方色播| 亚洲成人精品在线一区| 久久尹人大香焦视| 欧美亚洲91| 国产在线能看的你懂的| 翔田千里无码中出中文字幕| 永久免费av无码网站国产app |