日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

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

STM32F103驅(qū)動(dòng)VL53L0X激光測(cè)距:IIC驅(qū)動(dòng)源碼詳解與避坑指南 簡(jiǎn)介基于STM32F103單片機(jī)的VL53L0X測(cè)距傳感器IIC接口驅(qū)動(dòng)源碼面向嵌入式開發(fā)者和STM32入門學(xué)習(xí)者解決激光測(cè)距模塊在Keil MDK環(huán)境下的快速集成與調(diào)用問題。工程在KEIL UV5下開發(fā)完成引腳與IIC配置后可直接運(yùn)行主程序依次完成LED指示燈、SysTick定時(shí)器與USART串口初始化并調(diào)用vl53l0x_start_single_test執(zhí)行單次測(cè)距狀態(tài)判斷與串口輸出接口均已預(yù)留模塊劃分簡(jiǎn)潔注釋清晰便于順著思路理解驅(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í)下載對(duì)熟悉IIC時(shí)序和傳感器驅(qū)動(dòng)移植的初學(xué)者具有較好的參考價(jià)值。1. 從 IIC 波形臺(tái)階到 STM32F103 與 VL53L0X 的這場(chǎng)“硬仗”做嵌入式開發(fā)這幾年我上手過的測(cè)距方案不算少超聲波、紅外、激光三角都有各自的脾氣。但如果你手頭正好有一塊 STM32F103 最小系統(tǒng)板又想把測(cè)距精度做到毫米級(jí)VL53L0X 這顆激光測(cè)距傳感器幾乎是繞不開的選擇。它用的是 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ù)雜的測(cè)距算法引擎。它對(duì)外暴露的接口只有一路 IICI2C而且芯片本身不帶地址線7 位地址是寫死的 0x29想在同一總線上掛多顆就得靠 XSHUT 引腳逐個(gè)上電復(fù)位來改地址。這顆傳感器不提供 SPI 或 UART 選項(xiàng)所以 IIC 驅(qū)動(dòng)不是“選型之一”而是唯一路徑。這里要先糾正一個(gè)常見誤解很多人覺得 IIC 就是兩根線隨便接一接就能通但實(shí)際上 VL53L0X 的數(shù)據(jù)手冊(cè)明確規(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ì)增加功耗且對(duì)長(zhǎng)線傳輸不友好。我一般會(huì)分兩種情況處理如果模塊和 MCU 在同一個(gè) PCB 上、走線很短用 4.7k 上拉到 3.3V 就夠了這也是絕大多數(shù) VL53L0X 模塊的默認(rèn)配置如果用了杜邦線連接線長(zhǎng)超過 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 速度等級(jí)是為了保證 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 的絕對(duì)最大額定電壓是 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í)際上大部分場(chǎng)景能用但總有一些超頻、總線繁忙、多主沖突的邊界情況會(huì)莫名其妙卡死。我自己的血淚經(jīng)驗(yàn)是VL53L0X 的驅(qū)動(dòng)本來就復(fù)雜初始化要讀寫上百個(gè)寄存器而且官方 API 里有一些地方會(huì)連續(xù)做多次沒有 STOP 的重復(fù)起始條件這時(shí)候硬件 IIC 如果配置不對(duì)就可能等 BUSY 位一直不釋放卡死在 while 循環(huán)里。所以常見的從業(yè)方案是直接用 GPIO 模擬 IIC。兩條 GPIO 線用延時(shí)函數(shù)控制翻轉(zhuǎn)雖然會(huì)占用 CPU但對(duì) VL53L0X 這種單次測(cè)距才幾十毫秒的傳感器來說完全夠用。而且 GPIO 模擬 IIC 的時(shí)序完全可控出了問題用邏輯分析儀一看就知道是哪一步不對(duì)比對(duì)著數(shù)據(jù)手冊(cè)查硬件外設(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 是微秒級(jí)延時(shí)我建議直接在 startup 文件或 systick 上做一個(gè)簡(jiǎn)易延時(shí)函數(shù)不要用 for 循環(huán)空轉(zhuǎn)因?yàn)榫幾g器優(yōu)化等級(jí)不同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)答信號(hào)。有一個(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)的接口對(duì)接上。最省事的做法是只保留 API 目錄下的必要文件然后把 vl53l0x_i2c.c 里的讀寫函數(shù)替換成你自己的 GPIO 模擬 IIC。// 在 vl53l0x_platform.c 中對(duì)接底層 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)致測(cè)距數(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); // 單次測(cè)距模式 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)上跑通測(cè)距工程搭建與最小可復(fù)現(xiàn)流程4.1 Keil MDK 工程搭建Pack 包、芯片選型和 ST-Link 調(diào)試熱詞里提到“stm32f103 keil mdk工程搭建與st-link調(diào)試全流程”這里就把完整流程濃縮成可執(zhí)行步驟。第一步是裝芯片支持包STM32F103 對(duì)應(yīng)的 Pack 包在 Keil 的 Pack Installer 里直接搜 STM32F1xx_DFP 安裝即可。裝完后新建工程芯片型號(hào)選 STM32F103C8這里注意如果你的板子是 C8T6 最小系統(tǒng)板Flash 是 64KB如果代碼編譯后超過這個(gè)容量鏈接器會(huì)報(bào)錯(cuò)需要裁剪調(diào)試信息或換用 CB/RC 等更大 Flash 的型號(hào)。工程文件結(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 中最簡(jiǎn)測(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 是阻塞式測(cè)距內(nèi)部會(huì)等測(cè)量完成單次耗時(shí)大約 23ms 到 50ms 不等取決于測(cè)距模式和精度設(shè)置。如果不需要等結(jié)果可以改用中斷模式讓傳感器測(cè)量完成后通過 GPIO 中斷通知 MCU。4.2 VL53L0X 與 STM32F103 之間的關(guān)鍵上拉電路實(shí)測(cè)你可以做一個(gè)非常簡(jiǎn)單的實(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è)問題八成不是信號(hào)反射而是上拉電阻失效或阻值過大導(dǎo)致的充放電時(shí)間過長(zhǎng)。遇到這種問題第一件事不是換主控、調(diào)延時(shí)而是檢查上拉電阻的阻值和供電軌。// 用 STM32F103 的 ADC 簡(jiǎn)單驗(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í)間上選了最長(zhǎng)的 239.5 個(gè)周期這是因?yàn)闇y(cè)量對(duì)象的電源線可能有紋波短采樣時(shí)間下采樣到尖峰會(huì)被誤判為過壓。分壓電阻的精度也要注意10k10k 分壓后ADC 讀到的是 VIN 的一半如果 VIN 是 3.3VADC 讀到約 1.65V對(duì)應(yīng) ADC 值約 2047。這個(gè)驗(yàn)證手段是為了排除供電不足導(dǎo)致傳感器初始化失敗的問題。4.3 第一次上電如何判斷驅(qū)動(dòng)是真的通了驅(qū)動(dòng)移植完上電后先不要急著看測(cè)距數(shù)據(jù)先做一個(gè)最簡(jiǎn)單的自我檢查通過 IIC 讀 VL53L0X 的 ID 寄存器。0xC0 和 0xC1 這兩個(gè)寄存器分別存儲(chǔ)芯片型號(hào) ID 和版本號(hào)固定值分別是 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)信號(hào)不是陡峭的方波而是有明顯的斜坡甚至臺(tái)階VL53L0X 有時(shí)能讀到 ID有時(shí)讀不到。原因上拉電阻阻值偏大加上總線電容線纜、模塊上的電容、芯片引腳寄生電容導(dǎo)致 RC 時(shí)間常數(shù)過大信號(hào)上升沿太慢。尤其在 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 電容減少電源紋波對(duì) IIC 輸出的調(diào)制作用。5.2 地址換算錯(cuò)誤導(dǎo)致設(shè)備無應(yīng)答現(xiàn)象IIC 總線上用邏輯分析儀能看到波形但 VL53L0X 從不 ACK讀任何寄存器都返回 0xFF。數(shù)據(jù)手冊(cè)上明明寫著地址是 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 測(cè)距數(shù)據(jù)固定不變或全為 0xFFFF現(xiàn)象初始化明明成功了ID 也讀出來了但測(cè)距結(jié)果要么一直是同一個(gè)值要么是 65535。傳感器好像沒有真正開始測(cè)距。原因VL53L0X 測(cè)距需要先完成內(nèi)部校準(zhǔn)如果跳過 Perform_RefCalibration 直接測(cè)距結(jié)果可能會(huì)異常。另一種可能是傳感器正對(duì)的目標(biāo)表面吸光太強(qiáng)比如黑色絨布返回光子數(shù)太少ToF 算法無法提取有效信號(hào)。解決嚴(yán)格按照 Data_Init → Static_Init → RefCalibration → SetDeviceMode → PerformSingleRangingMeasurement 的順序調(diào)用。如果目標(biāo)表面是純黑低反射率材質(zhì)可以把測(cè)距模式從單次改為連續(xù)模式并嘗試降低傳感器內(nèi)部的 SPAD 閾值。另外檢查 XSHUT 引腳的電平如果被外部拉低傳感器會(huì)一直處于復(fù)位狀態(tài)測(cè)距自然無效。6. 進(jìn)階技巧VL53L0X 連續(xù)測(cè)距模式與多設(shè)備掛載的 IIC 仲裁實(shí)戰(zhàn)到了最后這一層驅(qū)動(dòng)已經(jīng)能單點(diǎn)測(cè)距了但實(shí)際項(xiàng)目里往往要面對(duì)兩個(gè)更高頻的需求一是追求更低的測(cè)距延遲和更高的一致性二是單顆 STM32F103 要同時(shí)掛多顆 VL53L0X。這兩件事都繞不開 IIC 時(shí)序的深入理解和驅(qū)動(dòng)層面的策略調(diào)整。連續(xù)測(cè)距模式是個(gè)關(guān)鍵技巧。單次模式每次調(diào)用 PerformSingleRangingMeasurement 都會(huì)完整地走一遍測(cè)距狀態(tài)機(jī)準(zhǔn)備、測(cè)量、讀取結(jié)果時(shí)間開銷大而且測(cè)距間隔不均勻。改成 VL53L0X_DEVICEMODE_CONTINUOUS_RANGING 后傳感器會(huì)自己按內(nèi)部節(jié)奏不停測(cè)距結(jié)果更新到內(nèi)部的測(cè)量緩沖區(qū)里MCU 只需要在需要時(shí)讀取最新結(jié)果。這時(shí) IIC 總線負(fù)載會(huì)明顯下降因?yàn)?MCU 不再需要頻繁地發(fā)起寫命令再讀數(shù)據(jù)。// 連續(xù)測(cè)距模式 中斷通知讀取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 真正完成一次測(cè)距時(shí)才讀取。注意中斷服務(wù)函數(shù)里不要做復(fù)雜計(jì)算或打印只復(fù)制測(cè)量數(shù)據(jù)到全局變量打印放到主循環(huán)里做避免外部中斷處理過長(zhǎng)導(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ì)立即失去對(duì) 0x29 的響應(yīng)所以改地址是瞬時(shí)生效的。如果你有第三顆、第四顆用同樣的流程逐個(gè)激活并分配地址即可。這個(gè)方案不需要額外的 IIC 多路復(fù)用器缺點(diǎn)是每顆傳感器占一個(gè) GPIO對(duì) STM32F103 這種 IO 豐富的芯片完全不是問題。最后再分享一個(gè)我自己的查錯(cuò)習(xí)慣任何 IIC 問題第一反應(yīng)不是看代碼而是用邏輯分析儀抓實(shí)際波形。把地址幀、寄存器地址幀、數(shù)據(jù)幀逐個(gè)對(duì)照數(shù)據(jù)手冊(cè)上的時(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
返回資訊列表
欧美在线91| 国产精品999zyz| 丰满少妇乱子伦精品无| 嗯阿好爽好紧| 亚洲中文字幕熟女少妇一区二区| 视频分类 国内精品| 久久鲁夜| 欧美大香蕉在线观看| 精品国产网站| v91av| 丁香六月东京热| 口爆欧美91| 综合久久2017| 九九热超碰97亚洲最新香蕉| 一区二区三区探花在线观看| 97视频www| 亚洲同性aV综合| 日本精品第一视频在'| 熟妇艹鸡八| 日韩性爱一级片| av资源在线播放天堂| 99热日| 天天艹天天日| 精品视频久久区| 青娱乐亚洲自拍| 大香蕉欧美日韩| 宅男影院久久久,99| 中文字幕成人| 淫淫综合网| 久久婷婷五月天| 91中文字幕在线观看| 日韩性爱小视频在线观看| 亚洲男人天堂2013| 天堂中文日本在线观看| 日韩人人精品| 99欧美| 操逼逼一区视频| 丝袜AV一区二区三区| 亚洲一本大道中文字幕无码在线| 亚洲AO在线| 美女91AV| 日韩精彩免费| 色婷婷日韩精品一区二区三区| 国精精品无码一二三区水多多| 成人色女网| 操逼视频国产无套| 日本性一区| 欧美性爱另类综合| 国产日韩久久| 啊啊啊好舒服好爽啊啊啊视频| 久久久久久久强迫| 老汉网| 尤物网址| 五月天婷婷基地| 99热婷婷| 日本操逼视频在线| 日日夜夜骚| 色网站导航大全| 97香蕉人人乳| 操逼操逼视频操逼| 老女人老91妇女老热女| aⅴ日韩成人电影av在线免费看av大全| 日本久久综合| 啪啪啪大香蕉| 岛国黄片网站| 香蕉色网| 天天综合色电影| 极品欧美一区二区三区| 久热最新在线杭州| 精品国产99| 人人操,操人人| 九九热九九| 精品一久久久| 男人天堂2012| 日本视频一区二区三区| 97色综合中文网| 成人A片男人的天堂| 91艹B视频| 天堂男人网| 另类 综合 日韩 欧美 亚洲| 国产成人无码高清| 国产男女边吃边摸视频网站| 丝袜视频网国产90| 美性中文综合网| 久热9| 无码高清操逼网址| 亚洲九九视频| 国产av青草| 蜜乳av首页| 91精品人妻偷情| 亚洲狠狠入| 蜜桃精品一区二区三区ww| 国语av最新自产拍在线观看| 国产精品一区二区手机看片| 一区二区播放| 中文字幕一区二区三四五区日日骚| 九九九九九九成人| 久久国产精品一区二区| 欧美国产操逼| 91黑丝在线| 色五月激情AV在线| 国产最新AV| 欧美高清18A片| 男人的天堂VA| 超碰 国产熟女精品一区| 日韩三级一区 | 精品久久久久久亚洲| 9118禁| 婷婷九月国产| 欧美性爱一区二区三区四区 | 欧美超碰96| 十八禁视频网站| 中文字幕人妻丝袜乱一区三区| 97网址www| 热99这里只有精品| 人妻偷拍一区二区三区| 超碰91在线| 久久久久久人| 亚洲综合伊人| 今日头条成人一区二区三区四虎精品| WWW4虎| 亚洲国产欧美中日韩成人综合视频| 青娱乐淫乱1314| 91丝袜人妻| 操逼无毒无码免费视频| 少妇第一页| 日han少妇无码| 色噜噜狠狠色综无码久久合欧美| 91狠狠色丁香婷婷综合久久精品| 亚洲国产成人精品无码专区| 午夜偷拍久久熟女| 强奸乱伦Av网| www.久久最新地址| 国产精品一区av在线| 一区二区影视| 色与欲影视天天看综合网| 国产精品3| 国产免费一区| 嗯嗯啊啊日韩精品| 蜜桃臀一区二区aV| 中文字幕精品专区搜索结果91| 91麻豆一二三区| 亚洲国成人情色好看电影| 色欲Av人妻精品一区二| 亚洲欧洲综合av在线| 欧美日韩另类在线| 欧美一区二区三区入口| 韩国午夜理伦三级好看| av强奸乱轮| 小视频国产| 免费无码国产精品v片在线观看| 三级精品三级在线观看| 超碰成人公开| 大香蕉免费乱伦视频| 日韩欧美一级特黄大片| 国产亚洲99久久精品| 91久久99久久91熟女精品| 日韩另类色图| 日本午夜福利视频| 99久久综合| 青青草玖玖爱| 伦理第一页| 成人免费性爱视视| 强奸乱伦av电影| 日韩乱中文 | 日韩激情小说一区二区| 国产精品熟女丝袜一区二区| 天天综合91在线| 澳门成人网站久国产日韩| av中文字幕在线熟女| 久久久9品一区二区三区| 91麻豆va国产精品| 久久亚洲影院一区二区| 超碰久久精品| 99热大香蕉伊在线| 亚洲网站一区二区在线| 日韩美女啪啪一区| 五月婷婷丁香中文字幕| 麻豆视频test| 肉丝无码中文高清| 99中文字幕| 国产精品白领在线观看| 国产成人免费观看在线视频| 色蜜AV| 久久综合女优| 神马久久啊啊| 97伊人超碰| 精品综合久久久久久五月天| 爱av免费| 狠插 制服 自拍| 美腿丝袜高跟网免费视频免费视频| A男人的天堂| 男同专区一区二区三区在线| 搡老女人老妇女AAA一VU麻豆| 综合欧美日本三级| 99久久国产精品免费高潮| 污色区网站| 9美女超碰在线免费观看| 日日爱99| 精品免费一区| 97超碰免费人人性爱| 入口操逼网站| 91被操| 老司机午夜精品福利视频一区二区| 丁香五月激情综合国产| 欧美成不卡网| www欧美91| 欧美性爱免费短视频| 亚洲人妻AV| 久久久穴999| 亚洲男人天堂网站| 无码视频黄色网战| 嗯~啊~快点 死我视频免费看网站| 夜夜欢天天干| 亚洲av无码成人精品国产| 久久欧美1卡2卡3| 亚洲有码第一页| 家庭乱伦麻豆| 九九无码| 99热这里都是精品| 激情看片网站| 中文字幕一二三av| 精品性爱一二三区| 超碰在线97国产| 超碰免费97| 五月婷在线| 久久大线蕉一区| 亚洲欧美不卡线| 国产吞精a级片激情电影| 1二区9| 国产精品午夜AV完会免费| 午夜福利成人免费视频| 久久久免费懂色| 午夜男女爽爽大片免费观看| 九九色热| 不卡在线观看视频| 日韩欧美视频青青| www欧美91| 97国产成人精品免费视频| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 啪啪视频亚洲第一| 国产综合久久久鬼色| 国产精品熟女一区二区三区| 国产天美欧美| 色综合一区二区三区| 99视频自拍| 成人精品久久| 色色五月天婷婷| 久热久操| 国产CHASE男男GAYGA 毛多色婷婷| 久久m| 乱伦图av| 福利五区| 天天摸,夜夜摸| 97亚洲色图| 乱色视频中文字幕| 91观看 国产白丝| 九九99久久| 日韩欧美~中文字| 2018色综合天天操| 久久久无码精品人妻二区 | 日本东京热加勒比久久| 中文一区二区| 99无码精品| 日本一级特级毛片视频| 成年男人的天堂| 狠狠色伊人亚洲综合网站色| 玖玖超碰熟| 全球成人中文在线| 亚洲中文字幕熟女少妇一区二区| 中文字幕在线24| 亚洲不卡三级手机播放| 久久久成人精品| 亚洲色图欧美视频| 色偷偷2020免费视频播放| 狠狠穞A片一區二區三區| 亚州性9| 欧美亚洲丝袜美女电影| 欧美亚洲色图另类国产| 97网站在线观看| 91亚洲人| 欧美性战999| 五月婷婷六月丁香网址| 九九九偷拍| 人人色人人操在线| 岛国1区2区3区在线观看| 精品成人女人久久| 六月天婷婷| 狠狠久久手机视频精品| 96精品一区| 98色网| 黄视频免费| 五月天欧美色图| 亚洲91少妇| 久久精品久久久久久久久| 精吧天堂| 一区黄二区黄| 全球成人中文在线| 人妻一区二区三区四区视频| 熟妇激情| 夜草欧美| 好吊色在线观看| 国产精品一二三在线看| 婷婷丁香人妻 | 一二三区在线| 久久鲁干| 精品国产一区二区三区香蕉欧美| 国产一二三福利视频网| 日韩丝袜高跟制服在线观看| 人妻久久久久久久久久久久久久久| 成人97人人超碰人人| 天天躁夜夜躁狠狠躁AV| 亚州精品丝袜-不卡成人免费| 五月婷婷丁香中文字幕| 国产强奸乱伦xd| 欧美亚州综合网图片| 91夜夜蜜桃臀1区2区3区| 无套内射性感少妇视频| 一级毛片久久久久久久女人18| 亚洲欧美97√| 国产视频第2页| 亚洲无码视频免费在线观看网址!| 九九九九九精品十六| 九九综合久久| 在线观看岛国有码| 思思视频免费看网站| 欧美综合综合| 久久后入制服| 91色图片| 精品无码久久久| 99操逼| 色综合久久88色综合久久天天| 国产欧美在线观看免费观看| 日本媚薬中文字幕在线| 热久久无毒不卡| 久久e6只有精品| 色九九九九久| 五月激情综合网| 91强奸乱轮| 免费一级a毛片久久久久久鸭绿欲| 亚洲啪啪综合?v一区综合精品区| 日本韩国五十路六十路七十路老熟女作爱视频网站| 欧美色自拍| 美腿丝袜偷拍亚洲欧美| 欧美 传媒 麻豆 日韩 偷拍| 97中文字幕色| 人妻精品一区二区全免费| 校园春色综合| 九色 人妻 大香蕉| 久久九九综合| 九九99精品视频在线观看| 综合欧美日韩在线观看| 凸凹视频在线观看| 欧美黄色片AAAAA| 国产精品久久久鸭无码的功能| 留下AⅤ黄色片| 午夜精品久久久久久久久久蜜桃| 色天堂综合| 亚洲av国产av综合av卡| 欧美天堂亚洲电影院一区在线播放| 亚洲精品无码久久AV| 亚洲伊人久久精品影院| 在线v中文字幕一区二区三区| 国内外毛片在线观看| 国产精品久久久久综合| 天天操妹子| 99国产精品人妻人伦| 人妻色偷色噜| 97精品97久久| 伊人成人中文字幕久久网| 人人摸人人入| 91五月天| 国产免费一区在线观看| 亚洲在高跟鞋自慰久久在色线| 天天干人人干天天日97| 久久久久久99999国产精品| 91 亚洲 欧洲| 天堂v无码免费视频| 色 亚洲 91| 丁香五月综合| 日日不卡av| 激情图片亚洲色图| 夜色AV无码手机在线影院| 风间由美日韩欧美久久| 天美精品av| 大学生口爆吞精| 国产欧美日产一区二区三区 - 国产欧美日 | 9久久精品| 国产农村妇女精品1区二区| 国产精品无码在线| 天天综合97| 欧美韩国你懂得在线| 乱操9999| 西西美女视频网| 2021国产成人精品久久| 欧美精品双插| 五月丁香社区婷婷日韩欧美精品影院| 色噜噜狠狠色综无码久久合欧美| 色婷婷久久综合超碰| 九九Av| 超碰97人妻免费在线| 9997se| 久久久久久久久久久97| 天天干夜夜操网| 中文字幕国产在线天堂| 亚洲AV资源| aⅴ日韩成人电影av在线免费看av大全 | A一区片| 中文字幕超碰CAO| 欧美春色| 激情五月天校园春色网| 欧美九九99久久精品| 日本操大逼| 国产91福利小视频在线观看| 啊啊啊好大好深| 日本不卡一区二区三区| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 天天日天天舔东京热| 性做久久久久久免费观看软件| 日本不卡五区| 人妻夜爽夜夜爽| 少妇内射www在线观看视频| 国色天香av| 日本123区操B视频| 国产欧美精选自拍一区| 成人小说视频在线精品欧美| 丰满人妻区一区二区三| 91在线国产后入风骚翘臀美女素人| 男生女生啊啊啊啊| 九九热免费国产视频婷婷伊人五月 | 亚洲青青草| 中文字幕加勒比海高清无码免费视频 | 五月天激情四射| 国产性爱在线视频一区二区| 国产精品精品系列在线观看| 亚洲色图欧美色图另类图片| 亚洲欧美综合网| 九九九热精品| 久久精品中文| 自拍欧美| WWW.加勒比人妻一区不卡.com| http://qxhbdz.com| 色色色天美视频| 久久久久人妻二区精品叶可怜| 凹凸视频在线一区二区| 东京热男人的天堂| 美女啊啊啊啊啊| 噜噜瑟| 啊啊啊啊啊舒服| 性性久久| 欧洲Au麻豆| 日韩精品高清资源在线| 爱欲AV| 97干com| 色妺妺在线视频| 亚洲色色色| 超踫中文字幕| 91人人爽人人爽| 亚洲欧美精品91| 人妻久久久久久久久久久久久久久| 91狠狠综合久久| 啪啪啪综合网| 国产精品一二三免费网站| 丁香色婷婷| 天天色播亚洲综合网站| 秋霞视频一区二区 | 人人操人人精品影片| 中文在线视频| 久久久天美| 久久久精品一区二区| 精品人妻一二三四区视频| av 模特一区了| 国产免费一区| 日韩射图| 天天色欧美| 亚洲一区二区av| 久这精品中文在线观看视频| 97色碰| 丰满人妻被猛烈进入中| 97在线视频观看网站| 先锋激情∨在线视频播放| 五月丁香拍拍激情综合三级| 青青草丝袜在线视频| 亚洲AV永久无码一区仙野| 亚洲天堂一区| 日韩精品人妻| 人人干人人操人人爱| 一级毛片久久久久久久女人18| 欧美一区二区三区另类精品| 日本久久99| 欧亚洲精品有视频| 亚州久久9| 另类专区加勒比| 欧美视频一区二区三区| 无码高清操逼| a v网站在线播放| 在线不卡视频| 色好看av| 久久一本大香蕉| 日日97| 日本视频在线中文字幕| 色在线亚洲视频www| 91精品无码人妻系列| h在线看免费版在线看| 97高清啪啪| 青青草原人妻| 长久操视频| 国产精品一区二区三区免费视频| 97超碰磁| 很黄很色的视频在线观看| 色婷婷一区二区三区久久| 人人性爱视频免费| 强奸a片网| 91超碰人人| 在线情色电影 91大| 久久精品熟妇丰满人妻99| 午夜无遮挡男女啪啪视频| 在线观看国产黄色| 欧美日韩222| 成人情色综合网| 大香蕉乱级| 人妻熟女av国产网站| 大香蕉九九| 97超碰亚洲| 国产精品在线免费| 老司机午夜精品视频| 国产精品一二三在线看| 动漫片子网站3黄| 日本高清视频在线观看黄已三辽| 国产无马在线| 99久久精品国产高潮| 日本不卡三级网在线播放| 无码精品啪啪啪一区二区三区三州| 中文视频在线观看| JIZZJIZZ国产精品喷水| 97超碰色屌| 呻吟 欧美 日本 中出| 国产一国产一级毛片古装| 日韩性爱再线视频| 97超碰色屌| 大香蕉92| 欧洲亚洲国产综合在线| 国产精品交换一区二区| 亚洲脚交| 国产操逼逼网| 人妻天天爽夜夜爽爽| 亚欧操逼片在线观看| 成人乱人伦一区二区| 美腿色图| 久久精品超碰| 久久丁香五月天| 日韩 欧美 国产 麻豆| 高清国产精品福利网站| 免费视频无码| 在线中文AV| 视频国产欧美在线播放| 亚洲日韩精品久久久久一区壹牛 | 日本一本一区二区三区四区五区欧美日韩中文字幕 | 中英熟女操女| 天天日少妇逼AV| 果冻传媒一区二区三区| 搡老女人老妇女AAA一VU麻豆| 嗯嗯啊啊操死我| 亚洲少妇自拍中文字幕懂色| 国产中文精品一区二区在线观看| 亚洲一二三四区机械| 久草精品视频| 精品国产91av一区二区三区| 日本日日色视频| 欧美精品宗合| 久久久工口| 国产精品一区二区三区四区五区| 狠狠干综合| av2014 日韩在线中文字幕| 亚洲精品a人片在线观看视| 久草精品一区| 天天澡天天爽日日AV| 国产亚洲人妻综合日韩 久久| 色狠狠一区二区三区香蕉| 看大黄色大片原件| 人人澡人人爽人人精品| 国产内射爽爽大片| 91殴美大片| 香蕉国产精品麻豆亚洲欧美日韩| 最新亚洲风情电影| 无码免费在线观看黄色片| 久久天天性久久伊人| 啊啊啊爽爽| 亚洲AV无码天美传媒一区| 97色综合中文网| 大屁股xxxxx| 新精精品久久精品| 福利在线观看一区二区| av 模特一区了| 亚洲国产午夜真人一级片中文字幕精品黄网站| 91少妇香蕉久久精品| 日韩在线电影| 十八禁网站在线| 韩国免费播放一级毛片| 九九热五区| 国产精品国产自产高清AV| 精品无码人妻一区二区免费蜜桃| 精品成人亚洲午夜电影| 99精品久久久久久| www.超碰在线| 久久男人| 911av网站免费观看| 亚洲色图20p| 伦激情人妻另类人妻| 人妻免费观看| 妺妺跟我一起洗澡没忍住| 国产欧美日产一区二区三区 - 国产欧美日 | 天天看高清麻豆| 在线免费观看日韩一区| 伊人四虎综合| 久久综合九九| 日韩性爱小视频| 亚洲视频小说| 日本日皮视频逼| 天堂综合网| 亚洲s在线观看| 性爱免费视频成人| 婷婷8月天青娱乐| 亚洲AV噜噜狠狠网址蜜桃动漫| 超碰久久综合| 欧美综合站| 欧洲亚洲国产综合在线| 青久久| 日韩草久视频| 麻豆国产精品午夜视频| Aa东京男人的天堂| 国产无吗在线播放| 很黄很污的免费网站| 国产av强奸美女| 超碰社区97| 夜夜嗨AV一区天天| 日本成人A片网站| 日韩在线观看AV| 欧美综合骚| 亚洲国产婷婷在线播放| 久久久九九| 久久啊哟| 香蕉人人操tv| 免费精品无码一级毛片牛牛影视 | 亚洲麻豆18发?| 亚洲精品美女久久久久久久久| 七月丁香婷婷| 日韩人妻精品| 97久久超碰国产网站| 美女被艹尤物视频| 最新av中文字幕高清| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 好吊色一区| 国产资源中文字幕在线| 97精品视频在线播放| 精品久久久av| 国产92麻豆天美精品色欲5| 亚洲天堂一区| 在线电影亚洲色图| 东北女人的毛片| 大香蕉婷婷| 国产成人午夜视频网址| 色五月AV| 一二三四区电影| 亚欧日韩成人| 欧美激情亚洲| 旡码电影特区| 久久久夜夜嗨免费视频| 免费一级性爱久久| 精品免费囯产一区二区三区| 亚洲熟女乱综合一区二区三区| 久久香蕉国产线看观看猫咪av| 欧美精品二区视频在线| 91n处女在线观看| 四虎在线免费视频| 欧美中文字幕一区 | 亚春色色| 后入式在线免费观看60秒| 亚洲日本成人动漫| 女人午夜视频777| 岛国福利在线精品播放| 欧美高清色| 一区二区播放| 麻豆天美在线喷水AV| 玖玖爱综合| 久久久久久亚洲精品不卡人乳| 一类av片在线看| 亚州综合色| 91无码人妻精品一区二区三区蜜桃| 射欧美综合| 人妻久热在线| 婷婷天堂站| 嫩草影院性色| 亚洲色综合| 2017天天操| 中出人妻中文字幕91在线| 午夜福利久久久噜久噜久久综合 | 天天天天操| 亚洲欧洲日韩国产自在线| 黄色激情电影在线观看| AV麻豆免费一区| 91综合在线| 熟女人妻一区二区三区免费看| 伊人aaa| 精品网站99999| 婷婷色网| 国产久久一区二区午夜| 天堂蜜桃无码视频一区二区| 五月婷婷综合激情| 长长久久免费视频| 亚洲日韩一区电影| www.狠狠干.coom| 亚洲色吧网| 一牛影视久久久一区二区三区| 伊人影院中文字幕| 激情开心五月天| 丁香五月婷婷色| 久久99网站| 99视频内射三四| 激情五月天丁香社区| 欧美日韩岛国大片在线观看| 人人射人人操人人摸| 能直接看AV的网站| 精品人人插人人操| 97色色视频| 91性高潮久久久久久久久| 免費黃色視頻觀看一| 亚洲欧美国产日本一区二区三区 | 丝袜AV一二三区| 综合久久99| 亚洲成人碰碰| 99热| 男女打扑克高清网站| 久久的网站啊啊啊啊啊| 中文字幕版| 国产精品丝袜久久亚洲不卡| 欧美黑人91| 97人人爱人人乐| 我要色综合网| 天堂v无码免费视频| 国内精品a| 操逼不卡中文字幕| 日本道久久综合色色| 久久综合婷婷| 亚洲另类久操网| 美女91在线观看| 亚洲综合一| 欧美日韩精品久久久久东北老熟妇| 中国和日本人色哪个不下载能放| 国产9区| 国产综合在线视频网站| 十八禁成人网站在线观看| 91精品久久久| 亚洲国产欧美中文永久| 人妻加勒比东京热| 久草精品国产蜜臀| h色99999| 91天美免费| 中文字幕在线免费观看 | 国产一级高跟丝袜| 国产成人无码高清| 色婷婷综合网站| 日韩美女久久一区二区三区| 97干色天堂| 久久亚洲熟妇在线视频| 91l欧美在线| 91大香蕉伊人| 日本媚薬中文字幕在线| 久久日韩精品一区二区| 欧美性爱中文字幕无线码| 五月婷婷啪啪| 天天弄欧美| 国产熟女自拍| 91亚洲图片| 操逼操2| 国产精品一二三在线看| 黄色网址久久精品欧美喷水| 麻豆一区在线| 精品久久久久综合无码| 91精品国产91久久福利| 精品毛片久久久精品毛片| 欧美色图天堂在线| 中文字幕视频免费| 日本色日夜干| 操逼逼中文字幕| 色综合一区二区三巨| 天天天乱色综合全| 亚洲精品91| 日韩精品在线观看观看| 亚洲精品丝袜-不卡成人免费……| 金典av| 久久久蜜桃臀无码视频| 无码高清专| 亚洲男人的天堂一区二区| 久久精品一区二区三区蜜桃臀| 97超碰超碰| 无码抄逼网| 日日摸天天爽夜夜欢| 69少妇一区二区| 久久人妻视频网| 怡红院亚洲怡春院av| 手机午夜电影神马久久| 超踫中文字幕| 老色鬼成人精品视频下载大在线观看| 伊人久久在线视频观看| 狼人久草| AV高清一区| 97激情97激情| 亚洲啪啪啪啪视香蕉| 中文字幕后石码四区五区| 国产极品一区二区三区三州| 国产成自自拍在线观看| 欧美亚州综合网图片| 370p日韩欧美亚洲精品| 奸色色 男人天堂 天天射| 欧美线天码中字| 性色生活片久久毛片婬片免费放女人一级毛片 | 亚洲的天堂网| 亚洲欧美国产中文视频| 久久久久国产无av| 好看的久久不射无码影视影院| 综合网91| 激情五月天网站| 色69大色97香蕉| 最新三级网址| 精品少妇后入一区二区三区四区人妻巨乳 | 97内射偷拍| 九九九九久久久久| 五月婷婷激情网| 97精品网站| 欧美日韩国产黄色片| 九九热精品视频在线观看| 一级免费精品| 性色生活片久久毛片婬片免费放女人一级毛片 | 蜜臀久久99精品| 色噜噜人妻av中文字幕| 国产精品一二三区18| 狼人综合婷婷激情四射 | 国产综合日韩伦理| 超碰人人乐97| 97免费在线观看| 激情综合网激情五月天| 久久r精品| 26uuu国产免费观看| 欧美一区二区三区成人性生活| 欧美成人性爱视频在线播放| 欧亚性爱视频免费看| 欧亚久久偷拍视频| 一级岛国大片| 人妻天天爽夜夜爽爽| 人人操欧美风骚| 日本一区二区电影网站| 色综合一区二区三区| 蜜臀久久99精品久久综合| 97色综合中文网| 久久久爆乳翘臀一线天伦理视频| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 久久久久久九九九| 麻豆精品久久久久久久| 中文字幕在线观| 麻豆精品久久久久久久| 男女无套 免费网站| 夫妻四区五区六区| 欧美性爱第一页久久| 亚洲av热热色| 四虎国产精品永久地址入口| 97超碰色屌| 在线有码中文字幕| 伊人网在线视频| 亚洲精品一区二区三区在线播放| 美女毛片999| 无码av永久免费专区网站| 亚洲国产丝袜在线观看| 成年女人黄网站| 夜夜骑天天燥| 日韩熟女操逼| 精品国产一区二区久久| 91国模| 蜜色网色哟哟| 国产精品久久久无码aV去| 偷拍在线观看视频| 欧美系列在线一区二区| 亚洲同性aV综合| 欧美淫穴| 久久精品国产AV一区二区三区| 裸体美女久久久| www.av在线观看| 天天爱天天操| 午夜天堂网| 亚洲婷婷丁香在线| 亚洲天堂情色| 国产无马视频| 亚洲情色 自拍| 黄色小视频日本txt| 国产91 丝袜在线播放| 神马久久久久眼| 国产精品一区二区校花| 中出在线视频| 亚洲综合97中文网| 国产a片操逼| 中文字幕av片| 亚洲天堂人妻一区二区| 色综合91好| 欧美91在线+|+欧美| 欧美一区二区亚洲天堂| 99蜜桃臀亚洲成人在线观看| 久久久精品成人国产| 九九九九免费| a人片中文字幕一区二区| 久久久com| 边做饭边操逼逼| 日本日日色视频| 搡老熟女老女人老熟妇免费视频| 欧美草草高清日韩视频| 熟女一区二区| 大香蕉久| 欧美999| 日本熟妇一区二区三区| 三级特黄60分钟播放| 97欧美| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 97色婷婷| 美国精品国产精品| 97色操| 久啪| 久9久| 狠狠色婷婷7777久| 综合免费无码中文| 大香蕉日韩| 久久是精品| 欧美第38页| 成人五月天丁香激情综合| 日日黄色三级网站| 欧美激情综合| 三级色综合| 日韩欧无码一区二区三区免费不卡| 97天天操天天干| 99热网站| 国产精品自拍xxxx| 天天看天天日| 亚洲第一视频 欧美风情 日韩| 久久久不卡区一区二区三区久久久| 日本中文字幕在线视频 | 东北操逼| 精品国产乱码久久久久久久久1| av在线一区二区三区| 欧美天天综合网| 国产熟码AV| 国产二区三区粉嫩在线| 国产超碰国产97| 深田咏美亚洲精品福利社| 人人贴人人摸| 97在线免费观看| 天天欧美97| 超碰国产情侣自拍网| 丁香成人五月天| 久久伊人最新网址视频| 大香蕉日韩欧美| 亚欧洲一区二区视频| 狠狠搞 亚洲91| 操逼国产免费| 翔田千里A片一区二区| 综合夜夜| 99re视频这里只有精品| 麻豆精品天美| 97香蕉人人乳| 啪啪视频mP4| 五月天色图影视| 少妇超碰在线| 操人无码| 日本天天色| 欧美婷婷五月天| 亚洲国产激情国产av| 国产AV无码AV| 草草影院最新网址| 国产又黄又爽又刺激久久久久久| 粉嫩av在线| 国内外内射高清视频| 久久精品人妻一区| 亚洲欧美色图片| 久久春色| 亚州男人天堂| nuu12国产麻豆精品| 另类专区加勒比| 99re在线视频国产| 久久伦理视频久久大香蕉视频| 九九久久国产精品| 人妻酒店出差被中出免费在线播放| 射丝袜高跟鞋99| 青青草视频爽一爽| 日韩美女久久一区二区三区| 伊人网av| 91大学精品激情戏| 极品色www影院| 久久精品性| 精品久久久久久亚洲| 丰满人妻一区二区三区免费,| 国产超碰国产97| www.婷婷六月天| 99∨VTV| 五月天婷婷激情| 亚洲图片欧美日韩| 69精品在线| 99热精品青草在线 | 操操操日本的逼| 操逼无码一区| 一区二区娱乐网站| 色综合av男人天堂| 日本中文字幕在线电影| 色五月综合| 色爽爽文学| 躁躁日曰躁2020| 9长久久精品| 欧美在线|亚洲| 久久大香蕉97| 91亚洲黄色网| 呦呦一区| 免费久久一级毛片大黄| 天天看天天在线精品| 国产欧美一级在线观看| 丁香五月激情婷婷| 麻豆天美电影一区二区| 国产熟妇一区二区| 亚洲精品亚洲人成人网| 久久精品国内Av熟女高清| 精品高清一区二区三区三州| 九月丁香综合网| 丁香六月啪啪| 亚洲情色婷婷五月天| 日韩操人| 久久综合婷婷| 尤物av网站| 欧美大片一区二区三区| 精品久久久一本一道| 色噜噜国产精品视频一区二区| 免费观看性欧美一级| 国产第25页在线观看| 婷婷九月| 亚洲欧美国产中文字幕| 久久久久久久综合,国产| 啊啊啊啊啊在线| 热99这里有精品综合久久 | 夜草网站| 久久中文字幕一区不卡| 可以在线观看AV的网站| 国产久久成人| 簧片免费看视频| 国内91熟女人妻丝袜天天精品视频在线| 天天操狠狠日夜夜干超碰撸com视频在线观看| 99热精品在线观看| 久久不卡一区二区 | 91人妻久久久久久久久久久久久| 亚洲丨在线| 精品无码久久久久久久杏吧| 亚洲精品国产专区在线观看| 久热在线精品免费观看| A片A5445444| 国产精品午夜高潮呻吟久久av| 东北黄色电影| 欧美另类自拍 | 中文一区二区三区影院| 婷婷操视频| 欧美国产欧美在线观看| 91操碰| 精品一久久久| 欧美综合狠| 色九久| av一区二区三区不卡| 中文字幕在线观看二区三区| 男人的天堂欧美| 老熟女天天操| 无套内射人妻在线播放| 天天色综合图片| 91精品人妻啪啪间| 干我久操| 激情综合久久| 中文字幕久久亚州无码| 久久久四区| 亚洲成a人片在线观看中文!!!| 水澄无码AV| 国产青青美女玩逼视频| 天天日天天干少妇日| 国语精品内射在线观看| 九九视品黄色| 日本国产二线女色| 2019久久久久久久久福利| 五月香婷婷| 精品中文日韩字幕视频| 黄色片A级一区二区三区| 国产偷拍自拍在线视频| 一区二区 韩日AV| 日日干夜夜欢| 日本精品999| 不卡啪啪视频| 欧美变态激情网| 国产品精品自在在线午夜免费| 秋霞一级视频在线观看免费| 亚洲欧洲无码97久久精品| 色妺妺AⅤ| 丁香五月久久| 久久久久ab| 999久久久| 九九黄色网| 亚洲情色综合网| 久久精品国产精品一区| 婷婷五月天小说| 久久风骚城市| 岛国片在线播放| 九九九九88| 亚洲丝袜少妇在线| 影音先锋视频在线| 激情文学欧美| 人人人干干人人干| 日本三级韩三级99久久| 欧美日韩另类字幕中文| 在线岛国新天堂8| 97视频在线免费看| 十八禁黄色| 91快色色色色色| 久久爽爽精品| 日韩中文字幕视频| 久久9亚洲| 精品久久97| 婷婷香蕉| 中日韩久久久免费看| 制度丝袜99| 亚洲限制级| 亚洲综合另类| 亚州成人a∨| 2024黄色视频| 久久黄黄| 蜜桃久久一区| 91蜜桃婷婷狠狠久久综合9色| 自拍第一页| 久久无码成人| 免费看污网址| 天天草夜夜草高潮片| 久久m| 人人贴人人摸| 一区二区三区 丝袜 高跟 美腿| 欧美色图91| 992这里有精品| 亚洲图片小说欧洲| 国产成人+综合亚洲+天堂| 久久久久久免费电影| 国产精品久久伊人| 欧美偷| 五月婷婷大香蕉| 欧美性爱超碰97| 1024香蕉视频| 新怡红院| 欧美日韩高潮喷水91| 97操| 欧美在线官网| 久9re热视频这里只有精品| 97玖玖人妻| 国产精品区在线12p| 天堂伊人久久| 国产日逼视频| 男女性扦B|