国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

STM32軟件SPI驅(qū)動(dòng)1.8寸TFT-LCD完整教程

STM32軟件SPI驅(qū)動(dòng)1.8寸TFT-LCD完整教程 如果你第一次玩1.8寸TFT-LCD大概率會(huì)經(jīng)歷這些屏幕接上電背光亮了但是屏幕白茫茫一片不管你往寄存器里寫(xiě)多少命令都沒(méi)反應(yīng)。我也從這個(gè)狀態(tài)過(guò)來(lái)的。后來(lái)發(fā)現(xiàn)卡住大多數(shù)人的往往不是屏幕本身而是驅(qū)動(dòng)方式的選擇——很多店家給的例程默認(rèn)走硬件SPI硬件SPI的引腳在自己板子上又經(jīng)常和別的外設(shè)撞車(chē)一旦出問(wèn)題很難定位。這篇文章我要分享的就是我最終穩(wěn)定跑通的方案STM32通過(guò)軟件SPI驅(qū)動(dòng)1.8寸TFT-LCD也就是用GPIO手動(dòng)模擬SPI時(shí)序把底層的每一位時(shí)鐘、每一個(gè)電平都攤開(kāi)來(lái)看。這套方案適合剛學(xué)會(huì)GPIO輸出、還沒(méi)系統(tǒng)學(xué)過(guò)SPI外設(shè)的初學(xué)者也適合硬件SPI引腳被其他模塊占用、需要靈活換引腳的項(xiàng)目。128x160的分辨率不大軟件SPI的帶寬完全夠用。1. 為什么這塊屏的驅(qū)動(dòng)要用軟件SPI先說(shuō)結(jié)論軟件SPI不是來(lái)替代硬件SPI的它是很多實(shí)際場(chǎng)景里更省事、更好排查問(wèn)題的選擇。1.8寸TFT-LCD的分辨率只有128x160滿(mǎn)屏刷一種顏色也才40多KB像素?cái)?shù)據(jù)軟件模擬的方式完全扛得住。如果你只是做菜單界面、顯示傳感器數(shù)據(jù)、畫(huà)個(gè)波形曲線(xiàn)那軟件SPI的刷新速度綽綽有余。1.1 硬件SPI和軟件SPI到底差在哪硬件SPI是芯片內(nèi)部集成的外設(shè)你只要配置好SPI_CR1寄存器、指定好波特率、極性/相位然后往數(shù)據(jù)寄存器里丟一個(gè)字節(jié)剩下的移位輸出、時(shí)鐘生成都由硬件電路自動(dòng)完成CPU基本不參與。軟件SPI則完全是另一條路把SCK、SDA對(duì)應(yīng)的GPIO引腳當(dāng)作普通IO口用代碼循環(huán)去翻轉(zhuǎn)電平往SDA上放一個(gè)bit再讓SCK來(lái)一個(gè)上升沿如此重復(fù)8次湊夠一個(gè)字節(jié)。這兩種方式的區(qū)別可以列個(gè)表看對(duì)比項(xiàng)硬件SPI軟件SPI引腳靈活性固定綁定在復(fù)用引腳上任意GPIO都能用傳輸速度輕松跑幾MHz甚至更高實(shí)測(cè)大約幾百kHz到1MHz左右CPU占用外設(shè)自動(dòng)處理占用極低每個(gè)bit都要CPU翻轉(zhuǎn)占用高調(diào)試難度配置項(xiàng)多出問(wèn)題排查鏈路長(zhǎng)代碼直觀波形一眼能看懂適用場(chǎng)景刷視頻、大屏動(dòng)畫(huà)、高速傳感器菜單、儀表盤(pán)、數(shù)據(jù)展示在實(shí)際使用中軟件SPI還有一個(gè)隱藏優(yōu)勢(shì)你可以隨時(shí)調(diào)整引腳連接。比如畫(huà)好的PCB走線(xiàn)發(fā)現(xiàn)問(wèn)題或者手頭只剩某個(gè)空閑引腳只需要改一下宏定義不用重新配置SPI外設(shè)。1.2 什么場(chǎng)景下優(yōu)先考慮軟件SPI我歸納了三個(gè)最典型的場(chǎng)景。第一種是硬件SPI被占用了。STM32F103C8T6這顆芯片雖然有兩個(gè)SPI外設(shè)但項(xiàng)目中W25Q128存儲(chǔ)、RF24L01無(wú)線(xiàn)模塊往往各占一個(gè)剩下的引腳還要給串口、定時(shí)器、ADC屏幕就只能去普通GPIO上想辦法。這時(shí)候軟件SPI幾乎是唯一解。第二種是引腳布局問(wèn)題。很多藍(lán)板STM32F103C8T6最小系統(tǒng)板的硬件SPI1引腳在PA5/PA6/PA7如果這些引腳已經(jīng)接了編碼器或者舵機(jī)再去接屏幕就得飛線(xiàn)繞板子信號(hào)不穩(wěn)定不說(shuō)看著也別扭。軟件SPI可以直接把屏幕接到閑置的PB口一排排插針上整潔又可靠。第三種是學(xué)習(xí)SPI協(xié)議本質(zhì)。用軟件模擬時(shí)序的時(shí)候你能直觀看到SCK電平怎么翻轉(zhuǎn)、SDA數(shù)據(jù)什么時(shí)候被采樣、為什么CS要拉低才能選中設(shè)備。這些硬核知識(shí)通過(guò)波形和代碼雙重驗(yàn)證比單純用硬件外設(shè)黑盒操作理解深得多。之后再去用硬件SPI配置寄存器時(shí)你心里會(huì)非常有底。2. 動(dòng)手之前的準(zhǔn)備屏幕引腳、接線(xiàn)與工程環(huán)境硬件準(zhǔn)備的核心就一句話(huà)把屏幕的6根信號(hào)線(xiàn)接到STM32的任意GPIO上供電方式看清模塊絲印。下面我以最常見(jiàn)的STM32F103C8T6藍(lán)板為例把整個(gè)準(zhǔn)備過(guò)程拉通。2.1 1.8寸TFT-LCD引腳定義與接線(xiàn)表1.8寸TFT-LCD模塊一般引出8個(gè)引腳但實(shí)際上我們需要操作的只有6個(gè)信號(hào)引腳。各廠家絲印命名略有差異最常見(jiàn)的標(biāo)注是VCC、GND、CS、RES、DC、SDA、SCK、BLK其中SDA也叫SDI或MOSIDC也叫RSSCK也叫SCL或者CLK別被叫法繞暈對(duì)應(yīng)關(guān)系如下屏幕引腳類(lèi)型說(shuō)明VCC電源供電正極3.3V或5V取決于模塊GND電源供電地CS片選拉低選中屏幕芯片RES復(fù)位硬件復(fù)位信號(hào)低電平有效DC數(shù)據(jù)/命令選擇低電平表示寫(xiě)命令高電平表示寫(xiě)數(shù)據(jù)SDA/MOSISPI數(shù)據(jù)輸入主控向屏幕發(fā)送數(shù)據(jù)SCK/SCLSPI時(shí)鐘主控產(chǎn)生的時(shí)鐘信號(hào)BLK背光控制拉高或接電源點(diǎn)亮背光我的接線(xiàn)方案是全部走PB口避免和SWD調(diào)試口PA13/PA14沖突也和串口1的PA9/PA10分開(kāi)屏幕引腳STM32引腳說(shuō)明CSPB10軟件片選RESPB12復(fù)位控制DCPB14命令/數(shù)據(jù)切換SDAPB15數(shù)據(jù)輸出SCKPB13時(shí)鐘輸出BLK3.3V串100R電阻背光常亮VCC3.3V模塊供電GNDGND共地這里有個(gè)注意點(diǎn)模塊背面的絲印如果寫(xiě)5V是可以接5V供電的因?yàn)槟K上大多有穩(wěn)壓芯片轉(zhuǎn)成3.3V給屏幕核心供電如果絲印直接寫(xiě)3.3V老老實(shí)實(shí)接3.3V。但無(wú)論哪種情況ST7735的邏輯IO電平都不支持5VSTM32輸出3.3V直接接過(guò)去是安全的。BLK背光引腳直接接3.3V也可以但我建議串一個(gè)100R電阻防止背光電流過(guò)大實(shí)測(cè)亮度也足夠。2.2 STM32CubeMX配置與GPIO初始化現(xiàn)在新學(xué)STM32基本都是CubeMX HAL庫(kù)這套組合了配置起來(lái)比標(biāo)準(zhǔn)庫(kù)快很多。打開(kāi)STM32CubeMX芯片選STM32F103C8Tx按下面步驟配置RCC選項(xiàng)里HSE選擇Crystal/Ceramic Resonator讓外部8MHz晶振作為時(shí)鐘源。SYS選項(xiàng)里Debug選擇Serial Wire保留SWD下載調(diào)試功能。在引腳規(guī)劃界面把PB10、PB12、PB13、PB14、PB15分別點(diǎn)擊配置為GPIO_Output。逐個(gè)引腳檢查GPIO Output levelCSPB10初始化為High因?yàn)槠x默認(rèn)高電平不選中設(shè)備其余引腳初始化為L(zhǎng)ow。GPIO Speed統(tǒng)一選擇High這個(gè)選項(xiàng)影響IO翻轉(zhuǎn)速度選High能確保軟件SPI高電平持續(xù)時(shí)間夠短、時(shí)序更穩(wěn)定。Clock Configuration里確認(rèn)SYSCLK為72MHzAPB2外設(shè)時(shí)鐘為72MHz。Project Manager里Toolchain選擇MDK-ARM生成工程。生成之后HAL_GPIO_WritePin這個(gè)函數(shù)夠用了。我習(xí)慣用宏把引腳操作封裝一層這樣萬(wàn)一后面要換引腳只需要改宏定義不用在代碼里到處找#define LCD_CS_PORT GPIOB #define LCD_CS_PIN GPIO_PIN_10 #define LCD_RES_PORT GPIOB #define LCD_RES_PIN GPIO_PIN_12 #define LCD_DC_PORT GPIOB #define LCD_DC_PIN GPIO_PIN_14 #define LCD_SDA_PORT GPIOB #define LCD_SDA_PIN GPIO_PIN_15 #define LCD_SCK_PORT GPIOB #define LCD_SCK_PIN GPIO_PIN_13 #define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_CS_PORT, LCD_CS_PIN, GPIO_PIN_RESET) #define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_CS_PORT, LCD_CS_PIN, GPIO_PIN_SET) #define LCD_RES_LOW() HAL_GPIO_WritePin(LCD_RES_PORT, LCD_RES_PIN, GPIO_PIN_RESET) #define LCD_RES_HIGH() HAL_GPIO_WritePin(LCD_RES_PORT, LCD_RES_PIN, GPIO_PIN_SET) #define LCD_DC_LOW() HAL_GPIO_WritePin(LCD_DC_PORT, LCD_DC_PIN, GPIO_PIN_RESET) #define LCD_DC_HIGH() HAL_GPIO_WritePin(LCD_DC_PORT, LCD_DC_PIN, GPIO_PIN_SET) #define LCD_SDA_LOW() HAL_GPIO_WritePin(LCD_SDA_PORT, LCD_SDA_PIN, GPIO_PIN_RESET) #define LCD_SDA_HIGH() HAL_GPIO_WritePin(LCD_SDA_PORT, LCD_SDA_PIN, GPIO_PIN_SET) #define LCD_SCK_LOW() HAL_GPIO_WritePin(LCD_SCK_PORT, LCD_SCK_PIN, GPIO_PIN_RESET) #define LCD_SCK_HIGH() HAL_GPIO_WritePin(LCD_SCK_PORT, LCD_SCK_PIN, GPIO_PIN_SET)環(huán)境方面再提醒一句第一次在Keil里下載程序記得先把ST-Link驅(qū)動(dòng)裝好Options for Target - Debug里選擇ST-Link Debugger并確認(rèn)能識(shí)別到芯片IDCODE。如果板子上是CH340或CP2102串口芯片那對(duì)應(yīng)的串口驅(qū)動(dòng)也要裝好否則printf調(diào)試信息永遠(yuǎn)看不到。很多人卡在這一步以為代碼有問(wèn)題其實(shí)是電腦根本沒(méi)枚舉出設(shè)備。3. ST7735初始化序列從復(fù)位到亮屏每個(gè)命令都在干什么1.8寸TFT-LCD模塊的核心是一顆叫ST7735的驅(qū)動(dòng)芯片。這塊芯片內(nèi)部集成了顯存GRAM和掃描控制邏輯MCU不需要一直去刷新屏幕只要把像素?cái)?shù)據(jù)通過(guò)SPI寫(xiě)到它的GRAM里ST7735自己會(huì)不停地掃描GRAM并驅(qū)動(dòng)液晶面板顯示。理解這一點(diǎn)特別關(guān)鍵。3.1 ST7735的核心工作原理整個(gè)通信模型可以類(lèi)比成向一塊畫(huà)板填格子CS是“點(diǎn)名”拉低表示“選中你這塊畫(huà)板我開(kāi)始跟你說(shuō)話(huà)”DC是“告訴畫(huà)板我接下來(lái)要說(shuō)什么”說(shuō)命令還是說(shuō)數(shù)據(jù)SDA和SCK則是真正傳遞信息的那根線(xiàn)和那個(gè)時(shí)鐘節(jié)拍RES是“把畫(huà)板恢復(fù)成出廠狀態(tài)”。ST7735有很多寄存器有的控制顯示方向MADCTL有的控制像素格式COLMOD有的控制電源和伽馬曲線(xiàn)。初始化就是按照芯片手冊(cè)規(guī)定的順序依次設(shè)置這些寄存器讓它進(jìn)入可以正常顯示的狀態(tài)。ST7735內(nèi)部GRAM的容量是128x160x16bit因?yàn)槊總€(gè)像素用16位RGB565表示剛好是40KB左右。當(dāng)MCU連續(xù)寫(xiě)入像素?cái)?shù)據(jù)時(shí)GRAM的寫(xiě)地址會(huì)自動(dòng)遞增自動(dòng)從左到右、從上到下填充滿(mǎn)你設(shè)置好的窗口區(qū)域這個(gè)自動(dòng)遞增特性是我們后面能高效刷屏的基礎(chǔ)。3.2 初始化代碼逐段拆解ST7735芯片有R版和S版兩個(gè)常見(jiàn)版本初始化序列有差異。ST7735R老版常見(jiàn)紅色PCB需要配置一整套電源、幀率、伽馬寄存器才穩(wěn)定ST7735S新版常見(jiàn)藍(lán)色/黑色PCB初始化簡(jiǎn)單很多有些屏只要最基本幾步就能點(diǎn)亮。判斷方法很簡(jiǎn)單看模塊背面絲印或者問(wèn)賣(mài)家。先給一版最簡(jiǎn)初始化適合ST7735Svoid LCD_Init(void) { // 硬件復(fù)位 LCD_RES_LOW(); HAL_Delay(120); LCD_RES_HIGH(); HAL_Delay(120); // 軟件復(fù)位 LCD_Write_Cmd(0x01); // SWRESET HAL_Delay(150); // 退出睡眠模式 LCD_Write_Cmd(0x11); // SLPOUT HAL_Delay(200); // 像素格式設(shè)為16位色 LCD_Write_Cmd(0x3A); // COLMOD LCD_Write_Data(0x05); // 16bit/pixel // 關(guān)閉反顯 LCD_Write_Cmd(0x20); // INVOFF // 開(kāi)啟顯示 LCD_Write_Cmd(0x29); // DISPON HAL_Delay(100); }如果這版點(diǎn)不亮換成ST7735R的完整初始化。完整初始化會(huì)在SLPOUT之后、DISPON之前加入FRMCTR1幀率控制0xB1、PWCTR1電源控制0xC0、VMCTR1電壓控制0xC4、GAMMA曲線(xiàn)0xE0、0xE1等寄存器配置。這些參數(shù)每家面板略有差異最靠譜的來(lái)源是你買(mǎi)屏的店鋪給例程源碼照抄對(duì)應(yīng)的初始化函數(shù)即可。我把自己手頭這塊紅色PCB屏的參數(shù)補(bǔ)全過(guò)代碼如下void LCD_Init(void) { LCD_RES_LOW(); HAL_Delay(120); LCD_RES_HIGH(); HAL_Delay(120); LCD_Write_Cmd(0x01); // SWRESET HAL_Delay(150); LCD_Write_Cmd(0x11); // SLPOUT HAL_Delay(200); LCD_Write_Cmd(0xB1); // FRMCTR1 幀率控制 LCD_Write_Data(0x01); LCD_Write_Data(0x2C); LCD_Write_Data(0x2D); LCD_Write_Cmd(0xB2); // FRMCTR2 LCD_Write_Data(0x01); LCD_Write_Data(0x2C); LCD_Write_Data(0x2D); LCD_Write_Cmd(0xC0); // PWCTR1 電源控制 LCD_Write_Data(0xA2); LCD_Write_Data(0x02); LCD_Write_Data(0x84); LCD_Write_Cmd(0xC1); // PWCTR2 LCD_Write_Data(0xC5); LCD_Write_Cmd(0xC4); // VMCTR1 LCD_Write_Data(0x0A); LCD_Write_Data(0x00); LCD_Write_Cmd(0xE0); // GAMMA LCD_Write_Data(0x02); LCD_Write_Data(0x1C); LCD_Write_Data(0x07); LCD_Write_Data(0x12); LCD_Write_Data(0x37); LCD_Write_Data(0x32); LCD_Write_Data(0x29); LCD_Write_Data(0x2D); LCD_Write_Data(0x29); LCD_Write_Data(0x25); LCD_Write_Data(0x2B); LCD_Write_Data(0x39); LCD_Write_Data(0x00); LCD_Write_Data(0x01); LCD_Write_Data(0x03); LCD_Write_Data(0x10); LCD_Write_Cmd(0xE1); // GAMMA - LCD_Write_Data(0x03); LCD_Write_Data(0x1D); LCD_Write_Data(0x07); LCD_Write_Data(0x06); LCD_Write_Data(0x2E); LCD_Write_Data(0x2C); LCD_Write_Data(0x29); LCD_Write_Data(0x2D); LCD_Write_Data(0x2E); LCD_Write_Data(0x2E); LCD_Write_Data(0x37); LCD_Write_Data(0x3F); LCD_Write_Data(0x00); LCD_Write_Data(0x00); LCD_Write_Data(0x02); LCD_Write_Data(0x10); LCD_Write_Cmd(0x3A); // COLMOD LCD_Write_Data(0x05); LCD_Write_Cmd(0x20); // INVOFF LCD_Write_Cmd(0x29); // DISPON HAL_Delay(100); }初始化里這些延時(shí)不是隨便拍的ST7735從睡眠模式喚醒后內(nèi)部DC-DC轉(zhuǎn)換器和振蕩器需要時(shí)間穩(wěn)定延時(shí)不夠可能出現(xiàn)“十次有三次亮不了”這種玄學(xué)問(wèn)題。我踩過(guò)一次RES拉低只等了10ms結(jié)果屏幕偶爾亮偶爾不亮把延時(shí)加到120ms之后徹底穩(wěn)定。4. 軟件SPI核心收發(fā)代碼上升沿采樣到底怎么模擬軟件SPI沒(méi)有硬件外設(shè)幫你計(jì)數(shù)和采樣所以一切邏輯都靠循環(huán)里的人工操作。代碼并不長(zhǎng)核心就一個(gè)字節(jié)發(fā)送函數(shù)搞清楚這一段的電平變化邏輯整個(gè)驅(qū)動(dòng)就拿下了一大半。4.1 字節(jié)發(fā)送函數(shù)的時(shí)序邏輯我在PB13上用GPIO生成時(shí)鐘PB15上放數(shù)據(jù)模擬的是SPI模式0空閑時(shí)SCK為低電平在SCK上升沿時(shí)數(shù)據(jù)被采樣有效。發(fā)送一個(gè)字節(jié)的流程是先把SCK拉低把SDA設(shè)置成當(dāng)前要發(fā)送的bit最高位先發(fā)再把SCK拉高產(chǎn)生一個(gè)上升沿這時(shí)ST7735會(huì)在SDA上讀到一個(gè)穩(wěn)定的電平。循環(huán)8次后8個(gè)bit全部完成一字節(jié)發(fā)送結(jié)束。void SPI_WriteByte(uint8_t dat) { for (uint8_t i 0; i 8; i) { LCD_SCK_LOW(); // 時(shí)鐘拉低準(zhǔn)備一次數(shù)據(jù)發(fā)送 if (dat 0x80) // 取出最高位 LCD_SDA_HIGH(); else LCD_SDA_LOW(); dat 1; // 左移準(zhǔn)備下一位 LCD_SCK_HIGH(); // 時(shí)鐘拉高產(chǎn)生上升沿從設(shè)備采樣 } }注意循環(huán)體內(nèi)的順序先拉低SCK再改SDA最后拉高SCK。如果順序反了比如先改SDA再拉低SCK就會(huì)出現(xiàn)SDA變化瞬間和上升沿重疊的情況從設(shè)備可能采到不穩(wěn)定的電平。順序看似簡(jiǎn)單卻是軟件SPI可靠性的關(guān)鍵。在STM32F103這種72MHz主頻下GPIO翻轉(zhuǎn)本身只要幾個(gè)時(shí)鐘周期整個(gè)函數(shù)跑起來(lái)大概1微秒多一字節(jié)完全滿(mǎn)足ST7735的工作要求。如果你發(fā)現(xiàn)屏幕偶爾顯示亂碼可以在這個(gè)函數(shù)里加幾個(gè)空操作延時(shí)比如每次電平切換后加兩個(gè)__NOP()給信號(hào)穩(wěn)定留點(diǎn)余量。但多數(shù)情況下不加延時(shí)也穩(wěn)定我自己跑下來(lái)滿(mǎn)速刷屏沒(méi)有任何問(wèn)題。4.2 命令和數(shù)據(jù)的區(qū)分DC引腳的作用光有字節(jié)發(fā)送還不夠ST7735要知道你發(fā)的是命令還是數(shù)據(jù)這個(gè)信號(hào)由DC引腳決定。DC為低芯片把你的數(shù)據(jù)當(dāng)成要寫(xiě)入的寄存器地址或命令DC為高芯片把你的數(shù)據(jù)當(dāng)成顯示內(nèi)容或者寄存器參數(shù)寫(xiě)入GRAM。封裝成兩個(gè)函數(shù)void LCD_Write_Cmd(uint8_t cmd) { LCD_CS_LOW(); LCD_DC_LOW(); // 命令模式 SPI_WriteByte(cmd); LCD_CS_HIGH(); } void LCD_Write_Data(uint8_t dat) { LCD_CS_LOW(); LCD_DC_HIGH(); // 數(shù)據(jù)模式 SPI_WriteByte(dat); LCD_CS_HIGH(); }有些初始化命令后面要跟多個(gè)參數(shù)比如設(shè)置顯示窗口的CASET命令0x2A后面要跟4個(gè)字節(jié)參數(shù)所以實(shí)際使用中先寫(xiě)命令再連續(xù)寫(xiě)多個(gè)數(shù)據(jù)LCD_Write_Cmd(0x2A); // 列地址設(shè)置 LCD_Write_Data(0x00); LCD_Write_Data(0x00); LCD_Write_Data(0x00); LCD_Write_Data(0x7F); // 0~127共128列這里有一個(gè)優(yōu)化點(diǎn)如果在寫(xiě)確認(rèn)是命令時(shí)已經(jīng)拉低了CS那同一個(gè)命令后續(xù)的數(shù)據(jù)其實(shí)可以保持CS拉低連續(xù)寫(xiě)不需要在每寫(xiě)一個(gè)字節(jié)時(shí)都切換一次CS。但為了防止邏輯混亂和不必要的時(shí)序風(fēng)險(xiǎn)我封裝的兩個(gè)函數(shù)之間會(huì)切換CS。這個(gè)速度損失在初始化階段無(wú)所謂但在刷屏階段就必須優(yōu)化了下面說(shuō)。4.3 優(yōu)化連續(xù)刷數(shù)據(jù)時(shí)別頻繁切換CS刷屏的本質(zhì)是在設(shè)置好窗口之后連續(xù)不斷地向GRAM寫(xiě)入像素顏色。如果每個(gè)像素都調(diào)用一次上面那個(gè)帶CS切換的LCD_Write_Data你會(huì)發(fā)現(xiàn)刷一屏慢得離譜。因?yàn)槊看蜟S拉高再拉低ST7735的串行接口會(huì)重新等待命令/數(shù)據(jù)標(biāo)識(shí)窗口地址寄存器也可能被重置。正確做法是設(shè)置好窗口后把CS拉低不要?jiǎng)影袲C拉高告訴芯片“下面全是數(shù)據(jù)”然后循環(huán)發(fā)送所有像素字節(jié)最后再把CS拉高。我實(shí)測(cè)這個(gè)改動(dòng)讓全屏填充速度提升了接近一倍。void LCD_SetWindows(uint16_t x_start, uint16_t y_start, uint16_t x_end, uint16_t y_end) { LCD_Write_Cmd(0x2A); // CASET 列地址 LCD_Write_Data(x_start 8); LCD_Write_Data(x_start 0xFF); LCD_Write_Data(x_end 8); LCD_Write_Data(x_end 0xFF); LCD_Write_Cmd(0x2B); // RASET 行地址 LCD_Write_Data(y_start 8); LCD_Write_Data(y_start 0xFF); LCD_Write_Data(y_end 8); LCD_Write_Data(y_end 0xFF); LCD_Write_Cmd(0x2C); // RAMWR 準(zhǔn)備寫(xiě)GRAM }設(shè)置窗口時(shí)x、y都是16位參數(shù)所以分成高8位和低8位兩次發(fā)送。屏幕分辨率128x160CASET的范圍是0~127RASET的范圍是0~159參數(shù)寫(xiě)錯(cuò)就會(huì)出現(xiàn)顯示錯(cuò)位或者花屏。后面填充顏色時(shí)CS只切換一次void LCD_Fill(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color) { uint32_t count (uint32_t)(x2 - x1 1) * (y2 - y1 1); LCD_SetWindows(x1, y1, x2, y2); LCD_CS_LOW(); LCD_DC_HIGH(); // 后面全是數(shù)據(jù) while (count--) { SPI_WriteByte(color 8); // 高字節(jié) SPI_WriteByte(color 0xFF); // 低字節(jié) } LCD_CS_HIGH(); }5. 刷屏與顯示內(nèi)容填充顏色、ASCII字符和BMP圖片屏幕上顯示任何內(nèi)容本質(zhì)都是往GRAM里寫(xiě)顏色數(shù)據(jù)。把這一層抽象出來(lái)之后畫(huà)點(diǎn)、畫(huà)線(xiàn)、畫(huà)矩形、顯示字符甚至顯示圖片都是同一個(gè)套路先設(shè)置窗口再往窗口里填充顏色值。5.1 RGB565顏色編碼與單色填充ST7735在COLMOD設(shè)為0x05時(shí)每個(gè)像素用16位RGB565格式表示高5位是紅色中間6位是綠色低5位是藍(lán)色。這種格式舍棄了每個(gè)顏色分量的一部分精度把16位空間利用率拉滿(mǎn)。實(shí)際使用中我習(xí)慣用一個(gè)宏把RGB三通道的0~255值轉(zhuǎn)換成RGB565#define RGB565(r, g, b) (((r 0xF8) 8) | ((g 0xFC) 3) | ((b 0xF8) 3))注意轉(zhuǎn)換后的16位數(shù)據(jù)在字節(jié)發(fā)送時(shí)高位在前color 8先發(fā)高字節(jié)再發(fā)color 0xFF低字節(jié)。很多剛上手的朋友把順序搞反結(jié)果顏色整體偏色或者紅藍(lán)互換屏幕上圖形輪廓是對(duì)的但顏色全亂了。全屏填充一種顏色一行代碼就能實(shí)現(xiàn)LCD_Fill(0, 0, 127, 159, RGB565(255, 0, 0)); // 全屏紅色 LCD_Fill(0, 0, 127, 159, RGB565(0, 255, 0)); // 全屏綠色 LCD_Fill(0, 0, 127, 159, RGB565(0, 0, 255)); // 全屏藍(lán)色5.2 顯示ASCII字符需要自己準(zhǔn)備字模液晶屏本身不認(rèn)字符要顯示字母和數(shù)字必須把字符轉(zhuǎn)換成像素點(diǎn)陣數(shù)據(jù)插進(jìn)GRAM。我用的是一種常用的8x16 ASCII字模庫(kù)每個(gè)字符占16個(gè)字節(jié)每個(gè)字節(jié)對(duì)應(yīng)一列的8個(gè)像素點(diǎn)從左到右共8列加上縱向16列正好組成8x16的字符。每個(gè)字節(jié)的最低位對(duì)應(yīng)字符的頂部還是底部不同的取模工具可能不同如果顯示效果是上下顛倒的把取模方向改成從下到上即可。顯示字符函數(shù)的核心邏輯是先按字符的位置設(shè)置顯示窗口然后逐列讀字模遇到為1的bit就填前景色遇到為0的bit就填背景色。關(guān)鍵是把窗口設(shè)置成8像素寬、16像素高然后逐像素輸出。void LCD_ShowChar(uint16_t x, uint16_t y, char ch, uint16_t color, uint16_t bg) { const uint8_t *font ASCII_8x16[ch - ]; LCD_SetWindows(x, y, x 7, y 15); LCD_CS_LOW(); LCD_DC_HIGH(); for (uint8_t i 0; i 16; i) { uint8_t byte font[i]; for (uint8_t j 0; j 8; j) { if (byte (0x80 j)) { SPI_WriteByte(color 8); SPI_WriteByte(color 0xFF); } else { SPI_WriteByte(bg 8); SPI_WriteByte(bg 0xFF); } } } LCD_CS_HIGH(); }字模數(shù)組ASCII_8x16的代碼網(wǎng)上很多直接下載或者自己用取模軟件生成都行。這段邏輯里0x80 j是在從高到低逐位讀取一個(gè)字節(jié)的8個(gè)bit剛好對(duì)應(yīng)屏幕上從左到右的8列像素。顯示中文需要額外準(zhǔn)備16x16或者32x32的全角字模思路完全一樣只是字節(jié)數(shù)和行列數(shù)更多。5.3 用取模軟件顯示一張完整圖片顯示BMP圖片的流程本質(zhì)上就是把你準(zhǔn)備好的圖片數(shù)據(jù)數(shù)組逐字節(jié)灌進(jìn)GRAM。圖片需要預(yù)先在電腦上轉(zhuǎn)換成C語(yǔ)言的const數(shù)組我用的是Image2Lcd這款工具設(shè)置非常關(guān)鍵設(shè)置項(xiàng)推薦值輸出顏色16位真彩色像素格式RGB565掃描方式水平掃描行優(yōu)先高位在前勾選最大寬度/高度128 / 160生成的數(shù)組是const unsigned char gImage_xxx[]每個(gè)像素占2字節(jié)。顯示時(shí)直接設(shè)置窗口為圖片大小然后連續(xù)發(fā)送整個(gè)數(shù)組void LCD_ShowPicture(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t *pic) { uint32_t total (uint32_t)width * height * 2; // 總字節(jié)數(shù) LCD_SetWindows(x, y, x width - 1, y height - 1); LCD_CS_LOW(); LCD_DC_HIGH(); while (total--) { SPI_WriteByte(*pic); } LCD_CS_HIGH(); }這個(gè)函數(shù)不關(guān)心圖片內(nèi)容只管逐字節(jié)搬運(yùn)所以任何圖片只要轉(zhuǎn)成數(shù)組就能顯示。要注意取模軟件的掃描方式必須和你的窗口設(shè)置一致如果取模時(shí)是垂直掃描而代碼里窗口是水平填充圖像會(huì)變成“拉絲”效果一行一行錯(cuò)位錯(cuò)開(kāi)。6. 白屏、花屏、偏色我把常見(jiàn)的坑都踩了一遍配置完這些代碼之后并不是所有板子都能一次點(diǎn)亮。下面這些坑都是我實(shí)際踩過(guò)的逐個(gè)排查基本能解決90%的問(wèn)題。6.1 白屏的排查鏈路如果背光亮了但屏幕全白按下述順序查。第一步查硬件復(fù)位。很多模塊的RES引腳需要穩(wěn)定拉低再拉高的過(guò)程STM32上電瞬間RES引腳的電平如果被其他初始化邏輯干擾屏幕就會(huì)停留在復(fù)位狀態(tài)。用代碼在初始化最開(kāi)始顯式做一次RES低120ms - 高120ms能排除絕大多數(shù)復(fù)位問(wèn)題。第二步查DC引腳。DC接錯(cuò)是白屏的另一個(gè)高發(fā)原因。DC一旦接反屏幕會(huì)把命令當(dāng)成數(shù)據(jù)處理、把數(shù)據(jù)當(dāng)成命令處理所有寄存器配置全部錯(cuò)亂屏幕上就是一片白。確認(rèn)DC接到了PB14代碼里DC宏定義正確。第三步查初始化序列是否匹配你的芯片版本。紅板ST7735R沒(méi)有完整伽馬配置就是白屏藍(lán)板ST7735S用完整配置反而可能花屏。先判斷版本再?zèng)Q定初始化方案不要混用。第四步如果你有邏輯分析儀直接抓SCK和SDA波形看初始化階段是否有電平翻轉(zhuǎn)。軟件SPI的速度正好在邏輯分析儀的采樣范圍內(nèi)方便得很。抓不到波形說(shuō)明代碼根本沒(méi)跑起來(lái)那就是工程配置問(wèn)題去查時(shí)鐘樹(shù)和GPIO模式。6.2 花屏和錯(cuò)位的真正原因花屏的排查點(diǎn)比白屏更多但特征很明顯屏幕上能看出有東西在顯示只是色彩和位置不對(duì)。最常見(jiàn)的花屏原因是窗口設(shè)置和實(shí)際像素尺寸不匹配。比如把128x160的屏幕錯(cuò)配成132x162或者CASET/RASET參數(shù)寫(xiě)反了GRAM的寫(xiě)入指針就會(huì)溢出到非預(yù)期區(qū)域出現(xiàn)“斜著錯(cuò)位”的條紋。把窗口參數(shù)改成0~127和0~159通常就能解決。另一種花屏表現(xiàn)為顏色漸變、色斑明顯這不一定是代碼問(wèn)題可能是模塊電源紋波偏大。我在用杜邦線(xiàn)供電、電源線(xiàn)較長(zhǎng)的時(shí)候遇到過(guò)后來(lái)在VCC和GND之間并了一個(gè)100uF電解電容現(xiàn)象立刻消失。如果你用的是面包板飛線(xiàn)給屏幕供電多并個(gè)電容是好習(xí)慣。還有一種是MADCTL方向設(shè)置導(dǎo)致的“翻轉(zhuǎn)錯(cuò)位”。ST7735的0x36寄存器控制掃描方向和RGB/BGR順序不同廠家的屏初始值不同。如果你發(fā)現(xiàn)顯示內(nèi)容上下顛倒或者左右反轉(zhuǎn)通過(guò)修改LCD_Write_Data(0x00)這個(gè)參數(shù)來(lái)調(diào)整。常用幾組值顯示方向MADCTL值豎屏普通0x00橫屏90度0x60豎屏180度0xC0橫屏270度0xA0這幾個(gè)值是經(jīng)驗(yàn)值不同批次屏幕存在細(xì)微差異以實(shí)測(cè)為準(zhǔn)。6.3 引腳電平與供電的灰色地帶ST7735的IO邏輯電平是1.8V~3.3V不支持5V。如果你的主控是5V供電的Arduino或者51單片機(jī)必須加電平轉(zhuǎn)換直接接大概率燒壞屏幕控制器或者出現(xiàn)各種奇怪亂碼。STM32本身輸出3.3V這一步反而安全但要注意千萬(wàn)不能圖省事用5V供電然后直接接3.3V邏輯——電源域和IO電平域是兩回事。另外一個(gè)容易被低估的是杜邦線(xiàn)長(zhǎng)度。軟件SPI雖然速度慢但線(xiàn)上反射噪聲依然可能導(dǎo)致數(shù)據(jù)錯(cuò)誤。我試過(guò)用30cm的杜邦線(xiàn)連接屏幕滿(mǎn)速刷屏?xí)r偶發(fā)花屏縮短到15cm以?xún)?nèi)就完全正常。如果現(xiàn)場(chǎng)不得不走長(zhǎng)線(xiàn)那就把SPI_WriteByte的循環(huán)里加幾個(gè)__NOP()降速或者干脆把時(shí)鐘半周期拉長(zhǎng)犧牲一點(diǎn)速度換穩(wěn)定性。最后再提一個(gè)值得一提的細(xì)節(jié)如果屏幕模塊是帶有PCB板載穩(wěn)壓的版本供電電壓標(biāo)稱(chēng)5V實(shí)際芯片邏輯部分還是3.3V。這種情況下供電接5V沒(méi)問(wèn)題但不要同時(shí)把屏幕的SDA、SCK信號(hào)接到5V電平上信號(hào)線(xiàn)上沒(méi)有穩(wěn)壓芯片保護(hù)5V邏輯電平直接懟上去照樣可能損壞ST7735。寫(xiě)在最后的一點(diǎn)實(shí)際建議這套STM32軟件SPI驅(qū)動(dòng)1.8寸TFT-LCD的方案我已經(jīng)在好幾個(gè)項(xiàng)目里復(fù)用了包括一個(gè)室內(nèi)溫濕度監(jiān)測(cè)器和一個(gè)手持LCR表界面。我的體會(huì)是屏幕驅(qū)動(dòng)本身不復(fù)雜但一定要把“時(shí)序”兩個(gè)字刻在腦子里。SCK什么時(shí)候翻轉(zhuǎn)、SDA什么時(shí)候變化、DC什么時(shí)候切換每一步都要清清楚楚。軟件SPI雖然慢但它把整個(gè)通信過(guò)程變得完全可控一旦出問(wèn)題用邏輯分析儀看波形比對(duì)著硬件SPI寄存器猜原因高效太多。最后分享一個(gè)經(jīng)驗(yàn)在調(diào)試階段建議把SPI_WriteByte里的時(shí)鐘速度刻意調(diào)慢一點(diǎn)比如在每次SCK翻轉(zhuǎn)后加幾個(gè)__NOP()這樣邏輯分析儀能更清晰地看清楚每一位數(shù)據(jù)。等整個(gè)鏈路確認(rèn)無(wú)誤后再把這些延時(shí)拿掉恢復(fù)滿(mǎn)速刷屏。這種方法能有效區(qū)分“時(shí)序錯(cuò)誤”和“邏輯錯(cuò)誤”排查起問(wèn)題來(lái)快得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
爆操无码| 伊色综合天堂色97| 97人人爱人人做人人乐| 午夜毛片亚洲精品片国产久久久| 欧美综合区| 少妇内射www在线观看视频| 久久性爱视频99| 中文字幕永久在线| 天天干夜夜操一区二区| 午夜精品探花| 嗯嗯不要视频| 九九热在线精品视频| www.久久超碰| 九九RE视频在线精品| 亚拍在线| 国产精品网址| 伊人国产视频| 岛国AB视频| 色制服丝袜夫妻av一区| 国产最新小视频在线播放下载| 人妻天天夜夜爽一区二区| 国内一级精品| 色五月网址| 欧美日韩操操操| 国外91| 思思视频免费看网站| 丁香六月综合激情| 亚洲色图A| 色五月综合网| 亚洲丝袜诱惑| 91亚洲欧美色图| 91精品国产91久久青草| 久艹伊人精品综合在线| 中文字幕一区二区三区高清| 欧美性生活内射| 国产精品黑人一区二区三区| 麻豆精品A片免费观看| 人人弄人人摸| 在线亚洲精品久久久| 欧美综合自拍| 91艹逼精品| 久久久99免费| 青操影院| 五月天开心网| 亚洲中字幕日本一区二区三区| AND人妻系列| 中文字幕在线观| 久久亚洲影院一区二区| www.黄色在线| 91久久久久久久久18| 亚洲 日本 一 二 三| 亚欧无码线免费观看视频| 色老汉色| 国产精品动态一区二区三区四四| 91精品黄在线观看| 欧美性性性| 日韩丝袜人妻AV| 国产乱伦亚洲| 欧美图片校园春色| 精彩国产视频播放1区2区| 91精品微拍福利| 国产精品动态一区二区三区四四| 91粉芽高清在线一区二区| 亚洲欧美999| 久久久久亚洲精品| 秋霞视频一区二区| 91精品国产91久久福利| 爱丝福利| 久久a久久| 国产精品激情久久久久久久| 国产色产精品在线观看| 国产外初女出血视频| 欧美黑人XXXⅩ高潮交| 国产精品懂色tv影视免费观看| 96免费视频在线| 五月天丁香婷婷综合网站| 一区二区视频在看| 伊人991| 色色亚洲| 国产操操日韩三级黄| 殴美色网| 人妻酒店出差被中出免费在线播放| 美国一区二区三区视频| 999久久久九九九九| 中文字幕精品丝袜| 91丝袜视频在线观看| 在线天堂999| 91小视频| 久久无码成人| 碰碰97| 久久精品电影| 91亚洲不卡一区| 强奸乱伦αv片| 夜夜草我| 亚洲美女高潮喷水视频| 韩国女主播青草在线| www.zbzhongsen.com| 伊人精品久久网站| 都市久久精品激情亚洲| 97精品网| 秋霞网无码| 五月天日日操夜夜操| 日韩视频小说在线观看| 国产精品秘 福利姬在线观看| 日韩国产不卡在线视频| av黄图片在线观看| 青青青草原| 97超碰资源网| 夜夜操av亚洲一区二区| 久久香蕉国产传媒一区剧情天美| 熟女人妻一区二区三区| 福利社区午夜一区二区| 26UUU欧美日本| 日夜伊人网| 亚洲精品97p| 97精品在线| 日韩超碰精品综合| 成人五月天丁香激情综合| 天天性射网| 久久爱超碰网| 亚洲色图国产另类| 欧美亚洲20p| 亚洲 欧美 手机在线观看| 浓厚中出中文字幕在线| 日韩激情毛片一级久久久| 欧美丝袜亚洲| 91色欧美| 91美女视频直播| 97网站在线观看| 丰满人妻一区二区三区免费,| 久操免费在线| 97在线看| 黄片www视频免费| 国产精品96| 久久超碰97| 青娱乐91| 中文字幕后石码三区四区| 色逼综合| 国产女大学生AV| 欧美激情精品| 96精品久久久久久久久久| 亚州欧美色图| 精品免费视频国产一区| 丁香五六月啪啪| 亚洲 无码 偷拍| AV乱伦专区| 操b在线观看| 欧美日韩午夜精品一区二区三区| 久久久久久久九九九九九九| 26uuu成人影片| AV和黑人在线播放| 熟女精品va中文字幕| 国产AV无码AV| 色婷网| 91麻豆va国产精品| 日韩内射视频| 少妇三P| 东北操逼| 日本一道在线播放高清| 成人无遮挡毛片免费看| 黄在线| 9久热| 91九久| 玖玖资源中文字幕制服丝袜| 天天操天天7| 欧美日日人人天天| 欧美日韩在线小说 | 亚洲欧美日韩中文播放| 国产乱色国产精品免费视| 高清无码 国产精品| 变态乱伦伪娘灌肠一区二区| 欧美日韩性爱精品| 中文字暮97| 日本999精品| 毛片99-全集电影手机免费观看完整-B029AV | 亚洲最大无码中文字幕网站 | 亚洲超碰97| 中文字幕蜜乳av| 日韩精品一区二区高清| 在线国产一区二区av| 亚洲成人碰碰| 久久精品国产精品| 神马午夜久久| 国产宅男宅女在线观看| 女优免费一区二区永久| 日本中文字幕一区| 狠狠干91| 久久草在线综合视频| 久久人妻办公室视频| 成人热久久精品| 欧美激情在线观看视频| 久久av一级av少妇av高潮 | 久久精品亚洲婷婷| 男女性扦B| 91精品人妻偷情| 亚洲美女自拍偷拍视频| 男人天堂站| 9 9无尺码天堂网| 男女啊啊啊| 美国人人操人人操| 蜜臀色乳| 九九碰九九爱97超| www…国产操逼| 一区二区 电影 亚洲| 女生看匆91网站| 国产精品亚洲无码| 91精品成人| 九九九一二三| 狠狠色综合网| 精品妇操一区二区三区| 国产精品久久天天干| 六月色婷婷| 亚洲日韩久久精品一区| 五月丁香六月综合缴清无码 | 天天肏夜夜肏| 欧美性爱三区二区| 不卡一区视频| 一级人妻性爱视频| 久妇网| 中文字幕成人乱码熟女精品国50| 男人a天堂手机在线版| 日韩二三区| 伦理第一页| 亚洲啪啪性视频| 偷拍2020| 亚瑟国产精品久久无码| 男人的天堂激情| 国产精品久久久久久久久久久久久久吹 | 亚洲蜜乳av| 97色97好| 欧美日韩在线国产在线| 九九自拍伦理| av在线观看不卡网站| 天美传媒一二三区永久网站| 欧美色狠| 久久啊哟| 免费观看日本操逼视频| 欧美淫穴| 一区二区三区高清天码| 天天干天天中出av| 国产操伦| 天综合网欧美| 温婉少妇玩3p| 67914在线兔费成人视频| 久久久精品视频免费观看| 中文字幕神马久久| 午夜无码精品免费看性色| 青青草字幕AV| 精品性爱一二三区| 91老熟女91老女人| 五月香婷婷| 久久国产精品一区二区| 国产剧情一区在线观看| 亚洲国产精品久久AV| 色呦呦、国产精品| 99久久久久久亚洲精品不卡| 麻豆伊人网| 色天使亚洲综合在线观看| 日本淫穴在线| 人妻熟女av国产网站| 无卡一区=区| 免费a在线播放v| 久久国产精品视频| 不卡在线一区,精品一区二区三区中| 婷婷九月国产| 深爱五月天| 久久天堂| 欧美亚洲厕所精品偷拍91| 熟女五十路一区二区三| 校园春色美腿丝袜 | 蜜臀99久久精品久久久久久| 婷婷五月色| 欧美碰碰综合色| 天天看片天天爽| 国产91乱伦| 欧美激色| 日本丝袜美腿人妻九九| 嫩草影院在线观看精品| 色九九久九九| 国产精品午夜成人福利| 久久久久国产一区二| 青青青青操国内视频在线| 91九色丨国产丨爆乳| 日本操逼视频导航| 久久超碰网| 久久发布国产伦子伦精品| 亚洲免费在线探花| 欧亚三区动漫| 亚洲情色在线| 亚洲va综合va国产va中文| 免费A片三p视频| 天美一区在线| 久草精品热视| 亚洲色 国产 欧美 日韩| 人妻少妇精品久久久久久| 午夜福利久久久噜久噜久久综合 | 天天弄天天操| 久草新在线| 色大香蕉97N| 人妻喷水| 操亚州| 久久婷婷五月天| 国内精品久久人妻性色av| 国产精品乱码久久久久久久| 日韩内射视频| 欧美日韩国产在线| h无码动漫在线观看| 久久这里只| 91 综合 色| 天堂岛av| 五月婷婷久久综合| 在线综合 亚洲 欧美中文字幕| 91丝袜人妻| 色九九九综合| 午夜福利在线视频1000| 67914亚洲精品| 黄在线| 欧美劲爆第一页| 99色骚| 九九精品美女高溯喷水| 国产成人在线观看综合| 国产操逼逼网| 亚洲色图尤物视频| 蜜臀在线视频| 91丝袜美女视频| 人妻人妻天天碰| 日本韩高清无砖码22o| 国产精品禁久久久精品| 久久少妇人妻| 9久精品视频在线观看| 成人影 天天操 亚洲| 久热99| 很很热性爱视频| 久操com| 国产h小视频在线观看免费| 亚洲天堂电影网99999| 欧美日韩天堂| 久久久久久久久久久97| 超碰久久性爱| 性感女人网页在线观看视频| 亚洲日韩AV视色| 大香蕉AV在线| 欧美极度丰满熟妇hd| 中文字幕亚洲热播人妻| 93人人操人人| 三级网色| 日韩乱伦影音先锋| 午夜激情成人在线观看| 日韩无码视频黄色| 美国日韩黄片| 天堂俺去俺来也www久久婷婷| 丰满人妻aA一区二区三区| 少妇大屁屁| 哑洲在线| 亚洲男人的天堂va亚洲男人社| 久久中文字幕人妻熟av女蜜柚| 超碰久在线天天做| 国产大片精久久久久久| 97久久精品亚洲中六字幕| 香蕉99秘 精品一区丁香| 天天操av懂色| 久久夜夜夜夜| 超碰97综合网| 亚洲乱妇p22| 91av熟女人妻| 97在线免费视频观看| 国产精品视频在线观看| 国产97亚洲| 私人尤物在线精品不卡| 国产三级在线现体验区| 亚洲日韩精品一区视频在线| 图片区小说区| 国产亚洲一黄| 夜夜狼人妻| 欧美老妇综合网| 中文字幕十五区| 欧美高潮| 男人天堂2017| 亚洲精品白浆高清久久久久久| 亚洲图片激情综合另类| 乱伦a片视频| 久久国内| 七久久久| 综合网久久| 欧美亚洲成人在线一区二区三区| 日韩中文字幕av在线播放| 91蜜臀在线久久久久| 97这里都是精品| 韩国国产欧美情侣视频在线| 大逼色网站| 一区二区三区国产在线播放| 日本五十路熟女一区二区| 色综合色综合网| 亚洲天堂另类美腿| 无码精品啪啪啪一区二区三区三州| 精品人妻一区二区三区四区| 大香蕉乱级| 国产一区二区av综合| 色丁香五月婷婷| 蜜臀精品1区2区| 久久久久人| 老熟女91视频| 亚洲AV无码AV吞精久久久久| 九月婷婷综合| 亚洲的天堂网| 91美女网站| 岛国黄| 婷婷爱五月| 欧美韩国你懂得在线| 992视频一区| 在线αⅴ| 国产农村妇女一区二区| 91青青在线视频| 久久AV无码AV| 色色操| 熟女AV一区| 九七超碰| 女人被添高潮免费视频| 蜜桃视频一区二区三区在线观看| 天天情欲宗合网| 男人午夜天堂| 91chinese在线| 国产不卡中文字幕免费avi| 欧美亚洲特P| 老熟女乱子伦中文字幕一区二区| 国产最新AV| 久操av在线| 欧美日韩1234| 无码国产精品午夜不卡(| 国产九九久久久精品| 久热精品在线| 艹少妇网站| 日本九九久久99播| 超碰97综合| 人人操人人摸人| 九九热视频这里只有精品| 中文字幕在线免费观看| 全球成人中文在线| 中文字幕精品久久久久人妻红杏ⅰ| 亚洲欧美不卡线| 日韩性爱高清免费视频| 99热日| 丰满人妻一区二区三区性色| 久久久久性熟视频| 欧美亚洲图片| 国内外色色色色色成人视频| 蜜臀一二三| 欧美性爱18观看| 丰满人妻一区二区三区在线| 亚洲91在线| 激情丁香五月婷婷| 亚洲丝袜少妇在线| 看日韩美女二区三区免费操逼视频| 久久精品男人的天堂| 伊人一级免费黄片| 国产夜夜艹| 992视频一区| 综合久| 97爱啪| 国产 无码 一区二区| 天天天天做夜夜夜夜做| 在线看的av| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 亚洲色图综合| 99在线观看| 高潮9999外国| 91超碰人人操| 72av视频| 大鸡吧尹人在线| 秋霞Av理论一级在线| 久久人人妻| 一级乱伦网站| 69精品人人人人| 亚洲日韩视频二区| 91AV天堂| 岛园激情| 超碰色图| 无码heyzo高清一区| 日韩免费a级毛片无码a∨| 91美腿丝袜在线观看| 人人操人人插 - 百度 - 百度| 日本啊啊啊啊啊视频| 精品国产一区二区三区四区在线看| 性性欧美| 操逼网免费无码视频| 亚洲成人帖图| 亚洲情色电影网| 熟女激情综合网| 亚洲激情天堂网| 一区三区啪啪| 亚洲自拍97| 宅男91视频在线播放| 国产9 9在线 | 亚洲| 91少妇香蕉久久精品| 午夜福利成人免费视频| 精品超碰色| 久久极品一区二区| 成人性爱AV在线免费观看| 欧美玖玖爱免费玖玖| 免費黃色視頻觀看一| 女人久久久| 欧美日韩电影一区二区| 91成人在线免费视频| 亚洲熟女av中文字幕| 成人A片男人的天堂| 日韩国产乱子伦App| 花花AV导航| 欧美亚洲成人在线一区二区三区| 少妇干B| 98久久| SUV一区二区在线看| 人妻人人操| 一中国女人毛片水真多| 92大香蕉| 男人的天堂亚洲| 韩国手机不卡无码三级视频| 91中出视频| 97天天爽| 熟女色综合久久| 91精片| 99爱爱| 天天狠| 亚洲日韩成人性爱视频| 中文字幕国产在线天堂| 无卡一区=区| 一区二区三区网站日日骚| 不卡av在线中文字幕| 亚洲成成熟女人综合一区二区| 97中文字幕色| 艳美熟妇先锋一二三区| 欧亚在线视频| 人人么人人操| 超碰色97| 亚州久久9| 亚州伊人色综台| 日本成人电影资源网| 亚洲中文字幕在现观看| av影院十区| 任你干在线视频| 亚洲国产一区二区三区在线| 欧美成人AⅤ大片在线观看| 亚洲高清自拍| 欧美丝袜中文字幕07在线| 久久久久密臀视频| 欧美一区二区三区互相| 91亚洲综合在线| 啊啊啊轻点在线观看| www.高清无码诱惑一区.com| 亚洲情色电影网| 日韩在线观看中文字幕视频| 国产精品宅男免费| 国产在线激情视频| 看免费一级在线播放毛片| 少妇久久久久久| 亚洲综合嫩| 精品丰满熟妇人妻一区| 九九九九免费视频| 亚洲国产一区二区三区在线| 久久麻豆一区二区| 日本 欧美 亚中文字幕| 九九激情网| 性做久久久久久免费观看软件| av在线不卡一区二区三区| 九九九九久久久久| 欧美亚洲手机在线| 亚洲一区二区三区婷婷| 后入国产| 久久超碰日韩精品| 九热中文字幕| 97国产|免费| 久久久久96| 亚洲熟妇白浆无码AV| 黄色一区三区| 人妻大香蕉| 五十路熟女在线不卡观看一区二区| 最新9久久久9免费视频| 中文字幕精品三级久久久| 99热18这里只有精品| 超碰欧美在线欧美| 精品制服美女中文一区二区三区| 熟妇人妻一区二区三在线| 久久水蜜臀亚洲AV无码精品| 亚洲欧洲无码97久久精品| 精品少妇后入一区二区三区四区人妻巨乳| 亚洲精品 大香蕉| 熟女丝袜视频| 亚洲国产剧情少妇激情| 美腿丝袜高跟网免费视频免费视频| 草久久久| 美腿丝袜偷拍亚洲欧美| 国产情色第一第二页在线观看| 欧美亚洲激情一二三| 怡红院亚洲怡春院av| 久久东京热成人| 欧美色爱综合| 日韩熟女精一区二区三区不卡| 2019天天干| 亚洲精品欧洲色| 精品国产一区探花在线观看| 国产JDAV无码视频在线观看| 韩日性爱av| 亚洲精品一区二区三区在线播放| 99精品久久久久久久婷婷| 婷婷亚洲综合| 99国内精品| 欧美色一二三| yazhououmeizongya| 2017天天拍大香蕉| 中文字幕五月婷婷免费| 370p日韩欧美亚洲精品| 操逼网免费无码视频| 嗯嗯啊在线视频| 97色欧州| 97精品国产精品免费观看| 久操视频在线| aaa亚无码专区| 青娱乐亚洲自拍| 中国国国产一级特黄毛片| 91无码中出人妻视频| 精产国品一区二三产品| 欧美在线|亚洲| 欧美色图20p| 国产精品久久99日日| 99热超碰在线| 天天看高清麻豆| 91欧美性| 久久男人的天堂| a一区二区三区乱码在线| 精品久久久亚洲AV成人网站| 欧美色图天堂网m| 夜夜免费视频| 青娱乐淫乱1314| 户外裸露刺激视频第一区| 亚洲国男人的天堂| 亚洲色图伊人网| 亚洲综合在线第一页| 97精品熟女少妇一区| 日韩中文字幕二区| 按摩中文字幕| 国产精品一区在线播放| 伊人精品久久网站| 久久国产三区| 色婷婷A V一二三四区麻豆综合| 日韩精品资源专区二区| 激情色播| 91挑色欧美| 好吊色综合| 在线观看无码三级少妇| 日韩女优中文字幕| 老熟女阿 国产91| 97精品熟女少妇一区| 狠狠 91| 97中文字幕一区| 久久东京伊人一本到鬼色| 久久久久久久久久久久久久9999| 96久久久精品| 美女裸体无遮挡永久免费观看网站| 国产小u女在线观看| 好屌色综合| 日韩欧美亚洲自拍偷拍| 久久国产精品91| 欧美综合网在线| a久久| 97在线视频免费看| 久久久久国产无av| 亚洲91射| 人人干人人操人人..com| 大香蕉一人在线| 欧美 亚洲| 婷婷综合久久| 美女天天干| 欧美亚州综合网图片| 无码高清操逼网址| 女人双腿搬开让男人桶| 亚洲色图欧美另类在线| www.男人的天堂| 成人片在线播放| 久久久成人免费av电影| 精品亚洲国产成人av网站| 少妇 综合| 国产精品久久久亚洲第一牛牛_在线观看| 强奸国产在线| 亚洲色图欧美色图制服诱惑| AV污污污污| 97操综合| 综合久| 久久中文字幕人妻熟av女蜜柚| 多乙久久久久久| 日韩淫色网| 日韩丰满熟妇| 亚洲激情深爱文学小说网站| 大香蕉免费乱伦视频| 天天操天天7| 天天摸夜夜添无码小视频| 999久久久九| 国产午夜精品理论片一二三区区 | 亚州一区二区成人片免费| 天天摸天天舔天天操| 国产精品自在自拍视频| 深夜视频| 人妻无码后入| 在线观看亚洲专区| 97精品全部| 91亚洲不卡一区| 色色网91| 欧美综合中文| 97亚洲国产影视| 搡老女人老91二区| 亚洲色欲一区二区三区| 国产精品爱欲| 97视频7| 亚洲狠狠入| 九九九九日本| 国产日韩精品人妻久久久久色欲网站| 成人久久精品| 又粗又长又爽在线观看| 久久999久| 成人网站 免费观看| 91天天爽| 台湾佬激情综合| 99热在线播放| 10000部十八禁看电影| 人人操人人干xxx| 99啪啪| 精品在线观看视频在线| 尤物视频偷拍免费| 五月丁香亭亭| A一区片| 免费97视频| 久久久中文| 久久岛国| 91丝袜激情在线| 天堂8在线新版官网| 美女91| 老鸭窝黄色视频网站| 麻豆啪啪啪视频| 91操熟女| 麻豆传媒一区二区在线观看| 中文字幕在线观看视频www| 大象AV在线| 蜜臀无码一区二区| 天天影视色香色欲| av强奸乱轮| 欧美日韩97在线| 久久天天摸| 国产AV久久久蜜爱影集| 精品无码久久久久久久久果冻糖心| 亚洲97p| 九九精品热| 国产中文字幕在线点播| 伊人欧美大香蕉视频| 99999精品成人| 人人插人人搞人人操| 日韩国产精品人妻无码久久久| 亚洲国产剧情少妇激情| 国产1769在线| 一本色道久久综合精品婷婷| 亚洲AV无码久久精品蜜桃小说| 久久久久久AⅤ无码免费肉站| 2024年最新色情网站在线观看| 日本精品九九九| 欧美激情 日韩精品| 另类视频在线| 久久一级无码精品毛片6| 秋霞一级鲁丝片A片| 少妇精品| 老司机福利社视频在线观看| 蜜臀AV成人精品蜜臀| 午夜久久一区二区无码中出| 久操精品网| 日韩欧美字幕亚洲一区二区| 日韩偷拍一区二区三区| 亚洲美女AV无码| 一本久久久精品| 欧美日韩97在线| 97超级欧美| 久插综合| 国产性刺激| 69AV女优男人的天堂| 91ise欧美| 99碰碰| 亚洲色啪| 人成午夜免费大片| 亚洲美女自拍偷拍视频| 午夜视频好爽啊| 黄片qw| 五月天我淫我色av| 日本人妻最新在线中| 超碰碰97资源站| 综合亚洲欧美| 亚春色色| 蜜臀网 一区| 欧美AB在线| 夜夜躁狠狠躁日日躁av| 色悠久| 亚洲图片另类| 狠狠婷婷亚洲中文综合久久| 2017大香蕉| 明星性猛交ⅹxxx乱大交| 2017亚洲天堂| 一级毛片电影免费看| 在线不欧美| aa片毛片| 小说区 图片区色 综合区| 中国熟女老妇仑乱一区二区三区| 97超碰色色| 国产精品视频在线观看| 色99999| 欧洲精品在线播放| 亚州综合AⅤ| 久久久禁| 亚州,欧美在线| 蜜桃久久一区| 精品人妻一区二区免费蜜桃视频| 国产久9| 五十路熟女人妻一区二区三区四区五| 在线视频 亚洲精品| 黄片免费日韩| 欧美极品性爱天天射| 二男一女成人A片| 无码国产精品久久久久| 欧美久久伊人| 成人夜夜爽| 熟女在线视频| 天天拍天| 大香蕉92| 久久内射| 天天躁日日躁AAAAXXXX国产 | 人人搞人人插人人操| 26UUU欧美日本| 国产www色在线观看| 欧美精品999| 人妻天天操天天爽视频免费| 欧美少妇性乱| 玖玖资源视频一区二区三区| 欧美高清第一页| 综合av社区| 国产成人自拍视频在线| 亚洲男人天堂Av| 亚洲AV无码久久精品蜜桃小说| 国产中午字一暮区| 伊人91| 东北丰满熟女国产一区| 极品尤物在线观看| 吉川爱美98堂在线| 啊啊啊啊啊啊啊网址在线观看| 日本不卡一二区| 欧美A片中文字幕| 一起草精品人妻| 狼天天狼天天大香蕉| 久9久精品视频| 不卡六六在线91| 亚洲天天操| 色综合久久88色综合久久天天| 一区二区日韩欧美久久| 亚洲在高跟鞋自慰久久在色线| 亚洲性刺激| 国产乱色国产精品免费视| 精品日韩中文在线| 精品女人999| 国产精品乱码久久久、久久| 亚洲欧美不卡线| 中日韩欧美精品无码AⅤ一区二区| 五月综合色| 粉嫩av一区二区三区四季| 亚洲天天自拍| 青椒国产97在线熟女| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 精品久操| 91伊人久| 人妻熟女午夜精品在线| 日日碰视频网| 日本东京热久久久电影| 久热无码| 懂色av中文字幕一区二区三区天美| 伊人影院日本| 午夜免费视频1000| 亚洲天天影视色综合| 国产精品一区二区a| 欧美日韩操逼嗦吊| 国产精品久久久久久久免牛肉蒲团| 百度百度日本操逼| 免费久久精品麻豆一区二区av| 欧美在线大香蕉| 一起草在线视频| 婷婷激情四射| 人妻激情在线视频| 少妇无码av专区线| 国产一区麻豆免费观看| 亚洲黄色| 五月丁香影院| 国产99999久久精品| 亚洲成人性爱网站在线播放| 五月天丁香| 久久蜜桃一区二区| 成人av动漫在线观看| 日本男人插女人的逼黄色| 亚洲伊人久久综合97| 99综合网| 熟女熟妇一区二区三四区| 强免费黄色网址| 动漫av中文| 国产精品美女久久久久AⅤ国产馆| 久久久久久久一级黄色打同平台| 麻豆av一区二区| 亚洲九九夜夜| 久久久性少妇| 亚洲乱码国产乱码精网站| 大香蕉色欲AV| 99re国产精品视频| 最近2019中文字幕国语免费版| 极品内射| 在线人成亚洲视频免费观看| 啊啊啊好湿久久| 中文字幕三四区| 91丝袜美腿网站| 亚洲电影中字一区二区| 91九久| 欧美人与动性人交a| 青青草九九九九九| 中文乱码字字幕在线第5页| 97蜜桃综合| 99色网| 青青草精品| 日韩激情电影中文字幕| 99热超碰| 人妻精品视频一区二区三区 | 大香蕉强奸乱伦| 亚洲日韩XXX| 国产情侣自拍在线播放| 欧美后入式| 91精品国产麻豆国产自产在| 欧美丝袜中文字幕07在线| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 欧美 亚洲 综合 制服| 日本色色色网站免费看不卡| 国产传媒日本欧美专区| 国产精品一二三区18| 欧美天堂超碰97| 色婷婷九月天天综合| 国产精品3| 婷婷精品| 欧美日韩国产成人高清| 干b在线性社区| 国产高清成人mv在线观看| 亚洲偷91色| 亚洲AV免费在线| 91在线免费精品视频| 蜜臀AV一区二区三区激情综合| 国产不良强奸视频免费看| 试看福利| 日本黄 R色 成 人网站| 天天综合网日韩| 亚洲成人一二三区| 日本视频一区二区三区| 国产蜜臀精品一区二区尤物| 综合色图亚洲欧美| 中文字幕在线观看永久| 97干综合网| 亚洲五月丁香花狠狠干一区二区三区 | 素人一区二区三区日韩| 午夜九九| 亚洲午夜免费狠狠干| 大屁股人妻女教师撅着屁股| 欧美九一精品久久久熟妇| 大香蕉久久| 亚洲小电影免费涩涩成人在线高清| 色悠久久久av| 亚洲有薄码区日本系列中文字幕| 啪啪啪东京| 偷拍亚洲情色| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 久久99人妖视频国产| 亚洲精品97| 91久久堂| 97超碰jingpin| 成人性爱美曰韩| 天天综合-91入口| 91欧美综合在线| 97人肏| 乱伦图一区| 欧美97色| 久热久| 欧美午夜精品久久久久久超碰| 欧美日韩激情无码专区| 9Ⅰ超碰| 91女优在线观看| 久久99综合| 久久精品国产亚洲AV无码做| 人人妻人人爱人人玩| 97精品国产精品免费观看| 色综合一区二区三巨| 亚洲天堂无码| 爱爱动态试试看6 0秒| 99久久久久| 亚洲日韩美国人妻| 精品九九九九九九| 欧美另类天堂| 青青草字幕AV| 亚州色交| 综合色播| 国产成年精品高清在线观看91| 色吧91| 九久久九九久视频| 一区二区三区蜜桃成人撸久久东京热| 天天综合精品| 日本理论在线| 久综合国内精品自在自线| 亚洲综合九九| 91国产丝袜白虎| 97色涩| 日本97久久久精品| 小草三级久久观看| www.99在线| 小情侣高清国产在线视频| 亚州熟女乱伦| 日本不卡一二区| 亚洲第一男人天堂| 久久熟妇五十路一区| 日韩亚洲美女一区久久| 97人人干| 国产av美女被艹的乱叫| 操逼逼中文字幕| 免费?级毛片无码?∨蜜芽试看| 亚洲熟女综合网| 97久久国产精品女不卡| 精品少妇一区二区| 欧美天堂超碰97| 欧美后入视频| 国产二区三区粉嫩在线| 日本少妇va7777| 日本在线不卡一二区| 2019天天干天天操| www.久久最新地址| 日韩一级久久毛片| 久九色| 日本不卡在线二区三区| 久久久月天| 死我十八禁| 久久风骚城市| 免费视频观看60秒| 大香蕉日韩欧美| 精品女同一区二区三区| av橘色网站| 中文字幕欧美精品亚洲日韩蜜臀| 熟妇无码视频三区| 国产伊人精品在线| 久久超碰天天| 日韩大香蕉AV影片| 亚洲熟女av中文字幕| 天天综合网在线91| 国产综合久久久麻桃个| 欧美综合亚洲综合| 色妺妺AⅤ| 亚洲色图欧美一区二区不卡| 国产成人在线观看网址| 另类图片综合| 中文字幕美女91| 久久五十路熟女人妻| 日本免费中文字幕在线| 国产精品一区午夜福利| 高跟丝袜AV专区国产| 日韩亚洲Av人人夜夜澡人人爽| 深田咏美亚洲精品福利社| 天天日天天爽| 美女刺激久久国产欧美| 一区二区三区 丝袜 高跟 美腿| 蜜桃精品一区二区三区ww| 国产久久久9999| 欧洲精品网| 欧美亚洲韩国视频十五区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 国产三级在线现体验区| www.大香| 国产精品久久久久无码AV会牛| 无码自拍SM| 伊人影院中文字幕| 99爱久久视频频| 秋霞鲁丝午夜无码一区二区三| 白嫩91在线亚洲| 亚洲高清在线se| 无码78| 亚洲一区二区三区中文字幕| 免费av大片| 色婷五月| 97爱亚洲综合色| 夜夜嗨老熟女AV一区二区三区| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 日韩人妻中文视频| 午夜免费视频1000| 97国产天堂岛| 日日夜夜青青草母狗| 日韩中文字幕宗合在线| 啊啊啊慢点| 亚洲av国产av综合av卡| 看黄片视频免费| 91亚洲黑人| 加勒比伊人影院| 欧美 亚洲精品首页| 情趣丝袜无码操逼视频| 日本一级性爱| 91精品电影18| 少妇特黄一区二区三区| 国产老太乱伦一区| 婷婷av在线中文字幕| 少妇滛荡视频| 日本一片一区| 欧亚三区动漫| 日韩字幕一区| 婷色五月| 韩日巨乳美女免费视频在线观看| 天天性射网| 中字幕人妻一区二区三区| 亚洲一区日韩| 综合天天网| 青青草公开在线免费不卡视频| 欧美性爱免费短视频| 男人夜色天堂ss| 超碰人妻中文在线| 大奶的诱惑| 最新国产亚洲精品精品国产亚洲综合| 六月丁香网| 亚洲大胆人体av| 国产又黄又粗又猛大片| 日韩午夜啪啪视频| 欧美永久激情一区二区| 日韩99999| 成年人一级黄色毛片大全在线观看| 亚洲日本成人动漫| 日韩欧美中文字亚洲慕| 97人人夜夜精品视频| 国产av高清版| 亚洲精品天天影视综合网| 亚洲脚交| 精品亚洲国产成人精品| 欧美精品人妻视频| 天操天操夜操夜月月年年操操 | 操逼www.| 青娱乐 成人娱乐在线| 午夜毛片高清免费不卡| 91狠狠综| 亚洲欧美精品91| 99草精| 超碰成人最新最好看| 亚州成人A√| 97色色色| 色综合五月天| 91N综合网| 成人aⅴ一区二区三区| 久热精品色情| 中文AV制服乱伦| 天天干,夜夜爽| 欧美人妖内射| 亚卅熟女乱色| 天天综合网亚洲综合网| 日韩乱伦AⅤ| 免费网色网站| 中文字幕一区二区免费在线| 任我爽视频在线观看| 欧美黑人熟妇精品91|