免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

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

STM32F103模擬IIC驅(qū)動PCA9555實(shí)現(xiàn)16路IO擴(kuò)展

STM32F103模擬IIC驅(qū)動PCA9555實(shí)現(xiàn)16路IO擴(kuò)展 簡介面向嵌入式開發(fā)者與高校學(xué)生的 STM32F103 軟件模擬 IIC 訪問 PCA9555 實(shí)例工程重點(diǎn)解決在不依賴硬件 I2C 外設(shè)時擴(kuò)展 16 位 IO 端口的通信問題。工程圍繞 SCL/SDA 的 GPIO 時序模擬、起始與停止條件、7 位從機(jī)地址及讀寫位、PCA9555 輸入/輸出與中斷相關(guān)寄存器的讀寫展開適合作為 IIC 協(xié)議入門、IO 擴(kuò)展和嵌入式外設(shè)調(diào)試的參考。壓縮包共 127 個文件約 2MB以 33 個 h 頭文件、32 個 c 源文件為核心配合 Keil 工程配置、編譯中間文件及 hex/axf 燒錄產(chǎn)物便于直接打開、編譯與對照學(xué)習(xí)。已有 4838 人學(xué)習(xí)讀者可從中獲得完整可運(yùn)行的工程骨架、軟件模擬 IIC 的時序?qū)崿F(xiàn)思路、PCA9555 寄存器操作范例以及編譯燒錄與排錯參考。1. 從兩根線到十六個 IOSTM32F103 模擬 IIC 驅(qū)動 PCA9555 的真實(shí)價值手里拿著一塊 STM32F103 最小系統(tǒng)板需要外擴(kuò) 16 個按鍵或繼電器GPIO 已經(jīng)快用完了但硬件 IIC 的引腳又剛好被其他外設(shè)占用——這種場景我遇到過不止一次。PCA9555 就是為這類情況準(zhǔn)備的它是 16 位 IIC 轉(zhuǎn)并行 IO 擴(kuò)展芯片通過兩根線就能管住 16 個 IO還能配置成輸入或輸出支持中斷上報。項目標(biāo)題里那句「親測有效」并不夸張模擬 IIC軟件 IIC在 STM32 上比硬件 IIC 更可控時序能按 PCA9555 的數(shù)據(jù)手冊調(diào)整出問題能逐位抓取波形不像硬件外設(shè)那樣只能對著寄存器配置發(fā)愁。這篇筆記面向已經(jīng)能點(diǎn)亮 LED、但還沒把 IO 擴(kuò)展芯片跑通的嵌入式開發(fā)者尤其是使用 STM32F103 這類經(jīng)典型號的讀者。我會把模擬 IIC 的時序怎么實(shí)現(xiàn)、PCA9555 的寄存器怎么讀寫、上電初始化順序、讀寫單個位和整個端口的方法講清楚再落到實(shí)際能編譯運(yùn)行的代碼。硬件 IIC 的玄學(xué)問題不少模擬 IIC 至少能讓每條時序線都看得見。2. 模擬 IIC 與 PCA9555 的匹配邏輯為什么不用硬件外設(shè)2.1 先算清楚引腳賬為什么模擬方案更合適STM32F103 的硬件 IIC 一般掛在 PB6/PB7I2C1或 PB10/PB11I2C2上。如果你在同一個項目里已經(jīng)用到了這些引腳再想加 PCA9555就得考慮重映射或者切到軟件模擬。模擬 IIC 的本質(zhì)是用兩個普通 GPIO 分別充當(dāng) SCL 和 SDA靠代碼控制高低電平來生成 START、STOP、ACK 這些時序單元。它不占用硬件 IIC 外設(shè)引腳可以隨便挑比如 PB8/PB9、PA5/PA6 都能用。我通常選開漏輸出模式并外接 4.7kΩ 上拉電阻。原因很直接IIC 總線是開漏結(jié)構(gòu)多個設(shè)備共享時誰拉低誰就占線如果配成推挽一旦從機(jī)也在拉低就變成兩個推挽輸出對頂容易燒引腳。這一點(diǎn)和硬件 IIC 配置一致不能省。選 PCA9555 而不是 74HC595 的理由也值得說清。74HC595 只能輸出無法讀取輸入狀態(tài)做按鍵掃描就不行PCA9555 的 16 個 IO 可以按端口配置方向端口 0 和端口 1 各自獨(dú)立配置輸入輸出混用很方便。它還有中斷輸出引腳任一輸入引腳狀態(tài)變化都能觸發(fā)不用 MCU 輪詢。代價是 IIC 協(xié)議本身比 SPI 慢不過 IO 擴(kuò)展這種場景對速度不敏感幾十 kHz 就夠用。2.2 PCA9555 的寄存器地圖四個命令字節(jié)就夠了PCA9555 內(nèi)部只有四個可尋址的寄存器每個寄存器 8 位對應(yīng)一個端口的 8 個引腳命令字節(jié)寄存器讀寫作用0x00輸入端口 0讀讀 P0 口 8 個引腳的實(shí)時電平0x01輸入端口 1讀讀 P1 口 8 個引腳的實(shí)時電平0x02輸出端口 0讀寫設(shè)置 P0 口輸出鎖存值0x03輸出端口 1讀寫設(shè)置 P1 口輸出鎖存值0x04極性反轉(zhuǎn) 0讀寫翻轉(zhuǎn) P0 口輸入極性0x05極性反轉(zhuǎn) 1讀寫翻轉(zhuǎn) P1 口輸入極性0x06配置端口 0讀寫P0 方向1 為輸入0 為輸出0x07配置端口 1讀寫P1 方向1 為輸入0 為輸出這八個命令字節(jié)是理解 PCA9555 的順序。配置寄存器的位定義為 1 表示輸入為 0 表示輸出上電默認(rèn)全部是輸入因此如果不先寫配置寄存器就直接寫輸出寄存器引腳仍會保持高阻燈不會亮。極性反轉(zhuǎn)寄存器一般保持 0x00除非你希望把按鍵的低有效直接讀成高有效可以用它省掉軟件取反。這里有個容易忽略的點(diǎn)命令字節(jié)在寫操作后會自動遞增也就是你寫 0x02輸出端口 0之后再連續(xù)寫一個字節(jié)它會自動落到 0x03輸出端口 1。所以初始化時可以用一次兩字節(jié)寫把兩個端口的值一起設(shè)好效率比兩次單字節(jié)寫高。2.3 從機(jī)地址怎么定7 位地址左移一位PCA9555 的 7 位從機(jī)地址由 A0、A1、A2 三個引腳決定公式是0100 A2 A1 A0。三個引腳都接地時7 位地址是 0x20寫操作字節(jié)是 0x40讀操作字節(jié)是 0x41。A0 接高電平時地址變成 0x21寫字節(jié) 0x42以此類推。這個換算是新手最容易翻車的地方數(shù)據(jù)手冊里給的是 7 位地址而代碼里需要在末尾補(bǔ)一位讀寫位直接拿 0x20 當(dāng)寫地址發(fā)出去從機(jī)不會應(yīng)答。我一般會在頭文件里把地址定義成一個宏再用移位生成讀寫字/* PCA9555 7 位從機(jī)地址: A2 A1 A0 全接地 0x20 */ #define PCA9555_ADDR 0x20 /* 寫字節(jié) 7 位地址左移 1 位, 最低位 0 */ #define PCA9555_WRITE_ADDR (PCA9555_ADDR 1) /* 讀字節(jié) 7 位地址左移 1 位, 最低位 1 */ #define PCA9555_READ_ADDR ((PCA9555_ADDR 1) | 0x01)這段宏看起來簡單但把PCA9555_ADDR 1寫成PCA9555_ADDR是在我排查過的故障里出現(xiàn)頻率最高的。另一個細(xì)節(jié)是讀操作采用兩段式先寫一次地址字節(jié)帶寫標(biāo)志再發(fā)一次重復(fù)起始條件帶讀標(biāo)志然后連續(xù)讀兩個字節(jié)并且只在最后一個字節(jié)回 NACK。如果兩個字節(jié)都回 ACK從機(jī)會繼續(xù)保持 SDA 輸出下一輪通信容易出錯。3. 五步搭起模擬 IIC 驅(qū)動層從引腳定義到字節(jié)收發(fā)3.1 GPIO 初始化和時序宏把微秒級延時落到實(shí)處模擬 IIC 的第一層是引腳電平操作和延時。F103 主頻 72MHz 時一個簡單 for 循環(huán)空轉(zhuǎn)的耗時很難精確估算而且編譯器優(yōu)化等級一變循環(huán)就被優(yōu)化掉。我傾向用 SysTick 做微秒延時或者至少把延時函數(shù)放到單獨(dú)文件里并加__attribute__((noinline))防止內(nèi)聯(lián)。PCA9555 數(shù)據(jù)手冊對 SCL 高電平和低電平的最小時間有要求標(biāo)準(zhǔn)模式下總線頻率 100kHz半周期約 5 微秒留一點(diǎn)余量按 5 到 6 微秒設(shè)置比較穩(wěn)。#include stm32f10x.h #define IIC_SCL_HIGH() GPIOB-BSRR GPIO_BSRR_BS8 #define IIC_SCL_LOW() GPIOB-BRR GPIO_BRR_BR8 #define IIC_SDA_HIGH() GPIOB-BSRR GPIO_BSRR_BS9 #define IIC_SDA_LOW() GPIOB-BRR GPIO_BRR_BR9 #define IIC_SDA_READ() ((GPIOB-IDR GPIO_IDR_IDR9) ! 0) /* 5 微秒量級的軟件延時, 實(shí)際工程建議換成 SysTick 計時 */ static void iic_delay(void) { volatile uint32_t n 60; while (n--) { } } void iic_gpio_init(void) { GPIO_InitTypeDef gpio; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /* SCL 和 SDA 都配置為開漏輸出, 外接 4.7k 上拉 */ gpio.GPIO_Pin GPIO_Pin_8 | GPIO_Pin_9; gpio.GPIO_Mode GPIO_Mode_Out_OD; gpio.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, gpio); /* 釋放總線, 空閑時兩根線都是高電平 */ IIC_SCL_HIGH(); IIC_SDA_HIGH(); }這里用 BSRR 和 BRR 寄存器直接置位、清零比GPIO_SetBits、GPIO_ResetBits函數(shù)少一層調(diào)用開銷時序更平整。SDA 讀取用 IDR 直接取位。開漏模式下即使寫 1引腳實(shí)際電平也由上拉電阻和總線上的從機(jī)決定所以讀 IDR 能得到真實(shí)總線狀態(tài)這是模擬 IIC 能回讀 ACK 的前提。如果你用推挽模式SDA 讀出來永遠(yuǎn)是自己寫的值從機(jī)是否應(yīng)答就完全測不出來故障排查會變成黑匣子。3.2 起始、停止、應(yīng)答三個時序單元的實(shí)現(xiàn)模擬 IIC 的所有操作都由三個基本單元拼出來起始條件、停止條件、應(yīng)答位。起始條件是在 SCL 為高時SDA 從高變低停止條件是 SCL 為高時SDA 從低變高。應(yīng)答位是在發(fā)送完 8 位數(shù)據(jù)后釋放 SDA在第 9 個 SCL 高電平期間讀取 SDA 是否為低。這三個函數(shù)寫對了整個協(xié)議就成立寫錯了后面無論怎么調(diào)都讀不到數(shù)據(jù)。void iic_start(void) { IIC_SDA_HIGH(); IIC_SCL_HIGH(); iic_delay(); IIC_SDA_LOW(); /* SCL 高電平期間 SDA 下降沿 起始 */ iic_delay(); IIC_SCL_LOW(); } void iic_stop(void) { IIC_SDA_LOW(); IIC_SCL_HIGH(); iic_delay(); IIC_SDA_HIGH(); /* SCL 高電平期間 SDA 上升沿 停止 */ iic_delay(); } /* 主機(jī)發(fā)送應(yīng)答: ack1 回 ACK, ack0 回 NACK */ void iic_send_ack(uint8_t ack) { IIC_SCL_LOW(); if (ack) { IIC_SDA_LOW(); } else { IIC_SDA_HIGH(); } iic_delay(); IIC_SCL_HIGH(); iic_delay(); IIC_SCL_LOW(); IIC_SDA_HIGH(); /* 釋放 SDA, 準(zhǔn)備下一字節(jié) */ } /* 主機(jī)等待從機(jī)應(yīng)答, 返回 0 表示收到 ACK, 1 表示 NACK */ uint8_t iic_wait_ack(void) { uint8_t ret; IIC_SDA_HIGH(); /* 釋放 SDA, 讓從機(jī)拉低 */ iic_delay(); IIC_SCL_HIGH(); iic_delay(); ret IIC_SDA_READ() ? 1 : 0; IIC_SCL_LOW(); return ret; }時序里幾個順序不能亂。iic_start中先把 SDA 拉高、SCL 拉高再讓 SDA 下降如果順序顛倒從機(jī)會把這次變化當(dāng)成普通數(shù)據(jù)位。iic_send_ack里在 SCL 低電平期間改變 SDA然后拉高 SCL 讓從機(jī)采樣這個「低電平改數(shù)據(jù)、高電平采樣」的規(guī)則貫穿整個 IIC 協(xié)議。iic_wait_ack中先釋放 SDA 再拉高 SCL順序顛倒的話你自己拉低 SDA 而 SCL 同時變高就會被從機(jī)誤判為起始或停止條件。3.3 字節(jié)收發(fā)與寄存器讀寫封裝有了時序單元字節(jié)收發(fā)就是 8 次循環(huán)每次在 SCL 低時把數(shù)據(jù)位放到 SDA 上然后拉高 SCL 讓從機(jī)采樣。讀字節(jié)則相反每次拉高 SCL 后從 SDA 取位再拉低。字節(jié)收完之后要處理 ACK發(fā)送方向由主機(jī)在收完從機(jī)的 ACK 后決定是否繼續(xù)。/* 主機(jī)向從機(jī)發(fā)送一個字節(jié), 返回從機(jī)的應(yīng)答: 0ACK, 1NACK */ uint8_t iic_write_byte(uint8_t data) { uint8_t i, ack; for (i 0; i 8; i) { IIC_SCL_LOW(); if (data 0x80) { IIC_SDA_HIGH(); } else { IIC_SDA_LOW(); } data 1; iic_delay(); IIC_SCL_HIGH(); iic_delay(); } IIC_SCL_LOW(); ack iic_wait_ack(); return ack; } /* 主機(jī)從從機(jī)讀一個字節(jié), send_ack1 表示讀完后回 ACK, 0 表示回 NACK */ uint8_t iic_read_byte(uint8_t send_ack) { uint8_t i, data 0; IIC_SDA_HIGH(); /* 釋放 SDA, 由從機(jī)驅(qū)動 */ for (i 0; i 8; i) { data 1; IIC_SCL_HIGH(); iic_delay(); if (IIC_SDA_READ()) { data | 0x01; } IIC_SCL_LOW(); iic_delay(); } iic_send_ack(send_ack); return data; }注意iic_read_byte循環(huán)結(jié)束后調(diào)用iic_send_ack把主機(jī)的應(yīng)答發(fā)出去。讀單個寄存器時給 NACK讀多個寄存器時前幾個字節(jié)給 ACK、最后一個給 NACK。把這個細(xì)節(jié)搞混會出現(xiàn)讀到的第一個字節(jié)正確后續(xù)字節(jié)全錯或者總線被從機(jī)卡住的情況。在字節(jié)層之上我封了三個函數(shù)寫單個寄存器、讀單個寄存器、連續(xù)讀多個寄存器。這些函數(shù)內(nèi)部處理地址字節(jié)、命令字節(jié)和重復(fù)起始對上層完全隱藏協(xié)議細(xì)節(jié)/* 寫 PCA9555 單個寄存器: reg 為命令字節(jié), val 為寫入值 */ uint8_t pca9555_write_reg(uint8_t reg, uint8_t val) { iic_start(); if (iic_write_byte(PCA9555_WRITE_ADDR)) { iic_stop(); return 1; } if (iic_write_byte(reg)) { iic_stop(); return 2; } if (iic_write_byte(val)) { iic_stop(); return 3; } iic_stop(); return 0; } /* 讀 PCA9555 單個寄存器 */ uint8_t pca9555_read_reg(uint8_t reg, uint8_t *val) { iic_start(); if (iic_write_byte(PCA9555_WRITE_ADDR)) { iic_stop(); return 1; } if (iic_write_byte(reg)) { iic_stop(); return 2; } iic_start(); /* 重復(fù)起始條件 */ if (iic_write_byte(PCA9555_READ_ADDR)) { iic_stop(); return 3; } *val iic_read_byte(0); /* 只讀一個字節(jié), 回 NACK */ iic_stop(); return 0; }返回值攜帶錯誤碼很重要。三個返回值分別對應(yīng)從機(jī)地址沒應(yīng)答、命令字節(jié)沒應(yīng)答、數(shù)據(jù)字節(jié)沒應(yīng)答可以根據(jù)返回值判斷是哪一步出了問題。如果全部返回 1從機(jī)地址就沒被應(yīng)答先查接線和地址引腳如果返回 3說明地址和命令字節(jié)都被應(yīng)答了但寫數(shù)據(jù)時出問題可能是從機(jī)忙或總線被拉低。3.4 上電初始化順序配置寄存器必須最先寫PCA9555 上電后所有引腳默認(rèn)為輸入輸出寄存器是 0xFF。想要某些引腳輸出必須先寫配置寄存器把對應(yīng)位清 0再寫輸出寄存器設(shè)定初始電平。順序反了會出現(xiàn)引腳短暫輸出高電平、繼電器誤動的現(xiàn)象這一點(diǎn)在做執(zhí)行器控制時很容易遇到。/* 端口 0 全部輸出, 端口 1 全部輸入; 輸出端口初始為低電平 */ void pca9555_init(void) { iic_gpio_init(); /* 先定方向: bit1 輸入, bit0 輸出 命令 0x06 是配置端口 0, 命令 0x07 是配置端口 1 */ pca9555_write_reg(0x06, 0x00); pca9555_write_reg(0x07, 0xFF); /* 再定初始電平, 正點(diǎn)原子風(fēng)格的板子常把 P0 接 LED 陽極, 這里寫 0x00 讓 16 位輸出全部為低 */ pca9555_write_reg(0x02, 0x00); pca9555_write_reg(0x03, 0x00); /* 極性反轉(zhuǎn)寄存器保持默認(rèn) 0x00, 不翻轉(zhuǎn)輸入 */ pca9555_write_reg(0x04, 0x00); pca9555_write_reg(0x05, 0x00); }初始化里每個寄存器都是單寫。如果嫌 6 次事務(wù)太多可以用連續(xù)寫先寫命令 0x02然后連續(xù)發(fā)兩個字節(jié)分別落到輸出端口 0 和輸出端口 1因為命令字節(jié)會自動遞增。配置寄存器同理從 0x06 開始連續(xù)寫兩個字節(jié)就能同時設(shè)好兩個端口的方向。這種寫法省時間但可讀性差一些新項目里我通常先按單寫跑通再優(yōu)化合并。4. 讀寫操作踩坑記錄五條排查清單4.1 讀回來的端口值全 0xFF 或全 0x00現(xiàn)象初始化寫配置寄存器看起來正常讀輸入端口時無論怎么按按鍵返回的都是 0xFF 或 0x00。原因通常是 SDA 沒有配成開漏輸出或者上拉電阻沒接。推挽輸出模式下主機(jī)讀 IDR 只能讀到自己寫出去的電平從機(jī)拉低總線的動作對 MCU 不可見。解決方法是檢查 GPIO 模式配置確認(rèn)是GPIO_Mode_Out_OD并用萬用表量 SDA 空閑時是否為 3.3V。空閑不為高說明上拉缺失或總線被短路。4.2 從機(jī)地址寫錯導(dǎo)致完全無應(yīng)答現(xiàn)象pca9555_write_reg每次都返回 1起始條件之后第一個字節(jié)就收到 NACK。原因是地址字節(jié)用錯了把 7 位地址 0x20 直接當(dāng)作寫字節(jié)發(fā)出去從機(jī)比較的是完整字節(jié)的 7 位最低位的讀寫位被當(dāng)成了地址的一部分地址變成 0x10 對應(yīng)的高位自然無人應(yīng)答。解決方法是確認(rèn)宏定義PCA9555_WRITE_ADDR是0x20 1并用邏輯分析儀抓一下第一個字節(jié)看看實(shí)際發(fā)出的 8 位數(shù)據(jù)是不是0100 0000。4.3 連續(xù)讀多個寄存器時只有第一個字節(jié)正確現(xiàn)象讀端口 0 和端口 1 的連續(xù)讀函數(shù)返回的第一個字節(jié)數(shù)據(jù)正確第二個字節(jié)始終為 0xFF 或沒有變化。原因是在讀第一個字節(jié)后回了 ACK但從機(jī)的數(shù)據(jù)更新需要時間或者主機(jī)在發(fā)出 ACK 后沒有及時切回接收態(tài)就發(fā)了下一個 SCL 脈沖。另一種常見原因是漏掉了重復(fù)起始條件在寫完命令字節(jié)之后直接進(jìn)入讀而沒有重新發(fā) START。解決方法是補(bǔ)上iic_start()重復(fù)起始并且確認(rèn)非最后一字節(jié)回 ACK、最后一字節(jié)回 NACK。4.4 寫輸出寄存器后引腳電壓不變化現(xiàn)象配置寄存器寫了 0x00 把端口 0 設(shè)為輸出再寫輸出寄存器 0x00 或 0xFF用萬用表量引腳卻始終是高電平時或高阻態(tài)。原因可能是初始化順序?qū)懛戳讼葘戄敵黾拇嫫髟賹懪渲眉拇嫫鲗懭胼敵黾拇嫫鞯乃查g引腳還是輸入等配置寄存器改成輸出時才生效看起來好像「寫不進(jìn)」。另一個原因是 PCA9555 的供電和上拉電壓不一致輸出高電平被鉗位在較低電壓驅(qū)動 LED 時看不到亮。解決方法是調(diào)整初始化順序配置寄存器必須在輸出寄存器之前寫并確認(rèn) VDD 與 IO 上拉電壓匹配。4.5 總線被從機(jī)拉低后無法恢復(fù)現(xiàn)象程序運(yùn)行中復(fù)位 MCU 后PCA9555 仍保持著上一次通信中途的狀態(tài)SDA 一直被它拉低新程序發(fā)起始條件時 SCL 為高但 SDA 本來就是低的起始條件無法生成整個總線掛死。原因是從機(jī)在讀取過程中被復(fù)位打斷它還在等待第 9 個時鐘持續(xù)驅(qū)動 SDA 為低。解決方法是上電初始化時先發(fā) 9 個 SCL 脈沖把從機(jī)的移位寄存器清空再發(fā) STOP 條件讓總線回到空閑。這個恢復(fù)序列在 IIC 從設(shè)備較多的系統(tǒng)里應(yīng)該成為固定動作。/* 上電時先恢復(fù)總線: 9 個 SCL 脈沖 STOP */ void iic_bus_recovery(void) { uint8_t i; IIC_SDA_HIGH(); for (i 0; i 9; i) { IIC_SCL_LOW(); iic_delay(); IIC_SCL_HIGH(); iic_delay(); } iic_stop(); }這段恢復(fù)代碼建議放在iic_gpio_init之后、任何 PCA9555 通信之前。我遇到過板子熱插拔 IO 擴(kuò)展模塊后總線鎖死的情況加了這段之后省了不少重新上電的麻煩。5. 把驅(qū)動變成可靠工具中斷輸入與批量讀寫技巧5.1 用中斷引腳代替輪詢減少總線占用的做法PCA9555 的 INT 引腳在任一輸入引腳狀態(tài)變化時拉低配置成下降沿觸發(fā)接 MCU 的外部中斷即可。這樣主循環(huán)不用反復(fù)讀輸入端口按鍵按下時才進(jìn)中斷在中斷里讀一次輸入端口并清中斷。需要注意的是PCA9555 的中斷是「變化觸發(fā)」讀一次輸入端口之后鎖存器才會釋放 INT 引腳如果只讀一個端口另一個端口有變化時 INT 不會釋放所以中斷里最好把兩個端口都讀一遍。/* 外部中斷里讀兩個輸入端口, 讀操作本身會清除中斷鎖存 */ void EXTI9_5_IRQHandler(void) { uint8_t p0, p1; if (EXTI_GetITStatus(EXTI_Line5) ! RESET) { pca9555_read_reg(0x00, p0); pca9555_read_reg(0x01, p1); key_event_handler(p0, p1); EXTI_ClearITPendingBit(EXTI_Line5); } }中斷服務(wù)函數(shù)里調(diào)用 IIC 讀函數(shù)會引入幾毫秒的阻塞如果有更高優(yōu)先級的中斷對時序敏感可以把讀操作放到標(biāo)志位里退出中斷后主循環(huán)再讀。這一點(diǎn)和按鍵消抖要一起考慮機(jī)械按鍵的抖動會產(chǎn)生多次中斷可以在讀回值之后做 10 到 20 毫秒的軟件確認(rèn)。5.2 端口值的按位操作避免讀改寫覆蓋其他位直接對一個端口寫 0xFF 或 0x00 會覆蓋該端口所有引腳如果同一個端口上既有需要保持狀態(tài)的輸出又有需要切換的輸出就得先讀回輸出寄存器再按位修改。PCA9555 的輸出寄存器是可讀的讀出來的就是當(dāng)前鎖存值用這種方式做按位操作最安全。/* 修改端口 0 的單個輸出位, 不影響同端口其他引腳 */ uint8_t pca9555_set_output_bit(uint8_t port, uint8_t bit, uint8_t level) { uint8_t reg (port 0) ? 0x02 : 0x03; uint8_t val; if (pca9555_read_reg(reg, val)) { return 1; } if (level) { val | (uint8_t)(1u bit); } else { val (uint8_t)~(1u bit); } return pca9555_write_reg(reg, val); }讀改寫中間存在一個窗口期如果 INT 中斷搶占并修改同一個端口可能丟失更新。簡單系統(tǒng)里可以關(guān)中斷保護(hù)或者干脆把輸出端口按用途分區(qū)不同任務(wù)操作不同端口。我在一個小型控制器項目里就把端口 0 固定給繼電器、端口 1 固定給按鍵徹底避免共享寫入。5.3 速率與上拉的邊界兩個容易忽略的硬約束模擬 IIC 的速率不是越快越好。SCL 頻率提高后上拉電阻和總線電容構(gòu)成的 RC 延時會讓上升沿變緩PCA9555 在高電平期間采到的電平可能還沒爬到位表現(xiàn)為偶發(fā) NACK 或數(shù)據(jù)錯位。常規(guī) 4.7kΩ 上拉配 100kHz 是穩(wěn)妥組合如果非要跑到 400kHz上拉要降到 2.2kΩ 左右并縮短走線而且模擬 IIC 的延時函數(shù)要按實(shí)測調(diào)整。另一個約束是 PCA9555 的驅(qū)動能力。每個輸出引腳灌電流和拉電流能力有限直接驅(qū)動繼電器線圈會燒 IO必須加三極管或驅(qū)動芯片。它的中斷引腳是開漏輸出也需要上拉。這些硬件層面的邊界往往比軟件時序更容易被新手忽略。5.4 上板驗證的順序從回讀到輸出的閉環(huán)驗證驅(qū)動是否正常我一般按四步走第一步只讀設(shè)備地址確認(rèn)收到 ACK第二步讀配置寄存器默認(rèn)值 0xFF確認(rèn)能正確讀出第三步寫配置寄存器把端口 0 設(shè)為輸出再讀回來確認(rèn)寫入生效第四步在端口 0 交替寫 0x55 和 0xAA用萬用表或 LED 觀察引腳變化。四步都通過說明地址、時序、讀寫方向都沒有問題剩下的就是業(yè)務(wù)邏輯。這套順序的好處是每步只驗證一個變量出問題時能立刻定位是地址、總線時序還是寄存器寫入。如果第一步就失敗先查接線和上拉第二步失敗查讀時序第三步失敗查命令字節(jié)遞增或重復(fù)起始條件第四步失敗查輸出寄存器與配置寄存器的順序。5.5 從單點(diǎn)驗證到反復(fù)可用的習(xí)慣模擬 IIC 驅(qū)動寫完一次不代表以后都可靠。我在每次換板子、換上拉電阻、換主頻之后都會重新跑一遍上面那個四步驗證因為時序延時和 GPIO 翻轉(zhuǎn)速度都可能變化。把iic_bus_recovery放在初始化最前面把每個讀寫函數(shù)的返回值都做判斷把寄存器操作封裝成帶錯誤碼的函數(shù)——這些看起來繁瑣的動作能避免后面調(diào)試時在硬件和軟件之間反復(fù)懷疑。希望這篇筆記能幫到正在用 STM32F103 擴(kuò)展 IO 的你少走一點(diǎn)彎路把時間留給真正需要調(diào)試的業(yè)務(wù)邏輯。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产SUV精品一区二区6| 超碰9| 思思99热| 丁香五月婷在线| 久久 婷婷 五月天| 婷婷激情四射五月天| 97操碰视频| 激情 婷婷 插| 欧美成人无码一区二区三区| 最新色色五月天| 99热有精品在线观看| 五月激情网站| 日本在线va| 亚洲综合新99视频| 婷婷八月激情| 9.1综合网| 9 大屁股在线视频精品| 日韩久久系列| 玖玖婷婷色欲| 丁香五月婷婷国产av| 99精品在线播放| 99精在线| 五月丁香五月婷婷| 激情五月天com| 激情五月亚洲综合网| 欧美日朝成人| 无码se| 中文字幕无码成人电影| 在线看av| 色吊丝永久访问网址| 久9综合| 成人无码精品1区2区3区免费看 | 色五月久久成人婷婷| 色综合偷拍| 少妇出轨做爰高潮A片| 五月天综合| 天天爽夜夜操| 久久久99视频| 99日本精品视频热| 久久久久人妻| 亚洲精品久久久久久久久久飞鱼| 精品国产AV色一区二区深夜久久 | 2025天天爽天天摸| er99免费视频在线| 五月丁香六月婷婷综合| 丁香五月天资源网| 九九碰九九爱97超| 免费黄色视频网址| 丁香激情五月| 激情亚洲五月| 亚洲国产另类av| 99碰碰。| 久久99精品久久久久久青青AR| 激情涩播| 99少妇精品| 日本在线观看aaa 99| 综合色色五月| 18久久| 超碰在线94| 国产特黄色精品一区二区三区精品无广告| 久久五月天激情婷婷| 久9精品视频在线| 99热99艹在线观看| 欧美婷婷精品激| 激情五月丁香六月综合AVXXXX| 综合久久伊人| 色综合婷婷| 六月色色| 米奇影视五月天| 热99热9| 五月天伊人手机在线播放AV| 日韩淑女人妻luan伦激情精品一区二| 91欧美| 五月婷婷啪| 久热欧美| 五月丁香激情六月| 啊V视频在线观看| 丁香五月成人| 色五月丁香com| 色婷婷狠狠禁久久| 欧洲亚洲免费视频9| 丁香五月性爱| 天天干天天操| 99热大香蕉| 激情综合色| 1024亚洲无码| 庭庭久久内射| 99热这里精| 久久久久思思热| 播四月婷婷六月丁香| 国内9l视频自拍老熟女九色| 天天色视频| 九九九九热99超碰| 五月天深爱激情网| 另类丁香综合| 婷婷婷婷午夜| 亚色网站小视频| 色婷婷88| 色五月亚洲| 伊人综合色干| 少妇人妻丰满做爰XXX| 99免费视频网| 色色色色综合网| 996热re视频精品视频这里| 色婷婷精| 91丨九色丨国产打屁股网站| 国产一区二区av免费| 国产亚洲精品久久久久久牛牛| 不卡在线超碰| 91要啪| 天天操,夜夜骑| 人人爱天天摸摸天天爱| 亚洲婷婷激情888精品久| 久热中文字幕| 国产亚洲99久久精品| 五月婷婷播| 五月丁香婷婷潮喷中文字幕| 婷婷丁香久久| 激情综合网五月| 九六五月天婷婷| 色婷婷五月天成人网| 国产偷人爽久久久久久老妇APP| 久久婷婷五月综合一| 狠狠搞五月天| 狠狠色狠狠| 丁香五月欧美婷婷综合| 就是色婷婷五月亚洲色| 日本九九视频| 婷婷综合九月| 激情亚洲网| 思思热在线观看| 久草视频大香蕉99| 久久这里只有精品视频26| 欧美 日韩 成人| 日本精品人妻无码77777| 五月天婷婷社区久久综合| 国产日韩欧美性生活| 99热97| 成人免费120分钟啪啪| 啪啪色区| 婷婷五月天成人小说| 婷婷综合视频| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | 激情五月婷婷综合| 五月婷成人| 日日夜夜狠狠| 激情久久婷婷| 在线1青婷| 嫩草AV久久伊人妇女超级A| 久久婷婷色综合| 色婷婷激情五月天在线观看| 美女久久婷婷| 色爱终和网| 国产精品18久久久| 99热欧| 狠狠色噜噜狠狠| 五月丁香另类网| 天天婷婷天天| 4399无码视频| 婷婷五月天亚洲综合| 亚洲无AV在线中文字幕| 激情五月婷婷网在线观看| 日韩AV片| 五月婷婷色| 色婷婷偷拍| 人人超碰99| 人妻久久久久久久久久| 婷婷天天五月天| 五月天成人手机在线视频| 饮料下药迷倒漂亮女同事强干| 色噜噜夜夜夜综合网| 色婷婷六月天| 丁香色色色| 99狠狠色| 久青青久| 婷婷中文字幕网站| 五月天婷婷在线观看| 91VIP在线观看| 都市激情五月婷婷亚洲| 成人人操| 玖玖在线视频| 五月天成人网婷婷| 任你爽在线视频| 婷婷五月天另类网站| 激情综合网婷婷五夜| yazhouzonghesese| 五月色情婷婷| 婷婷97碰碰| 日本97在线视频| 97久久超碰| 中文字幕综合网| 色婷婷在线播放| 在线99热| 操操综合网婷婷| 久久久精品色色色| 色综合久久888| 狠狠色噜噜狠狠狠888| 中文字幕网伦射乱中文| 久久这里只有精品1| 好叼操在线观看| 五月丁香六月婷婷的女人| 婷婷香蕉香| 五月情色天| 婷婷丁香社区| 色五月婷婷五月天| 五月天婷婷人妻| 1024成人在线观看| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 丁香久色| 伊人影院久久网| 超碰爱爱爱| 天天日夜夜欢| 精品欧美性爱超级爽| 99re这里只有精品在线观看| 婷婷在线综合| 久久人人添人人爽添人人片αV | 色色亚洲无码| 97久操| 九九亚洲综合| 狠狠操狠狠做| 影音先锋按摩| 中文字幕不卡视频| 亚洲妇女熟BBW| 色性五月天| 超碰电影在线播放| 色插人人| 国产67194| 五月天另类视频| 九九色影院| 白人荫道BBWBBB大荫道| 综合AV在线| 东北婷婷五月天| 亚洲免费av观看| 五月天色区| 999影院成人在线影院| 超碰免费大香蕉| 美国少妇性做爰| 国产性爱一级| 综合五月激情网| 99日本精品视频热| 五月天色站| 99热精品在线在线| 亚洲综合视频在线| 日婷婷| 多精窝99在线视频| 三级三久久线久久99久目本WW| 五月天开心色色网| 狠狠色婷婷7777久| 9色视频在线| 五月激情丁香| 伊人综合网4| 丁香五月激情网| 久九男女天堂| 欧美精品99久久久| 99热这里只有精品在线| 丁香五月婷婷激情网| 婷婷五月视频| 精品一区二区三区木瓜| 79精品在线视频| 97视频91| 99色综合| 99热国产| 欧美 日韩 成人在线| 丁香六月无码| 欧美Va在线| 熟女激情网| 91人操| 成人精品网站在线观看| 伊人五月婷| 五月丁香六月激情综合| 狠狠操狠狠插| 99成人无码| 伊人五月天日日夜夜久久久天天| 久久婷婷五月| 日本一道久久| 丁香五月天网站| 丁香五月黄色| 激情久久丁香| 六月丁香停| 丁香久久九九99| 31色区视频免费看| 成人短视频免费| 蜜臀av 粉嫩av 懂色av| 大鸡巴伊人网| 亚洲色色五月| 日本久热| 国产色丁香| 丁香婷婷网| 色玖玖爱| 99在线观看视频免费| 香蕉狠狠爱视频| 操比激情五月综合| 91九色|疯狂|高潮|对白|| 99热在线看片| 99久久久免费| 婷婷5月色| 一区=区操屄高清大全av| 99国产精品久久久久久久久久久| A片女女女女女女BBBB| 婷婷在线视频| 九九九九九九热| 欧美 色婷婷| 成人AV在线中文版| 色碰97| 丁香五月很很肏| 久久天堂女人| 久久精品99久久| 婷婷欧美激情综合| 婷婷五月激情四月综合| 678五月丁香亚洲综合| 五月丁香色五月| 午夜九九电影| 欧美黄色AA片哗啦啦啦| 五月丁香欧美综合| 日本天天色| 午夜天堂一区人妻| 人妻中文字幕精品| 99热精品在线| 五月婷婷深爱六月| 日韩色五月| 日本99色| 精品一二三区久久AAA片| 欧美三级巜人妻互换| 曰韩五月丁香色婷婷无码| 日韩AV成人电影| 精品人妻在线| 99色色网站| 成 久久| 亚洲精品婷婷| 五月天激情小说网| 婷婷五月综合色小姐小说| 亚洲AV另类| 婷婷五月激情图片| 五月婷婷视频ab| 99国产在线| 99日本精品视频热| 国产毛片操B| www.com.色色| 天天摸,天天爽| 色婷婷AV久久久久久久| 五月丁香免费看| 第九色区av天堂| 97婷婷五月丁香| 中文字幕,综合,91| 欧洲亚洲欧洲99久久| 天天精品视频免费观看| 亚洲操操| 任你操精品免费| 3pAV| 色婷婷国产精品综合在线观看| 欧美日韩999| 5月丁香综合图区| 欧美色97| 青青草原精品久久| 五月天成人综合| 综久久久| 人人舔人人色人人高潮| 97香蕉碰碰人妻国产欧美| 免费视频WWW在线观看网站| 五月婷婷丁香网| 五月婷婷色播视频| 9999三级片| 精品久久久中文字幕大豆网推荐理由| 婷婷亚洲日本| 99综合网| 31色区视频免费看| 天天日夜夜草进麻麻的子宫| 日本三级韩三级99久久| txt五月激情四射网综合俺也来了| 97色干| 五月天婷婷成人| 粉嫩AV久久一区二区三区| 婷婷黄色五月| 激情五月天婷婷视频| 91久久1118| 97在线天堂| 婷婷五月天激情四射五月天激情| 欧美综合五月丁香六月婷| 久99在线| 六月婷婷网站| 99精品在线观看| 欧美精产国品一二三区| 亚洲午夜一区二区| 丁香五月婷婷亚洲激情四射| 日韩欧美骚货| 91性交在线播放| 青青草原中文字幕| 99热国产这里只有精品| 91婷色| 色噜噜狠噜噜视频| 大香蕉九九操| 丁婷婷五月天在线播放| 99情色五月天| 99亚洲无码| 强辱丰满人妻HD中文字幕| 婷婷五月综合婷婷| 丁香五月婷婷基地| 亚洲国产婷婷色五月| 六月丁香中文字幕| 九九99热| 黄网免费观看| 久热人妻| www.超碰| 中文字幕婷婷五月天| 午夜激情综合| 九九色中文| 五月玖玖| 97在线视频观看| 色啪影院| 亚洲精久久| 综合婷婷| 五月丁香婷婷福利| 成人无码髙潮喷水A片| 色色热99| 97精品人人A片免费看| 色色色视频免费无码| 精品人妻伦一二三区久久| 久久五月视频| www.夜夜| 99er在线观看| 色综合婷婷99| 色综合天天| 日韩三及成人AV片| 综合99综合久久久久久久| 五月丁香亭亭操逼| 丁香婷婷影院| 激情欧美婷五月| 国产乱妇无乱码大黄AA片| 婷婷色播色五月五色五月天色妇| 最近中文字幕大全免费版在线 | 九九视频热| 久久五月婷天天干| 婷婷六月丁| 激情图片婷婷丁香五月| 色情综合网| 欧美激情五月综合| 色综合99无码 | 91热网址| 成人va在线播放| 五月情丁香色| 99精品综合在线| 五月花婷婷| 婷婷射丁香| 五月丁香啪啪啪| 人妻熟妇六区| 久99精品视频| 狠狠干夜夜干| 情涩婷婷五月天| 月色色综合婷婷网| 五月天激情国产综合婷婷| 婷婷五月天在线观看av| 丁香五月天影院| 五月天婷婷免费视频| 天天看A片| 北京熟妇搡BBBB搡BBBB| 激情小说婷婷| 日韩三级片一区二区| 5月丁香美女影院| 国产密乳av一区二区三区四区| 婷婷成人AV| 婷婷丁香五月天激情| 国产美女精品| 精品久久久999| 99国产精品久久久久久久久久久| 婷婷无码五月天| 激情小说五月天| 人妻熟人中文字幕一区二区| 九九无码| AⅤ色区| 大香蕉五月| 国产99久久久国产精品免费看| 激情六月一二| 噜噜色五月| 九九99视频精品| 亚州操人在线视频| 高清无码视频网址| 丁香五月成人论坛| 五月丁香啪综合| 亚洲亚洲人成综合网络| 久久98热re| 九九热思思热| 五月丁香婷婷爱激情综合网| 欧美日韩中国| 九九九激情综合| 色婷婷A| 人人摸人人干人人做| 久久久久婷婷| 婷婷va| 中文字幕无码人妻少妇免费视频 | 日韩操啪| 欧美成人在线观看| 激情九月婷婷| 99九九综合久久九九| 99色热视频| 五月丁香六月婷综合成人综合| 丁香婷婷五月激情四射网| www.久热| 久久作爱| 女人天堂AV| 亚洲另类婷婷五月综合| 五月天婷婷黄色视频| 91久久免费| 丁香,开心成人,久久| 婷婷五月天综合在线| 综合网天天| 日日夜夜青青草| 激情99。| 能直接看的AV网站| 激情五月天在线观看婷婷| 五月婷婷在线观看黄| 丁香婷婷六月激情综合| 五月丁香婷婷导航视频| 九九在线精点品| 色.五月综合网| 久久久精品AV| 婷婷五月天激情诱惑| 全部老头和老太XXXXX| 9999色色色色| 亚洲男人的天堂婷婷色五月| 久久婷婷五月天激情| 亚洲操b| 狠狠狠狠青草| 天天爽天天爽| 六月丁香久久| 五月天激情综合网站| 思思热精品在线视频| www.超碰在线| 国外亚洲成AV人片在线观看| 精品国产一区二区三区四区阿崩| 五月天婷婷视频30| CAOBIBI| 欧美十二区| 亚洲字幕AV一区二区三区四区| 丁香五月在线播放| 狼人久草| 日本不卡一区二区三区| 尤物一区二区| 超碰免费观看| 国产操逼网站| 26.uuu丁香五月婷婷| 九九99香蕉在线视频播放| 四季AV综合网| 97碰碰视频在线观看免费| 开心五月婷婷婷美女| 欧美日韩国产一区| www超碰| 丁香五月激情婷婷视频| 伊人青草成人| 五月天激情网页| 99色在线观看视频| 很很干天天干| 色吧五月婷婷| 99久久99九九99九九九| 日本少妇裸体做爰高潮片| 丰满少妇乱A片无码| www.91av.com| 97婷婷丁香五月天激情图片| 九九久久99精品免费观看www| 亚洲无码成人| 夜夜操夜夜爽| 狠狠五月天激情| 99热最新| 亚洲精品电影| 无码激情AAAAA片-区区| 精品热九九| 91亚洲免费片| 国产成人网| 五月丁香六月欧美综合| 99热这里只有精品在线播放| 99热66| 色色五月天激情| 在线另类| 婷婷天堂综合网| 超碰成人av| 天天综合激情| 激情五月六月婷婷| 五月激情站| 日本激情综合| 999精品乱码77777| 人妻内射麻豆视频| www婷婷| 思思热99热| 日韩ww| 久久综合中文字幕| 婷婷五月天深爱| 俺去也综合| 婷婷五月丁香六月| 97操男人的天堂| 97久久超碰| 99热这里精| 五月天婷婷丁香基地在线观看| 久久99久久99精品免视看婷婷| 麻豆AV一区二区三区| 久色大香蕉| 丁香花色色网| 激情五月天无人视频在线| 久99久在线| 色五月婷婷7777| 久久婷婷啪啪视频| 五月天婷婷中文字幕在线播放| 伊人久久大香线蕉av一区| 欧美美女视频| 婷婷五月大香蕉| 久久久精久人妻| 碰碰女| 五月丁香综合精品欧美| 99人妻碰碰碰久久久久禁片| 伊人啪啪网| 日本三级日本三级99| 淫荡A片| 五月丁激情| 国产综合色婷婷精品久久| 又大又粗九一在线| 婷婷激情四射| 97精品自拍视频| 8050一级网| 婷婷激情小说网| 婷婷五月天六月丁香| 国产精品18久久久| 婷婷五月天成人在线视频| 夜夜干夜夜操| 五月激香蕉网| 2025中文在线视频字幕免费观看| 色色丁香五月天| 天天日P天天射P| 99色啊| 亚洲愉拍99热成人精品| 色色丁香五月天社区| 中文aV网| 人人操av| 天天肏屄夜夜爽| 97久久草草超级碰碰碰| www.maotanji.com| 97自拍视频网| 五月精品免费XXX| 国产精品久久久久久久久久| 综合久| 97色色综合| 综合网网欲色| 五月婷综合| 超碰成人影视| 丁香五月五月婷婷五月天激情四射| 亚洲高清在线| 开心久久xxx色| 超碰九色| 任你草| 99热99在线| WWW.婷婷五月天.COM| 色噜噜狠狠色综无码久久合欧美| 五月色激情综合网| 丁香五月区| 亚洲丁香婷婷| 这里只有精品免费观看网占| 3p九色在线| 婷婷色丁香五月| 丁香网五月天| www.夜夜騎夜夜狠| 在线观看视频1区| 精品皮股午夜AV| www.第四色99| 五月丁香六月婷婷欧美综合| 婷五月天丁香婷五月| 天天搞天天爽| 啪啪 综合网| 欧洲亚洲免费视频9 | 色综合色色色| 天天爽成人综合网站| 天天综合精品| 久久奄也去色色网站| 亚洲亚洲人成综合网络| 99爱视频在线免费观看| 久久性都花花世界成人免费视频| 婷婷激情社区| 伊人9在线| 99在线播放视频| 久久99网站| 色色五月天婷婷| 夜夜骑日日夜夜| 天天综合网~91| 亚洲五月花| 婷婷五月激情的图片| 久久激情综合| 另类图片激情五月天| 成人免费黄色短视频| 午夜丁香五月天综合| 在线超碰91| 久99久视频| 激情欧美婷五月| 久久九九思思| 久99久热| 久久视频婷婷视频| 久久99免费视屏| 99re视频在线播放| 五月婷人妻| 四季日韩AV无码综合| 一区二区免费看| 丁香六月婷婷开心| av操B网站| 婷婷五月天网址| 六月丁香视频网站| 亚洲视频在线观看区| 97人人操人人| 日日干日日s| 人妻在线网站| 日本片日本片祼观看网站在线看中文版网页在线看 | 丁香五月激情啪啪| 青草少妇激情| 亚洲性天天| 日韩AV成人电影| 97人人操人人干| 久久九九99亚洲国产久精综合| 欧美WW在线网| 大地9中文在线观看免费高清| 亚洲综合激情五月| 九九99在线观看视频| 亚洲啪| 99久久6| 噜噜色com| 五月婷婷开心亚洲无| 亚洲成人AV一区在线观看| 亚洲免费看片| 五月婷婷亚洲| 五月丁香成人| 色婷婷香蕉| YW无码| 五月天激情婷婷| 九九无码| 开心五月婷婷99| www.激情.com.| 六月色婷婷综合影视| 丁香六月婷婷久久综合| 婷婷射综合| 天天色综合网1| 久久婷婷五月综合97色一本| 成人片在线免费看| 色欧美一级| 婷婷综合网| 婷婷五月花| 丁香五月天综合网| 国产裸舞福利资源在线视频| 色婷久九| 婷婷五月天首页激情| 亚洲精品白浆高清久久久久久| 日本色天堂| 深爱激情综合网| 九月婷婷丁香| 激情美女五月天| 久久婷婷内射| 丁香综合久久| 日韩aⅴ视频| 国产XXXX搡XXXXX搡麻豆| 日本三级日本三级99| 五月丁香六月激情视频| 色婷五月| 九九热视频免费观看| 天天摸.天天mo| 久热九九| 久久九九爽| 成人永久免费视频在线观看| 91人人爽人人操| 色色999三级片| 久久一级AV| 国产人妻777人伦精品HD| 99热九九热| 五月激情综合网| 久久九九@| 思思热在线视频精品| 天天色综网| www.亭亭五月天| 99精品在线下载| 五六月丁香激情视频| 五月婷婷色男女| 日日干日日色| 激情99。| 久久奄也去色色网站| 五月丁香WWW| 成人婷婷五月天| 丁香五月婷婷姐| 婷婷五月天直播| www.99热最新视频8| 人人操Av| 六月婷伊人| 天天干-天天日| 五月天婷婷色播在线网| 欧美97p| 亚洲色婷婷视频| 久久99性爱| 日本婷婷色日| 91狠狠色色丁香婷婷综合久久| 日韩在线观看亚洲| www.五月婷婷| 婷婷深爱五月天| 色婷婷丁香五月| 久久黄色片| 超91热| 综合久久综合综合| 91成人看片| 激情婷婷色色| 天天天操天天天爰| 五六月丁香激情视频| 日日爽天天| 婷婷五月天堂| 亚洲欧洲国产精品| 婷婷五月婷婷| 99免费超碰在线| 热久久这里只有三级视频| www.激情com| 热久久91| 久久激情综合| 婷婷五月天综合色| 伊人玖玖网| 五月丁香六月欧美综合网站| 无码AV免费精品一区二区三区| 久久大香蕉丁香| 《丁香激情综合久久伊人久久》影视在线观看 -高清预告手机免费播放 -三妹影院 | 香蕉曰比| 91 原创 在线 九色| 五月丁香性爱| 婷婷五月天天| 99精品小视频| 午夜一区| 牛牛热这里只有jingpin| 91色欲综合| 99热老网站| 日韩成人精品一区久久久久| 思思精品视频| 99热激情| 丁香婷婷激情四射五月| 久久久久亚洲AV成人无码电影| 亚洲第一色网站| 激情综合色播| 色色色色网| 久久99大| 久9热在线视频| 六月丁香婷婷天堂| 色婷久久| CHINESE熟女老女人HD视频| 97成人视频| 人妻性操逼中文字幕 国产| 精久久色| 99久在线精品99re8热| 九九一区| 中文字幕在线资源| 伊人狠狠干| 久久综合爱| 丁香六月婷婷操逼网| 99日本在线| 丁香网五月天激情| 色五月丁香婷婷| 91熟妇大香蕉| 操人妻90p| 97色97干| www...com黄在线观看| 久久东京热婷婷五月| 天天摸天天高潮天天爽| 超碰av在线| 色色网91| 婷婷五月天亚洲色| 婷婷五月综合网| 波多野结衣不卡AV| 丁香五月天偷拍| 婷婷九月在线| 婷婷天堂伊人| 琪琪秋霞| Av大香蕉| 色月丁| 激情综合网亚洲色图| 久久只有18视频| 六月激情网| 色五月激情基地| 亚洲操B| 午夜九九九九九九九九九九九九九| www.五月天婷婷姐姐| 99操99| 91无码高清| 日日夜夜狠狠干| 中字幕视频在线永久在线观看免费| 婷婷六月天天| 五月久视频| 男女啪啪视频久 9| 六月婷五月丁香| 深爱五月激情五月| 9191avse| 激情开心五月天| 婷婷五月激情小说| 人人干人人操人人摸人人做| 久久五月天综合| 中文字幕不卡+婷婷五月| 99色视频在线| 996热re视频在线观看视频| 色宗合久久五月婷婷| www.色婷婷| 丁香婷婷激情综合五月激情| 超碰激情网| 99热综合色图| 色五月综合资源推荐| 丁香九色不卡aaa| 99亚洲色| 97色射| 艹| 成人国产欧美大片一区| 五月丁香色色综合| 天天天天干| 五月婷婷深深的爱| 天天插天天插天天插天天插 | 亚洲精品无人区| 亚洲第一色网站| 色一情一乱一乱一区91Av| 天天干,天天舔| 久热这里只有精品6| 婷婷五月天色色| 久久性视频| 91久久婷婷| 99视频内射三四| 大香蕉综合网| 天天爽天天日| 五月花综合网| 开心激情站| 色欲五月天| www五月婷婷88导航| 五月天婷婷激情春色小说| 五月停停大香蕉| 亚洲亚洲亚洲AAAAAA| 色综合久久无码| 激情五月五月婷婷| 欧美色色色色色色色色色色| 五月丁香啪综合| 久草大| 91狠狠综合久久久| 我要色综合五月婷婷| 婷婷最新地址| 激情欧美丁香五月| www.色婷婷.com| 日韩AV大全| 五月天 综合 在线| 欧美十二区| 婷婷俺去也| 91玖玖| 九色PORNY9l原创自拍| 婷婷中文字幕版| 欧美日韩一区二区三区四区| 色婷婷色99国产综合精品| 26uuu最新地址| 天天人人天天爽| 91狼友视频在线观看| 久久综合五月| 99精品视频偷拍| 在线播放中文字幕| 激情婷婷五月天在线观看| 91jiuseshunv| 五月激情综合网| 五月激情综合婷婷| 九 九九九AV| 激情久久久久久| 久久激情综合| 欧美日韩国产成人在线| 五月丁香久人妻中文| 五月丁香五月丁香| 色综久久久| 丁香五月综合激情啪啪| 婷婷欧美色| 无码AV大香线蕉伊人| 区美毛片子| 欧美色骚婷婷五月天| 丁香婷婷久| 五月激情综合网| 五月婷婷久久网| 久久机热/这里只有精品| 99色播| 狠狠爱婷婷| 亚洲精品久久久久AV无码| 亚洲AV色婷婷人禽五月天| 亚洲另类婷婷综合| 色逼综合网| 欧美97色| www.26uuu.com亚洲电影| 一本久道综合99| 国产69精品久久久久999小说| 婷婷九月丁香| 天天摸天天爽| 婷婷五月天网址| 九九九九操逼| 色碰碰视频| 丁香五月五婷| 婷婷五月激情的图片| 婷婷六月久久| 99久久综合网| 亚洲综合激情五月久久| 国产日批视频| 另类图片激情五月| 色青青电影色五月| 开心激情网在线| 亚洲成人五月天| 婷婷五月天成人动漫 | 婷婷九月亚洲| 综合狠久久| 五月天婷婷丁香| 五月天婷婷在线视频| 天天综合干| 五月色婷| 亚洲无码黄色| 91婷婷视频| 九九99精品视频在线观看| 六月丁香激情| 99热精品一| 成人va在线观看视频| 五月丁香激情综合啪啪| 九九热这里只有精品9| 九九热视频在线观看| 久人操| 色婷婷社区| 伊人天天色| 99热精品在线观看| 五月丁香婷婷婷激情爱爱| www.色五月| 狠狠狠狠狠狠| 大香蕉婷婷丁香天堂AV| 99爱在线免费视频| 就爱射中文字幕资源网| 99热这里只有精品21| 久久六月天| 久久9999| 色九九一二| 久久综合26p| 人妻丰满精品一区二区A片| 日本高清久久| 9色在线视频| 另类图片五月天| 久久色五月天激情小说| 伊人五月网| 久久久婷丁香五月| 热这里只有精| 最新日本A片| 99啪啪| 中美日韩成人在线| 欧美久久网| 亚洲成人网站在线| 噜噜狠狠色综合久| 五月丁香啪啪啪综合网| 色偷偷色婷婷| 秋霞AV淫| 天天肏高清在线| 欧美色五月| 五月天天天天天天天天天天天天天天天婷婷婷| 婷婷五亚洲| 欧美久久婷婷| 五月开心深深爱激情综合| 色婷婷狠狠久久综合五月| 婷婷五月中文字幕国产| www 五月天 com| 2025天天爽天天摸| 激情 婷婷 插| 成人色色视频| 五月丁香花婷婷玉莉AV| 天天射综合网夜夜操| 夜夜做夜夜愛| 99热这里只有精品2| 丁香久久| 能看的av网站| 日韩在线99| 97人人操| 综合网色| 99久视频| 亚洲妇女熟BBW| 亚洲三级无码| 婷婷综合久久综合| 婷婷丁香91| 日本久久人人| 丁香婷婷人妻| 五月丁香六月婷婷综合免| 五月天亚洲最大成人| 丁香五月天欧美| 五月婷婷丁香狠狠撸久久| 五月丁香亚洲综合| 日韩99视频| 五月天色影院| 国产成人精品123区免费视频 | 9色操| 六月婷婷香蕉| 色啪网| 无码G高清天| 天天色天天色天天色天天色天天色| 99精在线| 丁香婷婷性爱| 成人电影一区| 级人人91| www.综合久久.com| 激情五月天黄色小说| 6080av| 五月性色| 久久a热| 丁香婷婷激情网站| 激情五月色综合网| 久久色频| 天天天天天天噜| 亚洲情色一区| 国产精品美女久久久久AV超清 | 99热国产精品| 欧美成人AAA片一区国产精品| 内射 无码 伊人| 99日逼视频| 国产在线6| 六月婷婷久久| 天天噜噜| 97久久综合网| 九色视频91疯狂| 天天射综合网天天插| 另类激情综合| 丁香六月激情| 丁香五月婷婷www..com| 色色色色色色色色五月先| 国产精品五月丁香| 激情五月天婷婷在线网址发给我| 日日色综合| 99热最新国内| 激情五月天视频| 天堂AV在线看| 午夜色婷婷| 99热在线观看成人| 婷婷五月丁香六月| 激情婷婷五月天在线观看| 97资源欧美日韩大香蕉超碰一区| 国产又黄又爽又色的免费| 婷婷自拍| 亚洲婷婷月丁香五月| 五月丁香五月综合欧美| 拍真实国产伦偷精品| 亚洲有码在线视频| 国内婷婷丁香社区在线播放| 狠狠色成人影片| 欧类av怡春院| 丁香六月婷婷综合激情欧美| 丁香五月色情| 99九九视频| 99久久.www| 丁香五月日本| 99热都是精品| 99久久高清视频| 美女100%露全身无挡网站| 人妻久久婷婷| 日本97在线观看| 五月天激情小说电影| 丁香六月啪啪啪| 五月色丁香婷婷综合| 色播激情婷婷| 天天舔天天插天天爱| 狠狠干,狠狠操| 最新无毒无码AV| 五月婷婷深深的爱| 久久婷婷丁香| 琪琪狠狠干| 婷婷五六日| 久久香蕉网| 五月激情射| 婷婷色激情五月天| 成人做爰A片免费看视频| 九九操操| 亚洲第一综合| 97午夜一区二区| 五月婷无码| 色婷婷电影网| 欧美三级欧美一级| 亚洲六月婷婷| 六月色 亚洲| 久色五月婷婷综合| 禁欲电影完整版在线播放| 色吧综合网| 夜夜大香蕉婷婷丁香| 超级碰碰99| 婷婷日日天天| 免费无码毛片一区二区A片 | 免费视频在线观看的网站| 99精品在线观看| 一级精品999WWW| 婷婷中文字幕在线| 玖玖资源站蜜臀| 91se精品国产| 综合网激情五月天| 婷婷色综合| 激情另类综合| 欧美激情综合色综合啪啪五月| 色五月综合在线| 久操福利| 九九狠狠干| 99热久草| 五月 激情视频| 五月婷婷导航| 在线成人视频免费| 99视频只有精品| 999久久久国产精品| 色婷婷狠狠| 大香蕉伊在| 俺去也综合| 色九九九九| www.婷婷.com| 9热视频在线观看| 五月婷精品| 色~性~乱~伦~噜| 91久久99久久91熟女精品| 五月天色色网站| 五月天色丁香| WWW五月婷婷| 亚洲乱码日产精品BD在线观看| 五月天婷婷在线观看精品男人| 亚洲视频在线观看| 5月婷婷性视频| 先锋影音男人的天堂AV| 五月婷婷色激情| 婷婷狠狠狠爱| 午夜婷婷久久 | 久草狼人| 中美日韩成人在线| 思思热精品在线视频| 天天天天天天天干| 无码少妇高潮喷水A片免费| 99热精品一| 日本三日本三级少妇三级66| 开心激情婷婷| 99九九在线| 五月婷丁香| 婷婷娱乐丁香综合网| 97久久超视频| 97人人做| 久色视频在线| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 8区视频在线| 五月丁欧美| 国产精产国品一二三在观看| 亚洲色 视频| 日本3级片一区2区| 九九色热| 人人摸人人射| 久久精品五月| 九九热精品| 热99久久这里只有精品| www.九九婷婷| 五月丁香婷婷色色| 成人欧美一区二区三区在线观看| 五月天社区婷婷| 无码色色色| 人人爽天天莫| 久久久婷婷五月天| 婷婷五月在线视频| 天天日日夜夜爽| 婷婷久久色五月婷婷久久久| 天天爽天天| 996er在线观看| 色婷婷小视频| 97碰免费视频在线| 伊人婷婷激情| 激情丁香久久久久久| 天天日天天爽| 丁香五月欧美激情| 91成人视频| 色婷婷性爱网| 久久久精品AV| 午夜青草资源| 亚洲啪啪网| 99色爱| 婷婷五月电影| 99热这里只有精品一| 久9无码视频| 五月天激情婷婷| 五月丁香激情综合网官网| 五月丁六月香| 色色丁香|