欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

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

迪文串口屏通用驅(qū)動(dòng):三層架構(gòu)與狀態(tài)機(jī)協(xié)議解析

迪文串口屏通用驅(qū)動(dòng):三層架構(gòu)與狀態(tài)機(jī)協(xié)議解析 簡(jiǎn)介面向AVR平臺(tái)的迪文DWIN串口TFT屏通用驅(qū)動(dòng)程序以標(biāo)準(zhǔn)C語(yǔ)言實(shí)現(xiàn)具備良好的可讀性與可移植性配套兩個(gè)文件dwin-display.c負(fù)責(zé)屏幕初始化、點(diǎn)線矩形圓繪制及文本顯示等核心功能dwin-display.h則定義屏幕尺寸、顏色深度等配置結(jié)構(gòu)并開放簡(jiǎn)潔API開發(fā)者只需調(diào)用dwin_init、dwin_draw_pixel、dwin_print_string等接口即可完成顯示控制無需糾結(jié)底層時(shí)序。壓縮包采用rar格式共2個(gè)文件1個(gè)h、1個(gè)c整體僅3KB體量極小、便于直接嵌入AVR工程。該驅(qū)動(dòng)兼容多種迪文屏型號(hào)與分辨率能適配工業(yè)控制、智能家居、物聯(lián)網(wǎng)等場(chǎng)景同時(shí)通過閱讀源碼還可掌握迪文屏SPI/UART串口通信的參數(shù)配置及GPIO連接方法為后續(xù)性能優(yōu)化和低功耗設(shè)計(jì)提供參考。目前已有831人學(xué)習(xí)下載適合嵌入式開發(fā)者快速上手。1. 迪文串口TFT屏通用驅(qū)動(dòng)從改三次串口解析到一套代碼通吃前兩年做一個(gè)產(chǎn)線設(shè)備儀表項(xiàng)目主控從某51單片機(jī)換到STM32又因?yàn)樾酒?yīng)問題換到國(guó)產(chǎn)GD32每次換主控顯示部分的串口解析都要從頭改一遍。屏幕始終沒換都是迪文DWIN的串口TFT但每版代碼里拼幀、拆幀、等返回的邏輯都和業(yè)務(wù)混在一起越改越不敢動(dòng)。后來我把這塊屏的通信單獨(dú)抽成一套通用驅(qū)動(dòng)傳輸層只收發(fā)字節(jié)協(xié)議層只解析幀應(yīng)用層只寫業(yè)務(wù)。換主控時(shí)只改兩個(gè)端口函數(shù)頁(yè)面和變量地址一行不用動(dòng)。如果你正在做工業(yè)HMI、儀器儀表、設(shè)備面板被迪文屏的DGUS協(xié)議、變量字節(jié)序和返回幀解析折磨過這套驅(qū)動(dòng)和它的拆分思路可以直接抄走。2. 架構(gòu)與目錄設(shè)計(jì)把驅(qū)動(dòng)拆成傳輸、協(xié)議、應(yīng)用三層2.1 為什么必須分三層迪文屏本質(zhì)上是帶DGUS操作系統(tǒng)的顯示終端。屏幕內(nèi)部的串口接收、幀校驗(yàn)、字庫(kù)和FLASH存儲(chǔ)全部封裝在屏里主控能控制的只有串口上的一幀一幀字節(jié)。所以驅(qū)動(dòng)能不能復(fù)用取決于“發(fā)字節(jié)”“幀長(zhǎng)什么樣”“收到幀之后干什么”這三件事有沒有被拆開。我見過比較多反例是直接把屏幕通信寫在業(yè)務(wù)里測(cè)溫函數(shù)里拼一個(gè)數(shù)組塞給串口按鍵回調(diào)里再寫一段解析。頁(yè)面一多全局?jǐn)?shù)組和臨時(shí)標(biāo)志位纏在一起排查一個(gè)亂碼要打好幾個(gè)斷點(diǎn)。分層之后驅(qū)動(dòng)和MCU外設(shè)解耦也和應(yīng)用業(yè)務(wù)解耦這是整個(gè)驅(qū)動(dòng)設(shè)計(jì)的底線。順帶說一句回調(diào)不能放到串口中斷里直接執(zhí)行。因?yàn)榛卣{(diào)里一旦出現(xiàn)耗時(shí)操作比如寫日志、翻轉(zhuǎn)繼電器中斷響應(yīng)時(shí)間就會(huì)被拖長(zhǎng)后續(xù)字節(jié)跟著丟。所以整個(gè)驅(qū)動(dòng)的原則是中斷只入FIFO業(yè)務(wù)回調(diào)全部放到 dwin_poll 里執(zhí)行。這么做還有個(gè)衍生好處將來接RTOS時(shí)可以把 dwin_poll 單獨(dú)放一個(gè)任務(wù)用戶不用關(guān)心臨界區(qū)。2.2 目錄結(jié)構(gòu)與模塊定位驅(qū)動(dòng)源碼內(nèi)部是這樣組織的dwin_drv/ ├── dwin_config.h // 幀格式、波特率、校驗(yàn)開關(guān)、超時(shí)參數(shù) ├── dwin_port.h // 移植層接口聲明 ├── dwin_port.c // 串口收發(fā)、毫秒時(shí)間戳換平臺(tái)只改這里 ├── dwin_fifo.c // 環(huán)形緩沖區(qū)串口中斷到解析器的中轉(zhuǎn) ├── dwin_proto.c // 幀組裝、幀解析狀態(tài)機(jī)、校驗(yàn) ├── dwin_core.c // 對(duì)外API、回調(diào)表、事件分發(fā) └── demo/ ├── demo_stm32_uart.c └── demo_rtos_thread.cdwin_config.h 是整個(gè)驅(qū)動(dòng)的參數(shù)總閘。幀模式舊版AA幀還是新版5A A5幀、是否啟用校驗(yàn)、波特率、接收空閑超時(shí)時(shí)間都放在這里調(diào)屏幕型號(hào)時(shí)第一件事就是改這個(gè)頭文件。dwin_fifo.c 是典型的環(huán)形緩沖區(qū)串口中斷只做一步操作把字節(jié)壓進(jìn)FIFO主循環(huán)里的 dwin_poll() 再?gòu)腇IFO取字節(jié)喂給狀態(tài)機(jī)。這個(gè)設(shè)計(jì)保證中斷里沒有耗時(shí)邏輯也不丟字節(jié)。dwin_proto.c 是這個(gè)驅(qū)動(dòng)最核心的文件。它負(fù)責(zé)把“寫變量、讀變量、寫文本、跳頁(yè)”請(qǐng)求拼成符合屏幕協(xié)議的一幀同時(shí)把屏幕返回的原始字節(jié)流還原成帶指令號(hào)、地址、數(shù)據(jù)的數(shù)據(jù)包。dwin_core.c 站在更上層對(duì)外暴露簡(jiǎn)潔的API比如 dwin_write_uint16(0x1000, val, 1)內(nèi)部先查配置再調(diào)協(xié)議層拼幀最后經(jīng)端口層發(fā)出去。這樣換屏幕型號(hào)時(shí)應(yīng)用層調(diào)用的接口可以完全不變。2.3 對(duì)外接口設(shè)計(jì)6個(gè)函數(shù)覆蓋90%場(chǎng)景dwin_core 對(duì)外提供的核心API如下表函數(shù)作用關(guān)鍵參數(shù)說明dwin_init初始化協(xié)議棧、清空回調(diào)表和FIFO無dwin_poll主循環(huán)周期調(diào)用處理FIFO中的字節(jié)無dwin_write_uint16向變量地址寫1到N個(gè)字起始地址、數(shù)據(jù)指針、字?jǐn)?shù)dwin_read_uint16向屏幕發(fā)出讀變量請(qǐng)求起始地址、字?jǐn)?shù)dwin_set_text給文本控件寫入字符串地址、字符串、長(zhǎng)度dwin_register_callback注冊(cè)返回幀與按鍵上報(bào)回調(diào)事件類型、回調(diào)函數(shù)指針dwin_write_uint16 是使用頻率最高的函數(shù)。溫度、速度、計(jì)數(shù)值這類數(shù)據(jù)在DGUS工程里綁定到一個(gè)整數(shù)數(shù)據(jù)變量顯示控件驅(qū)動(dòng)往對(duì)應(yīng)的變量地址寫一個(gè)字屏幕自動(dòng)刷新。dwin_set_text 適合給標(biāo)簽控件寫單位或狀態(tài)文字它內(nèi)部會(huì)把字符串放到幀數(shù)據(jù)區(qū)。這里要多留一個(gè)心眼中文字符串必須按屏幕燒錄時(shí)的編碼一般是GB2312發(fā)送否則顯示亂碼。dwin_read_uint16 是異步的發(fā)出請(qǐng)求之后不能立刻拿到結(jié)果數(shù)據(jù)要等屏幕返回幀到了、回調(diào)被觸發(fā)后才能拿到。這個(gè)異步語(yǔ)義很多第一次接觸的人會(huì)踩坑所以驅(qū)動(dòng)里專門做了回調(diào)注冊(cè)機(jī)制。2.4 數(shù)據(jù)流向一次dwin_write_uint16調(diào)用經(jīng)歷了什么以寫一個(gè)變量為例完整鏈路是應(yīng)用層拿到數(shù)值 val125調(diào)用 dwin_write_uint16(0x1000, val, 1)dwin_core 把 125 拆成兩個(gè)字節(jié)高位 0x00 在前、低位 0x7D 在后dwin_proto 的幀組裝函數(shù)把這個(gè)數(shù)據(jù)連同指令碼 0x82、地址 0x1000 拼成一幀最后 dwin_port_send 把整幀發(fā)給屏幕。由于串口是流式的所以高位先發(fā)。接收方向是異步的。屏幕收到讀變量請(qǐng)求后返回一幀包含變量值的數(shù)據(jù)串口中斷把字節(jié)塞進(jìn)FIFO主循環(huán)調(diào)用 dwin_poll 時(shí)逐字節(jié)解析完整幀解析出來之后按指令號(hào)匹配回調(diào)。所以 dwin_poll 必須被周期性調(diào)用這一點(diǎn)恰恰是移植時(shí)最容易被忽略的只在初始化時(shí)調(diào)一次接收永遠(yuǎn)不會(huì)觸發(fā)。在RTOS環(huán)境下dwin_poll 適合放在一個(gè)獨(dú)立線程里循環(huán)調(diào)用用戶回調(diào)也在該線程執(zhí)行不會(huì)阻塞中斷也不會(huì)和業(yè)務(wù)線程搶串口。3. 核心模塊拆解幀組裝、狀態(tài)機(jī)解析與回調(diào)分發(fā)3.1 幀格式新舊兩套協(xié)議并存迪文屏協(xié)議在不同固件版本間差異不小驅(qū)動(dòng)里遇到最多的是兩種舊版以 0xAA 開頭的幀和新版以 5A A5 開頭的幀。兩者都是“幀頭長(zhǎng)度指令變量地址數(shù)據(jù)校驗(yàn)”的結(jié)構(gòu)但長(zhǎng)度字段包含的范圍不同校驗(yàn)方式也可能不同。驅(qū)動(dòng)通過編譯期宏選擇幀模式/* dwin_config.h */ #define DWIN_FRAME_MODE_NEW 1 /* 1: 5A A5幀; 0: 舊版AA幀 */ #define DWIN_FRAME_LEN_INCLUDE_CMD 1 /* 長(zhǎng)度字段是否包含指令本身 */ #define DWIN_FRAME_TAIL_SUM 1 /* 幀尾是否附帶求和校驗(yàn) */先看 5A A5 模式的幀結(jié)構(gòu)一個(gè)完整的寫變量幀是這樣字段字節(jié)數(shù)說明0x5A 0xA52幀頭長(zhǎng)度2從指令字節(jié)到數(shù)據(jù)末尾的字節(jié)數(shù)小端指令10x82寫變量、0x83讀變量、0x84寫文本地址2DGUS變量地址高字節(jié)在前數(shù)據(jù)N實(shí)際數(shù)據(jù)校驗(yàn)1對(duì)指令、地址、數(shù)據(jù)求和取低字節(jié)需要提醒的是具體型號(hào)的固件對(duì)長(zhǎng)度字段的含法、校驗(yàn)形式可能有差異。拿到屏之后要先看它隨附的DGUS協(xié)議手冊(cè)再?zèng)Q定 DWIN_FRAME_LEN_INCLUDE_CMD 置1還是置0。這個(gè)配置對(duì)不上時(shí)通常就是手冊(cè)和代碼沒統(tǒng)一。3.2 發(fā)送端可變長(zhǎng)幀組裝函數(shù)幀組裝函數(shù)是發(fā)送側(cè)的核心。它把指令、地址、數(shù)據(jù)三個(gè)部分拼成完整幀并自動(dòng)處理長(zhǎng)度字段和校驗(yàn)。uint16_t dwin_build_frame(uint8_t *buf, uint8_t cmd, uint16_t addr, const uint8_t *data, uint16_t data_len) { uint16_t i 0; #if DWIN_FRAME_MODE_NEW buf[i] 0x5A; /* 幀頭 */ buf[i] 0xA5; #else buf[i] 0xAA; #endif uint16_t len 0; len 1; /* 指令占1字節(jié) */ len 2; /* 地址占2字節(jié) */ len data_len; /* 數(shù)據(jù)區(qū) */ if (DWIN_FRAME_LEN_INCLUDE_CMD) { /* 長(zhǎng)度從指令開始算上面len已經(jīng)包含指令 */ } else { len - 1; /* 長(zhǎng)度不包含指令 */ } len DWIN_FRAME_TAIL_SUM ? 1 : 0; /* 校驗(yàn)字節(jié)計(jì)入長(zhǎng)度 */ #if DWIN_FRAME_MODE_NEW buf[i] len 0xFF; /* 長(zhǎng)度低字節(jié)在前 */ buf[i] (len 8) 0xFF; #else buf[i] len 0xFF; /* 舊版按單字節(jié)長(zhǎng)度處理 */ #endif buf[i] cmd; /* 指令 */ buf[i] addr 8; /* 地址高字節(jié) */ buf[i] addr 0xFF; /* 地址低字節(jié) */ uint8_t sum cmd (uint8_t)(addr 8) (uint8_t)(addr 0xFF); for (uint16_t j 0; j data_len; j) { sum data[j]; buf[i] data[j]; } if (DWIN_FRAME_TAIL_SUM) { buf[i] sum; /* 求和校驗(yàn) */ } return i; /* 返回整幀長(zhǎng)度 */ }這段代碼最需要注意的地方是長(zhǎng)度字段的計(jì)算。它把指令、地址、數(shù)據(jù)三部分相加再根據(jù)宏決定是否去掉指令字節(jié)、是否加上校驗(yàn)字節(jié)。如果你在實(shí)測(cè)中發(fā)現(xiàn)屏幕對(duì)長(zhǎng)度字段理解不一致問題幾乎都出在這三個(gè)宏的組合上。數(shù)據(jù)區(qū)按順序拷貝后校驗(yàn)字節(jié)使用最樸素的求和取低字節(jié)如果屏幕手冊(cè)要求CRC只需把這一段替換成CRC函數(shù)。3.3 接收端狀態(tài)機(jī)拆幀而不是等完整中斷接收側(cè)我習(xí)慣用一個(gè)輕量狀態(tài)機(jī)而不是在串口中斷里攢數(shù)組。狀態(tài)機(jī)的優(yōu)勢(shì)是隨時(shí)可以從噪聲中重新同步到幀頭不需要額外空閑定時(shí)器去判斷“一幀結(jié)束了”。typedef enum { ST_WAIT_5A 0, ST_WAIT_A5, ST_WAIT_LEN_L, ST_WAIT_LEN_H, ST_WAIT_CMD, ST_WAIT_DATA } dwin_parse_state_t; typedef struct { dwin_parse_state_t state; uint16_t len; /* 幀體總長(zhǎng)度含指令與數(shù)據(jù) */ uint16_t idx; /* 已接收字節(jié)數(shù) */ uint8_t buf[64]; /* 幀體緩沖 */ uint8_t cmd; uint32_t last_byte_tick; /* 上次收到字節(jié)的時(shí)間戳 */ } dwin_parser_t;解析函數(shù)逐字節(jié)輸入每收到一個(gè)字節(jié)驅(qū)動(dòng)狀態(tài)機(jī)往前步進(jìn)uint8_t dwin_parse_fsm(dwin_parser_t *p, uint8_t ch) { switch (p-state) { case ST_WAIT_5A: if (ch 0x5A) p-state ST_WAIT_A5; break; case ST_WAIT_A5: p-state (ch 0xA5) ? ST_WAIT_LEN_L : ST_WAIT_5A; break; case ST_WAIT_LEN_L: p-len ch; p-state ST_WAIT_LEN_H; break; case ST_WAIT_LEN_H: p-len | (uint16_t)ch 8; p-idx 0; p-state ST_WAIT_CMD; break; case ST_WAIT_CMD: p-cmd ch; p-buf[p-idx] ch; p-state ST_WAIT_DATA; break; case ST_WAIT_DATA: p-buf[p-idx] ch; if (p-idx p-len) { /* 收滿整個(gè)幀體 */ p-state ST_WAIT_5A; return 1; } break; default: p-state ST_WAIT_5A; break; } return 0; }這里需要特別說明 ST_WAIT_CMD 和 ST_WAIT_DATA 的區(qū)別。ST_WAIT_CMD 只收一個(gè)字節(jié)也就是指令碼ST_WAIT_DATA 則繼續(xù)收剩余的幀體字節(jié)包括地址和數(shù)據(jù)。當(dāng) idx 累加到等于 len 時(shí)說明一幀完整到達(dá)此時(shí)返回1dwin_poll 會(huì)把幀體交給回調(diào)分發(fā)函數(shù)。如果中途插入噪聲字節(jié)狀態(tài)機(jī)會(huì)回到 ST_WAIT_5A 重新找?guī)^不會(huì)把錯(cuò)位數(shù)據(jù)當(dāng)成有效幀。注意幀體緩沖 buf 默認(rèn)64字節(jié)如果屏幕有超過60字節(jié)數(shù)據(jù)的返回幀記得把數(shù)組加大否則會(huì)越界覆蓋。3.4 超時(shí)復(fù)位給狀態(tài)機(jī)一條后悔藥狀態(tài)機(jī)雖然能自動(dòng)找回幀頭但有一種情況很讓人抓狂屏幕回幀還沒收完線纜抖了一下從此后續(xù)所有字節(jié)都錯(cuò)位。所以我加了一個(gè)接收超時(shí)機(jī)制。dwin_poll 每次被調(diào)用時(shí)會(huì)順便檢查當(dāng)前幀是否太久沒有新字節(jié)到達(dá)超時(shí)就強(qiáng)制復(fù)位。void dwin_poll(void) { dwin_parser_t *p g_parser; uint32_t now dwin_port_get_tick_ms(); if (now - p-last_byte_tick DWIN_RX_TIMEOUT_MS) { p-state ST_WAIT_5A; /* 超時(shí)狀態(tài)機(jī)回到等幀頭 */ p-idx 0; } while (!dwin_fifo_is_empty(g_fifo)) { uint8_t ch dwin_fifo_pop(g_fifo); p-last_byte_tick dwin_port_get_tick_ms(); if (dwin_parse_fsm(p, ch)) { dwin_dispatch(p); } } }超時(shí)時(shí)間我一般設(shè)5ms因?yàn)槠聊辉?15200波特率下發(fā)送幾十字節(jié)的返回幀耗時(shí)都在1ms以內(nèi)5ms足夠?qū)捲S植粫?huì)讓噪聲長(zhǎng)時(shí)間影響狀態(tài)機(jī)。移植到不同平臺(tái)時(shí)dwin_port_get_tick_ms 是唯一需要新增的時(shí)間函數(shù)很多MCU的SysTick就能提供。這個(gè)“超時(shí)復(fù)位”解決的是串口屏項(xiàng)目里非常典型的玄學(xué)問題線纜質(zhì)量不好時(shí)明明引腳沒接錯(cuò)程序卻間歇性收不到回調(diào)。3.5 回調(diào)分發(fā)把幀體翻譯成業(yè)務(wù)語(yǔ)義完整幀進(jìn)入 dispatch 后還需要從協(xié)議層視角翻譯成業(yè)務(wù)事件。驅(qū)動(dòng)維護(hù)一張回調(diào)表調(diào)用方可以針對(duì)不同事件注冊(cè)處理函數(shù)typedef struct { uint8_t cmd; uint16_t addr; uint8_t *data; uint16_t len; } dwin_pkt_t; typedef void (*dwin_callback_t)(const dwin_pkt_t *pkt); static dwin_callback_t s_cb_table[8]; void dwin_register_callback(dwin_evt_id_t evt, dwin_callback_t cb) { if (evt 8) s_cb_table[evt] cb; } static void dwin_dispatch(dwin_parser_t *p) { dwin_pkt_t pkt; pkt.cmd p-buf[0]; pkt.addr (uint16_t)((p-buf[1] 8) | p-buf[2]); pkt.data p-buf[3]; pkt.len p-len - 3; /* 從總長(zhǎng)度中去掉指令和地址 */ if (pkt.cmd DWIN_CMD_READ_ANSWER s_cb_table[DWIN_EVT_READ]) { s_cb_table[DWIN_EVT_READ](pkt); } }調(diào)用方使用時(shí)只需要關(guān)心“某個(gè)事件到了我該做什么”而不用關(guān)心幀是怎么收上來的。比如屏幕上的按鍵控件在DGUS工程里配置好上報(bào)功能后按下時(shí)屏幕會(huì)主動(dòng)回一幀驅(qū)動(dòng)解析出地址和值觸發(fā) DWIN_EVT_KEY 回調(diào)應(yīng)用層在回調(diào)里判斷地址屬于哪個(gè)按鍵再執(zhí)行對(duì)應(yīng)邏輯。4. 運(yùn)行指南從移植到點(diǎn)亮第一塊屏4.1 移植層只改兩個(gè)半函數(shù)驅(qū)動(dòng)把和硬件相關(guān)的部分收攏在 dwin_port.c 里換平臺(tái)時(shí)只需要實(shí)現(xiàn)四個(gè)簡(jiǎn)單函數(shù)初始化、發(fā)送字節(jié)數(shù)組、接收一個(gè)字節(jié)、獲取tick。/* dwin_port.h */ void dwin_port_init(uint32_t baud); void dwin_port_send(uint8_t *buf, uint16_t len); uint8_t dwin_port_get_char(void); /* 從FIFO取一個(gè)字節(jié)無數(shù)據(jù)返回0 */ uint32_t dwin_port_get_tick_ms(void); /* 毫秒時(shí)間戳 */以STM32為例串口初始化用USART1115200波特率8位數(shù)據(jù)、無校驗(yàn)、一位停止位。發(fā)送函數(shù)就是循環(huán)寫發(fā)送寄存器void dwin_port_send(uint8_t *buf, uint16_t len) { for (uint16_t i 0; i len; i) { while (!LL_USART_IsActiveFlag_TXE(USART1)); LL_USART_TransmitData8(USART1, buf[i]); } }接收方向不是輪詢要走中斷。串口中斷里只做一件事把收到的字節(jié)壓進(jìn)FIFOvoid USART1_IRQHandler(void) { if (LL_USART_IsActiveFlag_RXNE(USART1)) { uint8_t ch LL_USART_ReceiveData8(USART1); dwin_port_on_rx_byte(ch); /* 內(nèi)部就是 fifo_push */ } }dwin_port_get_char 則從同一個(gè)FIFO取字節(jié)。連接屏幕時(shí)三根線必須共地屏幕TXD接MCU的RXRXD接MCU的TX如果屏幕是5V邏輯而MCU是3.3V需要電平轉(zhuǎn)換否則長(zhǎng)時(shí)間運(yùn)行可能出現(xiàn)隨機(jī)錯(cuò)誤幀。這個(gè)細(xì)節(jié)在項(xiàng)目現(xiàn)場(chǎng)踩了不止一次。注意屏幕供電別和主控共用帶強(qiáng)干擾的電源電機(jī)啟停時(shí)屏幕容易重啟串口也會(huì)跟著丟數(shù)據(jù)。4.2 最小跑通讓屏幕顯示一個(gè)每秒變化的數(shù)驅(qū)動(dòng)移植完成后最小可運(yùn)行工程非常短。前提是你在DGUS軟件里建好工程把某個(gè)數(shù)據(jù)變量顯示控件綁定到變量地址 0x1000并把工程下載到屏幕。然后主循環(huán)里這樣寫#include dwin_drv.h int main(void) { dwin_port_init(115200); dwin_init(); uint16_t counter 0; while (1) { counter; dwin_write_uint16(0x1000, counter, 1); dwin_poll(); hal_delay_ms(1000); } }這段代碼干的活就是每秒把 counter 的值通過串口寫到0x1000地址屏幕上的數(shù)據(jù)變量顯示控件讀到新值后刷新顯示。如果0x1000被當(dāng)成字節(jié)地址而不是字地址顯示就會(huì)錯(cuò)亂因?yàn)镈GUS的變量地址是字地址一個(gè)地址對(duì)應(yīng)兩個(gè)字節(jié)。跑通這一步證明通信鏈路沒問題。接下來再試讀變量、寫文本、處理按鍵上報(bào)就水到渠成。注意主循環(huán)里不能沒有 dwin_poll()否則接收方向的按鍵上報(bào)和讀變量返回永遠(yuǎn)不處理。4.3 先離線驗(yàn)證再上驅(qū)動(dòng)代碼每次拿到一塊新屏我建議先別直接燒驅(qū)動(dòng)先用USB轉(zhuǎn)TTL加串口助手在PC上把屏幕的協(xié)議摸清楚。操作步驟是USB轉(zhuǎn)TTL的TXD接屏幕RXDRXD接屏幕TXD共地串口助手選HEX發(fā)送波特率先設(shè)115200手動(dòng)發(fā)一條讀版本號(hào)指令觀察返回幀內(nèi)容。讀版本號(hào)指令一般是 0x80 或 0x81不同固件定義不同。完全可以在串口助手先輸入5A A5 04 80 00 00 00 01如果這條指令格式正確屏幕會(huì)回一幀包含固件版本的報(bào)文。這里的幀長(zhǎng)度和校驗(yàn)要和屏幕手冊(cè)逐字節(jié)核對(duì)核對(duì)通過后再把這套格式用到驅(qū)動(dòng)配置里。很多人跳過了這個(gè)驗(yàn)證步驟直接拿驅(qū)動(dòng)代碼燒進(jìn)去然后花兩小時(shí)懷疑是波特率還是電平問題其實(shí)問題只是長(zhǎng)度字段差了一個(gè)字節(jié)。4.4 運(yùn)行配置參數(shù)一覽配置項(xiàng)推薦值說明波特率115200或屏幕實(shí)際設(shè)置屏幕上的OS參數(shù)也要一致DWIN_FRAME_MODE_NEW按屏固件選新版固件用1DWIN_RX_TIMEOUT_MS5空閑超時(shí)狀態(tài)機(jī)復(fù)位用FIFO大小128字節(jié)大于最長(zhǎng)返回幀校驗(yàn)方式求和或按手冊(cè)改不匹配時(shí)幀會(huì)被解析成噪聲還有一個(gè)常見的誤解是波特率越高越好。其實(shí)屏幕DGUS在處理某些長(zhǎng)數(shù)據(jù)時(shí)發(fā)送間隔比波特率更影響穩(wěn)定性。波特率拉到921600看上去很酷但批量寫變量時(shí)丟幀概率明顯上升因?yàn)槠聊欢私馕鏊俣雀簧?。工控?chǎng)景我一般穩(wěn)定在115200幀間隔留夠比硬上高頻更可靠。5. 避坑指南串口屏調(diào)試中的高頻踩坑記錄5.1 屏幕上電白屏串口收發(fā)毫無反應(yīng)現(xiàn)象程序燒進(jìn)去屏幕白屏或停在開機(jī)頁(yè)串口助手發(fā)任何指令都不回顯。原因最常見的是波特率不一致。屏幕內(nèi)部OS和DGUS配置里的波特率與主控串口初始化不一致有的固件默認(rèn)9600有的默認(rèn)115200還有一部分屏在上電時(shí)必須先收到正確的幀頭才開放通信。解決先用串口助手從9600到921600逐個(gè)波特率發(fā)送讀版本指令看哪個(gè)波特率能收到返回幀。確認(rèn)后再改 dwin_config.h 里的波特率配置并把屏幕端配置一并改到一致。如果是新屏可以在DGUS軟件里檢查工程和OS的波特率設(shè)置。5.2 顯示正常但批量寫變量時(shí)偶爾丟數(shù)現(xiàn)象單獨(dú)寫一個(gè)變量沒問題一次性寫十幾個(gè)變量總有一兩個(gè)變量沒有被刷新。原因連續(xù)的幀間隔太短屏幕DGUS解析來不及處理。串口發(fā)送雖然是流式的但屏幕端需要時(shí)間把收到的幀解析、寫變量、刷新顯示尤其圖庫(kù)較大的頁(yè)面處理耗時(shí)更長(zhǎng)。解決驅(qū)動(dòng)里在每幀發(fā)送之間加2到5ms延時(shí)并且把相鄰地址的寫入合并成一次寫多個(gè)字。迪文屏的變量地址是連續(xù)的0x1000到0x1007這8個(gè)地址可以一次幀寫8個(gè)16位字網(wǎng)絡(luò)開銷小很多也比分幀發(fā)送穩(wěn)定。我在驅(qū)動(dòng)里封裝了按地址段批量寫的接口遇到需要整塊刷新的儀表盤數(shù)據(jù)時(shí)切到批量寫。5.3 讀回來的變量值和屏上看到的不一致現(xiàn)象屏幕上顯示125驅(qū)動(dòng)讀回來的數(shù)值卻是32000或者錯(cuò)開2個(gè)字節(jié)。原因DGUS變量地址是16位字地址讀一個(gè)變量返回一個(gè)字兩字節(jié)高字節(jié)在前。如果驅(qū)動(dòng)按字節(jié)去解析比如把返回的兩個(gè)字節(jié)當(dāng)成兩個(gè)8位數(shù)據(jù)就會(huì)錯(cuò)位。另一個(gè)常見原因是地址計(jì)算錯(cuò)誤0x1000到0x1002差兩個(gè)地址實(shí)際上是兩個(gè)字中間隔4個(gè)字節(jié)。解決讀變量時(shí)明確按字來申請(qǐng)數(shù)據(jù)解析統(tǒng)一用 uint16_t 數(shù)組高位在前。我在驅(qū)動(dòng)里讀變量回調(diào)用的是 uint16_t 指針不提供按字節(jié)解析的接口從源頭避免這個(gè)錯(cuò)誤。另外DGUS工程里變量地址通常從0x1000往上分配建議在項(xiàng)目文檔里建一張變量地址分配表不然過兩周就忘了0x1000是哪一路溫度。5.4 狀態(tài)機(jī)被干擾幀卡住回調(diào)忽然不再觸發(fā)現(xiàn)象系統(tǒng)運(yùn)行幾小時(shí)后按鍵回調(diào)徹底不響應(yīng)重新上電又好了。原因串口線或電源質(zhì)量差導(dǎo)致某個(gè)噪聲字節(jié)破壞了正在解析的半幀。狀態(tài)機(jī)沒有超時(shí)復(fù)位就一直卡在等數(shù)據(jù)的錯(cuò)誤狀態(tài)后續(xù)任何幀都跟不上。解決驅(qū)動(dòng)里增加接收超時(shí)復(fù)位就是前面 dwin_poll 里那段邏輯超過5ms沒有新字節(jié)強(qiáng)制回到等幀頭狀態(tài)。這個(gè)功能一定要在量產(chǎn)版本里保留否則現(xiàn)場(chǎng)電源波動(dòng)一次機(jī)器就得斷電重啟這是工業(yè)環(huán)境里最典型的玄學(xué)故障之一。5.5 用DMA接收數(shù)據(jù)錯(cuò)亂中斷逐字節(jié)模式卻正?,F(xiàn)象把串口接收改成DMA加空閑中斷后返回幀偶爾順序錯(cuò)亂甚至出現(xiàn)幀頭被誤判成數(shù)據(jù)。原因最常見的是調(diào)試時(shí)自發(fā)自收。USB轉(zhuǎn)TTL的TXD和RXD接反或者把主控的TX接到了調(diào)試串口上導(dǎo)致主控自己發(fā)送的字節(jié)被DMA收進(jìn)來。DMA方式和中斷方式的區(qū)別在于中斷模式會(huì)過濾掉一部分自發(fā)字節(jié)而DMA會(huì)把所有字節(jié)都收進(jìn)緩沖區(qū)問題暴露得更明顯。解決先確認(rèn)物理接線三線共地DMA調(diào)試階段在接收路徑上加一個(gè)環(huán)回抑制發(fā)送期間關(guān)閉接收方向發(fā)送完成后恢復(fù)。如果屏幕和主控電平不匹配也會(huì)出現(xiàn)類似現(xiàn)象這時(shí)需要加電平轉(zhuǎn)換電路而不是調(diào)大波特率。6. 二次開發(fā)從通用驅(qū)動(dòng)長(zhǎng)出自己的業(yè)務(wù)專屬驅(qū)動(dòng)6.1 擴(kuò)展指令映射表驅(qū)動(dòng)把指令號(hào)和業(yè)務(wù)語(yǔ)義解耦之后新增屏幕功能只需要擴(kuò)展一張指令映射表和一個(gè)分發(fā)分支。我習(xí)慣把屏幕所有可用指令集中定義在一張表里typedef struct { uint8_t cmd; const char *name; } dwin_cmd_map_t; static const dwin_cmd_map_t s_cmd_map[] { { 0x82, write_var }, { 0x83, read_var }, { 0x84, write_text }, { 0x90, jump_page }, { 0x00, NULL } };增加新功能時(shí)比如要支持屏幕固件里的曲線數(shù)據(jù)上傳只需要在表里加一條{ 0x91, upload_curve }然后在 dispatch 里加一個(gè)路由分支。好處是新人接手時(shí)掃一眼這張表就能知道驅(qū)動(dòng)支持哪些操作不用翻代碼。6.2 把驅(qū)動(dòng)搬進(jìn)RTOS線程如果項(xiàng)目里用FreeRTOSdwin_poll 可以放進(jìn)一個(gè)獨(dú)立線程接收中斷仍然只負(fù)責(zé)字節(jié)進(jìn)FIFOvoid dwin_task(void *arg) { for (;;) { dwin_poll(); osDelay(1); } }發(fā)送路徑需要保護(hù)。驅(qū)動(dòng)內(nèi)部組裝幀用的是靜態(tài)緩沖跨線程調(diào)用時(shí)兩個(gè)線程可能同時(shí)往緩沖區(qū)里寫導(dǎo)致幀頭和數(shù)據(jù)錯(cuò)開。我的做法是對(duì) dwin_send 加一個(gè)互斥鎖把“組裝加發(fā)送”作為一個(gè)臨界區(qū)。接收側(cè)不受影響因?yàn)镕IFO是單生產(chǎn)者單消費(fèi)者模型中斷是唯一生產(chǎn)者dwin_poll 是唯一消費(fèi)者。6.3 驗(yàn)證方法先回環(huán)后聯(lián)調(diào)二次開發(fā)每次改完協(xié)議層我都先做回環(huán)測(cè)試不接屏幕把主控的TXD直接接到自己的RXD自發(fā)自收一幀驗(yàn)證組裝和解析能對(duì)上。這一步能分辨問題是出在驅(qū)動(dòng)還是屏幕上。回環(huán)通過后再接屏幕跑一遍變量讀寫和全部回調(diào)。從那以后我每換一個(gè)屏型號(hào)第一件事永遠(yuǎn)是串口助手手動(dòng)發(fā)讀版本指令確認(rèn)幀格式再動(dòng)驅(qū)動(dòng)代碼這套流程幫我省掉的調(diào)試時(shí)間遠(yuǎn)比想象中多。希望這些拆分和調(diào)試習(xí)慣能幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
超碰人人色| 丁香六月视频免费观看| 丁香九月激情| 婷婷丁香射射| 国产日韩精品SUV| 五月婷婷色男女| 狠狠精品干练久久久无码中文字幕| 操一区| 六月婷婷激情| 丁香五月欧美| 天天射影视综合网| 超碰97色| 噜噜噜狠狠色综合| 很很干在线视频| 办公室少妇激情呻吟A片在线观看| 天天骑日日爽| www,99视频| 五月丁香激情深爱婷婷| 人妻激情视频| 丁香五月天堂网| 久久亚洲色导航| 激情五月婷黄版| 九热免费视频| 精品无码久久久久久久久| 五月激情网五月综合网| 97操碰免费视频| 婷婷五月丁香综合激情| 午夜婷婷丁香| 激情综合九| 五日激情综合| 丁香丁香激情网| 久久视频在线视频| 婷婷亚洲五月| 99在线观看亚洲| 国产肥白大熟妇BBBB视频| 激情综合色五月六月婷婷| 五月天,激情四射,婷婷频道| 久久日九九| AV色婷婷| 五月丁香六月婷婷操操操| 免费九九热| 99精品在线| 丁香婷婷少妇| 婷婷瑟五月天久久综合| 色综合色综合色综合| 婷婷色激情网| 九九性爱网| 久久久久久久久久婷婷| 欧美性丁香色色五月天干干| 丁香六月综合| 一区二区免费看| 天天操天天插天天射| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久人妻超碰一区| 久草视频一,二三四| 99综合| 人人摸人人搞| 操操精品| 欧美色色干| 五月天激情综合| 久久人妻熟女一区二区| 大香网伊人久久综合| 成人短视频在线| 成人色五月天| 五月婷在线影院| 在线视频你懂得| 午夜电影网VA内射| 五月天综合影院| 涩婷婷五月天在线精品视频| 色播五月婷婷| 五月天社区婷婷| 久cao香蕉影院| 精品少妇人妻AV无码专区偷人 | 2025天天日爽| 五月天激情视频| 夜夜爱网站| 久久人人九九| 99热偷拍| 超碰在线个人观看| 五月婷婷婷| 另类的婷婷| 噜噜久| 婷婷五月花西瓜| 玖玖资源站中文| 婷婷五月精品中文字幕| 色色婷婷五月天| 中文av网站| 中文字幕av久久爽| 97在线精品| 久久这里只有国产视频| 五月激情六月综合| 九色成人AV在线| 国产伊人大香蕉| 亚洲AV网址| 欧美狠狠草| 九九热最新| 婷婷天天婷婷天天澡| 五月天综合视频| 啪啪啪大香蕉| 色色色99| 日逼免费视频| 永久精品| 色五月天激情| 1024操逼视频| 精品人妻伦一二三区久久| www.97干视频| 婷婷五月天色| 日本网站久久| 欧美99热| 日日肏天天操| 五婷婷综合网| 色情五月天se| 成人中文网| wuyuedingxiang99| 五月丁香六月激情| 影音先锋男人资源站一区二区| 天天拍夜夜爽日日| 丁香六月婷婷色播| 国产成人AV| 日韩精品一品二区三区的使用体验| 欧美色色色| 中文字幕在线观看视频www| 色色色九九九五月婷婷| 色欲Av五月天| 色9999日韩国产| 婷婷亚洲日本| 操碰97| 色热久资源| 99啪啪视频| 久久免费丁香| 综合AV在线| 99精品热视频| 五月婷婷深深爱| 性色欲情 网站| 牛牛碰免费| 五月丁香色色网| 欧美色99| 精品无码视频| 停停六月 综合| 丁香五月激情综合在线观看| 激情综合在线观看| 黄色网址五月婷婷| 色在线视频网2025| 久xxxx| 五月丁香六月情亚洲| 天天色视频| 蜜桃婷婷丁香五月天狠狠久久综合| 国产99热| 再綫Av免费視品| 四LLL少妇BBBB槡BBBB| 久99久在线| 亚洲无码11| 激情丁香六月| 91热视频色网站| 99黄色性生活| 另类激情五月| 天堂久久性| 日韩999| 99久久66| 中文字幕 中文字幕明步| 色欲日日躁| 亚洲AV电影av| 成片免费观看视频大全| 99这里只有精品在线| AA丁香综合激情| www.色五月天.com| 九九一区| 99热精品中文字幕| 五月色综合| 丁香五月冃欧美| 色综合香蕉| 免费视频99| 午夜婷婷五月天在线| 五月天天丁香婷婷| 婷婷五月色综合| 99热这里只有精品国产免费| 99免费视频| 久久这里只有精品07| 婷婷五月天最新网址| www.jiujiujiu| 激情五月丁香五月| 99视频| 丁香久久| wwccc久久久| 婷婷五月丁香综合亚洲| 丁香五月婷婷俺也要去| 日韩无码性爱| 97在线精品| 婷婷五月天小说网| 五月婷婷av| 九九丁香社区欧美激情| 九九成人| 亚洲激情.com| 色婷婷五月天激情综合| 99久热精品在线| 丁香五月婷婷啪啪| 99爱在线精品视频免费观看| 色综合射婷婷| 5月婷婷6月六月丁香| 99热www| 五月婷av| 亚洲黄色av网站| 色综合播放| 久久网日本| www.无码com| 99久久天堂婷婷| 五月天综合在线网| 丁香婷婷欧美综合| 久久R激情| 欧美搡BBBBB摔BBBBB| 中文AV网站| 色五月成人| 人人舔天天| 香蕉综合网| 操碰99在线视频观看| 狠狠色丁香| 国产午夜精品一区二区| 好好干av| 亚洲天堂aaa| 欧美久久五月婷婷| 深夜男女福利刺激影院一区完整| 99综合在线| 日韩伊人大香蕉| www.97视频| 最近中文字幕2019视频1| 婷婷激情五月| 欧美97超碰| 久久久久视剧HD| 欧美人人超级碰| 色噜噜狠噜噜视频| 色综久久久| 日日干综合| 丁香六月天婷婷在线| 99久久精| 99视频在线观看欧| 婷婷五月天偷拍| 激情五月天www| 天天干天天干天天干天天干天天干| 亚洲另类久久| 另类视频五月天| 婷婷五月激情视频| 97婷婷狠狠| 热99在线| 五月丁香六月综合图| 婷婷五月天97干| 97自拍视频在线| 婷婷另类小说| 久久久久人妻精品| 亚洲黄色操逼| 91精品久久久久久久久久久久| 免费超碰在线| 五月综合激情| 99精品久久久| 激情五月天色婷婷综合| 色婷婷五月综合在线| 思思久ren热| 日日日影院| 99re在线视频| 一级AV片| 五月丁香婷婷色色| 色天天综合成人网| 天天摸天天高潮天天爽| 婷婷开心激情五月激情网| 色婷婷色人人射| 欧美日比视频| PORNY九色9l自拍视频成人| 5月婷婷6月丁香aV| 婷婷激情五月综合| AA丁香综合激情| 久久99草五月婷婷| 色婷婷丁香网| 人妻久久久| 偷偷与邻居做爰完整视频| 婷婷激情五月天激情小说| 大香蕉啪啪| 99热这里是精品| 久热这里| 亚洲啪啪啪啪| 天天爽人人综合免费7799| 99热99精品| 六月婷婷激情| 99热欧| 爱的综合网| 国产一二三四五六七八视频| 99精品在这里| 99精品视频在线观看| 色婷插| 激情五月综合久久| 99爱视频免费看| 色五月婷婷基地| 综合精品99| 337p大胆噜噜噜噜噜91Av| 思思热思在线精品视频| 日本久久天堂| 久9精品| www.99riav99| 久人人操| 这里只有精彩亚洲视频推荐| 亚洲精品V天堂中文字幕| 欧美久久久久久久久中文字幕| 五月婷婷久久综合| 色五月首页| 96色婷婷| 五月丁香色| 婷婷五月激情欧美大胆视频| 丁香五月天激情网址| www91久久| WWW99热| 亚州视频九九99| 天天色天天操天天射| 99在线视频观看| 亚洲激情五月婷婷日日| 另类小说五月天| enecarbon-materials.com污K127封锁请涟系@wip1688 | 天天干天天日天天操| 五月激情影视| 久热精品在看| 精品色色| 中文字幕,综合,91| 另类图片五月天| 少妇性按摩无码中文A片| 再次出发二| 蜜桃人妻无码AV天堂三区 | 丁香六月婷婷开心婷婷网| 爱婷婷五月| 97香蕉碰碰人妻国产欧美| 五月婷在线观看| 五月激情婷婷丁香| 久久免费丁香| 丁香五月天啪啪| 久热99| 九九99精品视频在线观看| 久er免费视频| 婷婷五月天色色| site:hcxsz888.com| 激情色播| 九九草热在线观看| 99热免费18| 亚洲AAAA网| 日韩aⅴ视频| 丁香婷婷六月激情文学| www.夜夜| 色九九综合色| 香蕉视频91| 色播播五月天| 色久免费| 夜夜嗨一区二区三区直播内容 | 玖玖在线视频| 丁香五月婷婷动漫视频| 91精品国产99久久久久久天美| 久久AAAA片一区二区| 婷婷五月天社区| 天天天天天天天操| 激情伊人六| 狼人婷婷久久| 91久久九九| 婷婷丁香花五月天| 日韩精品一品二区三区的使用体验| 婷婷五月天激情小说| jiqingtaose五月天| 国产一二三四五六七八视频| 激情婷婷。| 人人草人人舔| 五月天深爱激情网| 色了色综合| 亚洲五月天天| 丁香九月婷婷| 日本色频| 色色网站观看| 少妇丁香婷婷 | 五月婷婷之婷婷| 99久久九九| 婷婷丁香黄色| 丁香五月综合久久| 疯狂做受XXXX高潮A片| 人妻久久久久久久| 五月丁香六月婷婷无码| 99热婷婷| 久色成人| 色色色国产| 狠狠色狠狠干| 人妻内射麻豆视频| 亚洲五月情| 激情婷婷五月社区| 亚洲 激情 中文| 天天成人综合| 思思热闹这里只有精品| 五月丁香啪啪啪免费看| 久色88| 老师高潮流白浆喷水的A片| 丁香五月激情图片婷婷| 丁香五月aV| 91干视频| 丁香六月中文| 色五月 五月婷婷| 五月婷婷开心深| 日本欧特黄色刺激一区影视久精品无码| 中文字幕成人网站| 五月天激情四射| 天天操婷婷| 人人操操97| 成人在线高清| 涩 五月 婷婷 狠狠| 另类激情综合| 久久亚洲婷婷| 欧美日本va| 天堂久久精品| 级情九色| enecarbon-materials.com污K127封锁请涟系@wip1688 | 国产成人精品一区二区三区视频| 在线天堂9| 伊人玖玖精品| 激情都市另类| 激情色色| 99A级片| 五月社区婷婷激情| 久热这里只有国产| www激情网站| www.婷婷| 久婷久婷| 激情五月天婷婷丁香 | 五月天婷婷网站888| 99热久久这里只有精品| 综合99久久| 婷婷色色丁香五月天| 99热这| 五月婷婷婷婷婷| 色五月开心五月激情五月| 97九色视频| 日韩无码性爱| www.久久久久久久| 热99在线精品| 丁香五月91| 涩五月婷婷| 精品在线网站| 99er这里只有精品视频| 三十路磁力链接| 欧美大奶熟女噜噜噜噜| 色性综合| 五月色情网| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | RenRenSe在线视频网站| 婷婷五月天,影院| 99色色网站| 久热这里这里有精品| 深爱五月月天| 婷婷五月天在婷| 99综合| 久久五月视频| 久热99| 色.五月综合网| 日本A片一区| 久久9视频欧美| 99re在线观看视频| 五月天婷婷在线观看| 丁香 亚洲 久久| 成人午夜无码视频| 色婷婷综合久久| 久热91精品| 另类图片五月天婷婷| 狠狠狠夜夜夜| 婷婷五月色惰| 久久人妻少妇嫩草AV| 97成人在线视频精品| 六月激情婷婷色| 六月丁香婷婷五月| 99热在线播放| 牛牛色av| AⅤ色区| 六月丁丁香| 91主播在线| 色色色色色色色色五月先| yazhou seshipin| 激情小说视频图片网| 五月丁香综合| 色色激情五月天| 5月色亭亭视频| 五月婷婷片| 天天干一干| 97婷婷丁香| 五月婷婷片| 日本人妻伦在线中文字幕| 免费看无码视频A级| 这里只有精品99视频| 五月婷婷深深爱| 五月四色激情| 天天五月情| 亚州美女| 五丁香激情综合| 九九热免费视频| 五月激情婷婷综合| 深爱激情六月天| 日日操夜夜擼| 五月天精品综合在线| 99热这里只有精品9| 日本一毛片| 四虎成人精品永久免费AV九九| 丁香六月综合激| 天天色综合色| 五月激情在线| 婷婷丁香午夜综合影视| 激情文学综合婷婷五月天丁香花| 美女激情婷婷| 亚洲偷| 婷婷久久国产视频| 操人妻AV| 五月天婷婷人妻| 99手机在线精品视频| 九九99精品视频在线观看| 少妇高潮呻吟A片免费看软件| 99久久久99久久91熟女| 99免费视频| 日日夜夜爽| 国产成人精品一区二三区熟女在线| 婷五月丁香俺| 色伦专区97中文字幕| 色欲五月天| 久艹久| 综合色色网| 亚洲天堂亚洲色色色| 欧美性猛交 XXXX 乱大交| 五月花成人网| 9191avse| 99燥99日| www.婷婷,com| renrencaoav| 欧美精品狠狠色丁香婷婷| 欧美久久婷婷| 成 久久| 婷婷丁香花五月天| 国产乱人偷精品人妻A片| 这里只有精品视频在线看| 丁香六月激| 中文字幕视频色婷婷| 五月丁香偷拍| 中文字幕在线免费观看视频| 五月天色官网| 五月天激情影院| 婷婷丁香无码专区| 伊人婷婷五月天| 涩涩涩五月天| 999影院成人在线影院| 欧美成人无码高清一区二区三区| 懂色av粉嫩AV蜜臀AV| 婷婷娌伦网| 色婷婷影音| 婷婷丁香五月av| 中文精品在| 国产色色小草视频| 狠狠干综合| 99热1| 五月天最新网| 伊人狠狠操| 激情5月舔| 国产性爱一级| 婷婷欧美激情| 99在线热视频| 五月婷婷导航| 五月天怕怕| 日本波多野结衣视频| 北京熟妇搡BBBB搡BBBB| 久久五月天婷婷| 婷婷亚洲欧美丁香五月| 婷婷激情五月综合基地| 思思热精品免费视频| 婷婷久久综合久| 人人叉久| 五月丁香激情综合啪啪| 五月婷婷国产| 九九综合影音先锋| 人操91在线| 色99欧洲色19| 色色色色色五月| 久久精品视频9| 婷婷狠狠五月综合| 丁香五月天堂网| 五月丁香六月激情| 亚洲综合另类| 婷婷操逼| 中文字幕日本最新乱码视频| 狠狠操婷婷| 就爱啪啪婷婷| 深爱激情网五月天| 婷婷丁香成人在线视频| 热思思| 日韩精品二三区| 丁香五月婷婷基地| 99视频在线精品免费观看2| 婷婷激情五月| 伊人五月天久久| 伊人久久大香蕉网| 婷婷五月天伊人在线| 亚洲精品色色| 五月天综合在线观看视频| 六月丁丁香| 丁香五月天堂| 免费观看18视频网站| 99精品视频播放| 涩综合网| 极品五月天| 五月天操逼网| 久热精品免费视频4| 成人中文字幕在线| 99色视频在线观看| 亚洲午夜一区二区| 激情内射人妻1区2区3区| 超碰男人色| 天天色天天爱天天舔| 激情五月无码| 九九综合色| 婷婷丁香www视频日本韩国| av网址在线| 婷婷五月丁香伊人网| 丁香婷婷基地| 日韩抽插操逼| 六月色婷婷| 丁香婷婷性久久| 天天摸天天舔在线视频| 色5月丁香婷婷| 欧美成人A片AAA片在线播放| 99热在线看| 婷婷涩涩网| 天天做夜夜爽| 婷婷九九| www99在线观看视频| 亚洲成人综合网在线免费观看| 色就是色婷婷五月亚洲激情| 五月天播播中文字幕| 欧美性猛交99久久久久99按摩| www.主妇. com| 亚洲五月天婷婷在线| 婷婷激情五月| 少妇激情五月婷婷| 99操视频| 婷婷 久综合| 精品色| 996热| 色99网| 天天肏高清在线| 婷婷五月丁香欧洲| 亚洲啪啪自拍| 人人爱国产| 婷色综合| 亭亭玉月丁香| 99操碰| 色噜噜综合网| 久久久www| 婷婷五月av| 色五月开心五月激情五月| 国产精品美女| 狠狠五月天婷婷| 内射干少妇亚洲69XXX| 甈你aaaaa| 天天狠狠综合精区| 色色色欧美色色| 2025神马午夜福利| 丁香 亚洲 久久| 在线观看欧美| 五月婷婷综合激情| 日本色色图| 天天日夜夜操五月| www99精品| 日本三级韩三级99久久| 亚洲婷婷五月天| 噜噜色com| 丝袜激情网| 久色网| 大香蕉九九| 4399精品一区二区| 亚洲黄色精品| 月婷婷亚洲| 丁香六月天| 亚洲激情精品| 亚洲精品va| 综合 激情 婷婷| 2023天天日夜夜爽| 久久这里只有国产| 亚洲操B视频| 国产精产国品一二三在观看| 亚洲激情综合| cc精品国产性传播| 色色色色色色色综合| 色五月激情问网站| 伊人激情AV一区二区三区| 婷婷六月综合激情| 天天成人五月天| 中国丰满熟女A片免费观| 五月激情婷婷在线| 色婷婷五月综合网| 日日日日做夜夜夜夜无码| 97超碰在线观看免费| 激情综合五月| 天天日夜夜爽| www.五月丁香av| 九九国产精视频| 九九色影视| 日韩黄色网络| 欧美成人精品A片免费一区99| 综合久久99| 亚洲黄色影视| 日韩淑女人妻luan伦激情精品一区二| 婷婷丁香综合成人| 激情狠狠丁香月| 日本在线免费中文com.| 婷婷免费精品视频| 人妻激情在线| 久久99久久久久久| 99re在线视频精品,这里只有精品18,| 婷婷视频在线碰| 国产伦亲子伦亲子视频观看| 免费无码毛片一区二区A片| 狠狠精品干练久久久无码中文字幕| 婷婷性爱网| 国产精品爽爽久久久久久| 天天天操天天天日| 狠狠草狠狠草| 丁香婷婷性久久| 色五月婷婷网| 五月天婷婷社区| 婷婷五月天小说| 天天爱天天操| 五月停性愛| 九月av在线| 丁香密臀AV激情网| 九热视频| 色五月xxx| 五月丁香婷婷六月天| 激情五月六月婷婷综合啪啪| 五月丁综合在线观看| 亚洲99热| 丁香五月天堂网| 婷婷五月天福利| 午夜性做爰电影| 五月四色激情| 日本色久| 丁香婷婷偷拍| 色婷婷在线视频| 99久久99久久综合| 一级韩国产精品毛| 激情小说五月天社区丁香 | 十二区无码| 免费啪啪亚州视频| 婷婷综合激情五月综合| 色婷婷基地| 97色色色| 看逼中文字幕| 77799热| 丁香婷婷视频在线| 大香蕉啪啪网| 亚州操逼网| 婷婷狠狠五月综合| 99在线观看视频| 色综合天天综合成人网| 99久热在线精品99re6热| 久久er这里只有精品| 激情综合婷婷| 丁香五月激情啪啪| 国产亚洲成AV人片在线观黄桃| 六月婷婷色色色| 欧美性丁香色色五月天| 六月丁香五月天| 丁香久月婷| WWW.桔色成人.COM| 伊人啪啪网| 91九色视频在线观看| 26uuu亚洲欧美| 久热大香蕉| 九九色播五月丁香| 色色色色av色色色色| 国产一级片| 天天操夜夜操| 殴美激情综合网| 色色色综合| 91人人妻人人操人人爽| 亚洲综合婷婷五月天| 亚洲最大成人综合网720P| 五月丁香婷婷色色| 九热精品| 五月天婷婷基地| 婷婷激情五月| 香蕉综合网| 丁香九月综合| 少妇激情基地| 九九碰九九爱97超碰| 色色色国产| 久久丁香五月天| 草榴视频网| 五月色婷婷中文字幕| 久久久久网站| 六月撸婷婷| 色欲天天综合网| 久久99热这里只有精品| 狠狠操之狠狠操| 亚洲精品久久久久久久久久吃药| 中文字幕综合网| 五月天婷婷综合| 综合色天天| 久久久99精品免费观看| 五月亭亭激情综合| 97碰碰久久| WWW.桔色成人.COM入口| 美女久久婷婷| 五月婷婷激情性爱| 中文字幕婷婷五月天| 色婷五月天| 99热这里只有精品1998| 天啪色| 婷婷丁香18| 夜夜做天天爽| 变天就操逼婷婷五月| 婷婷色在线视频| 亭亭玉月丁香| 久青草影院| 99久久6| 99a级片| 久久婷婷超碰| AV性爱网| 欧美成人va| se99在线| 91九色国产| www. 五月. com| 天天干天天爽| 开心婷婷五月中文字幕组| 97五月婷婷| 色婷婷色99国产综合精品| 五月天久久婷婷| 婷婷久热| 蜜桃人妻无码AV天堂三区| 97资源碰碰| 激情婷婷综合网| 99在线精品免费视频| 丁香六月婷婷综合缴| 五月天婷婷丁香视频| 五月婷色| 久久WW| 国产操逼视频网站| 少妇人妻偷人精品无码视频新浪| 久久五月激情综合| 五月丁香六月花| 97综合色片| 久久亭亭电影| 婷婷五月娱乐在线| 91蝌蚪窝视频在线| www.99久| 久热伊人| 久热免费| 日日夜夜天天综合| 五月激情在线| 日日夜夜干| 免费播放99性爱视频| 无码激情AAAAA片-区区| 996热| 丁香六月啪| www.色综合| 亚洲精品在线视频| 影视av久久久噜噜噜噜噜三级| 中文成人在线| 97韩国久久电影院| 这里只有精品久| 激情五月天综合| 怡红院院久久| 激情五月天综合图片小说网站| 国产欧美日韩一区二区三区| 日韩精品一区二区亚洲AV观看| 伊人激情网| 综合久久久婷| 奇米四色五月天| 色色婷婷色色| 亚洲精品网站色视频| 性热视频99精品| 99在线免费视频| Av性爱网| 婷婷五月天黄色小说| WWW.桔色成人.COM| 婷婷色五月丁香六月欧美啪| 久久视频婷婷视频| 激情丁香五月天| 伊人99久久| 无码碰碰| 国产成人在线不卡AV| 99热久久这里只有精品| 色综合天天天天做夜夜| 久热黄色| 欧美97超碰| 国产免费AV在线| 天天综合图片| 亚洲六月婷婷| 亚洲AV久久久久久久久久久久久久久久 | 免费超碰在线| 思恩热国产视频右线观看| 亚洲综合激情五月天婷婷| 亚洲色婷婷视频| 9+1视频网址| 狠狠色综合图片| 99久久网站| www、色色色| www.色婷婷| 色综合天堂| 热99AV网站| 久久99热网| 69热在线| 色色色色网站| 最近中文字幕大全免费版在线| 丁香五月婷婷综合激情哟哟哟| 日韩av在线免费观看| 蜜桃五月天| 人妻丰满精品一区二区A片| 操97免费超级视频| 日日爽日日操| 人人摸人人搞| 91超碰在线播放| 婷婷五月天视频亚洲| 最新无毒无码AV| 久久久大香蕉| 天天草天天摸| 久久婷婷五月天丁香| 人妻久久久久久久久| 天天狠狠夜夜狠狠2023| 91综合国免费久入| 五月婷婷AV| 91n网站cad入口在线观看| 九九热在视频| av大香蕉| 色狠狠五月天| 日日噜噜夜夜狠狠久久丁香五月| 精品日本视频444| 丁香五月大香蕉AV| 99热综合在线| 中文字幕av在线| 操逼三区| 九热视频| 国产精产国品一二三在观看 | 精品久久久中文字幕大豆网推荐理由| 开心亚洲久久开心| 色九四色| 色色色99| 99综合网| 深爱激情五月天| 日日夜夜天天爽| 九九精品综合| 9色在线| 亚洲天堂啪啪| 五月丁香| 久8色色| 五月天丁香综合在线| 超碰在线人人| 五月丁香啪啪啪免费看| 碰久久精品w| 中文激情网| 青草热视频这里只有精品| 久久精品噜噜噜成人A∨色欲| 殴美激情综合网| 丁香五月综合亚洲| 综合久久久| 午夜少妇在线观看视频| 天天色色婷婷| 色吊丝99| www.婷婷| 91大神操美女| 99热精品一区| 五月丁香婷婷久久| 精品热青草| 九九AV| 丁香六月伊人| 超碰在线9| 香蕉久久av一区二区三区 | 婷婷色av| 色婷婷狠狠干| 五月丁香婷婷成人版| 色啪久| 99热91| 久热综合| 天天色综合网1| 五月婷高清视频| 中文字幕黄色片| 99re热在线视频观看| 大操人妻| 黄网在线免费观| 另类激情综合| 婷婷五月天中文字幕| 伊人丁香五月| 国产日批视频| 亚洲超碰在线| 九九色色| 久热久色| 婷婷五月天最新综合你懂的 | 婷婷五月丁香91| 丁香午夜天| 99热精品在线播放| 色狠狠综合| 亚州日本欧州韩美高青高潮一| 99免费热在线精品| 91大神操美女| 成人欧美日韩| 热99国产精品| 色综合色五月| 日本一级一级一级一级| 99在线观看视频免费| 国产精品久久99| 天天综合干| www 五月天 com| 丁香五月婷婷色| 26uuu成人网| 日韩久久视频| 99视频在线精品免费观看2| 五月丁香六月婷| 五月日韩中文字幕| 免费观看日韩成人av| 激情五月份婷婷| 色天堂在线| 丁香婷最新动态| PORNY九色9l自拍视频成人| 伊人99热| 思思热热久久| 五月丁香六月婷婷姐| 五月天婷婷色色| 久久A极片| 2016日日夜夜操| 婷婷五月丁香av网站| 色婷婷AV五月天| 久热 91| 亚洲成av人影院| 超碰无码318604| 91精品熟女| 六月激情网| 大香蕉伊人久久| 国产一区18| 五月在在观看| 激情五月婷婷视频一区二区三区| 亚洲丁香花色| 91疯狂操操操操| 米奇影视资源777狠狠色婷婷五月天激情网 | 九九日本视频| 综合逼五月激情婷婷| 六月婷婷中文字幕| 激情五月婷婷视频一区二区三区| 99久久婷婷精品视频| 九玖视频这里只有精品| 亚洲性视频| ai97re99一本| 久久九九视频网站| www.maotanji.com| 婷婷丁香精品视频在线观看| 華人性愛AV在線| 99亚洲视频| 91seAV| 啪啪啪五月天| 色欧美一级| 丁香婷婷免费| 久久婷婷成人综合色怡春院| 人人操操| 五月婷婷婷丁香播| 香蕉99网| 色爱五月天| 国产看真人毛片爱做A片| 99思思在线视频| 色婷婷狠狠| 五月天激情小说| 久爱综合| 亚洲熟妇AV综合网五月丁香伊人 | 丁香九月婷| 五月开心婷婷网| 久久99激情| 国产av基地| 强伦轩人妻一区二区电影| 色射7856五月天激情四射| 超碰1999| 国产激情在线观看| 狼人婷婷综合| 婷婷色女| 内射在线CHINESE| 欧美成人精品老美女噜噜噜| 亚洲天堂有码| 99久久玖玖| 色999亚洲人成色| 五月婷婷激情网| 99激情在线| a在线观看| 思思综合热| 国产在线视频1234| 色呦呦美女| 激情综合网五月天天| 草草夜夜操| 99视频精品8 | 激情文学久久| 99激情| 五月婷婷丁香在线视频| 久久久.COM| 中文字幕丰满孑伦无码专区| 五月综合无码| 久久九九综合| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 五月激情影院| 色婷婷WWW| 久久九九热38| 青青草原亚洲天堂| 26uuu欧美亚洲日韩| 久久久久久99精品无码| 久热9| 影音先锋偷偷色男人站| 亚洲色激婷| 成人短视频免费| 欧美成人精品A片免费一区99| 婷婷丁香五月在线播放| 亚洲中文无码成人| 婷婷五月天大香蕉| 久久AV无码精品人妻系列试探| 亚韩在线视频| 99这里是精品| 人妻爽爽爽久久久久久久久| 久久综合网桃花| 欧美五月停| 久久人操| 米奇影视资源婷婷狠狠色激情欧美五月丁香| 国产精品人妻在线网址| 超碰在线观看三级片| www99热| 影音先锋91| 丁香六月激情国产| 九九热这里只有精品一| 五月婷婷综合久久| 人人操操| 丁香五月成人丝袜| 高清av在线国产| 大香蕉AV电影在线| 狠狠干综合| 香蕉AV福利精品导航| 另类激情中文| 日本99久久| 丁香六月婷| 亭亭五月丁香五月天激情| 99热99色| 色色无码| 美女五月天| 思思热在线观看| 亚洲婷婷免费| 综合图片色色| 99这里有精品视频视频| 九九无码视屏| 人妻操逼视频| 色综合中文| 婷婷久久大香蕉| 天天天天操| 天天日天天操心| 激情精品久久| 噜噜狠狠色综合久| 色色五月婷| 伊人六月无码视频| 婷婷五月天开心网| 久久与婷婷| 日本婷婷五月天| 亚洲av另类在线观看| 婷婷综合九月| 久操综合| 婷婷丁香水多多视频| 婷婷精品综合| 激情五月天婷婷五月天| 激情五月天视频| www.夜夜操.com| 狠狠色综合图片| 久久大香蕉同僚| 丁香激情合作五月| 黄色一级影片| 99re久久| www激情com| 99精品久久| 婷婷五月天伊人| 中日韩狠狠色| 综合激情网| 91丨九色丨熟女丰满| 婷婷六月天| 4438激情网| 婷婷丁香激情| 色色日本| 在线看av| 色色五月天婷婷| 天天天天天久久久久久| 狠狠插狠狠插| 少妇AB又爽又紧无码网站| 色婷婷91| 婷婷综合五月色播| 五月丁香六月综合激情| 婷婷六月视频| 久久机只有这里精品| 日日干天天| 9有码中文| 五月婷婷五月天激情网| 亚洲人妻av| 九九热九九| 色婷婷五月天| 在线中文字幕免费视频| 97色色色视屏| 色你久久| 五月深情久久| 久久99美女精彩视频| 亚洲欧洲中文日韩久久AV乱码 | 色五月婷婷老师| 99在线视频资源| 综合图片色色| 在线播放 精品| 开心久久五月天| 九九RE视频在线精品| 啪啪操超碰| 五月丁香婷婷伊人| 婷婷情色开心五月天99| 99爱欧美| 搡BBBB搡BBB搡18 | www.伊人天堂偷偷婷婷| 性爱视频久久| 婷婷五月天成人网站| 亚洲无码99| 亚洲激情 久久| 久久色情| 噜噜噜色噜噜| 色域五月丁香| 色丁香五月| 色色色色色热| 九九婷| 色情五月停停丁香| 九九美女视频| 亚洲午夜视频| www.婷婷网| 色五月,com| 色婷婷六月| site:hcxsz888.com| 激情中文在线| 天天爽天天干| 综合热无码| 五月婷免费视频| 综合激情视频| site:ornaments52.com| 亚洲AV无码成人精品电影| 婷婷五月综合在线| 91人妻视频| 婷婷综合亚洲| 婷婷五月天激情网| 五月婷婷婷婷网| 五月丁香大香蕉| 九色激情| XX色综合| 99爱视频免费| 五月丁香啪啪拍| 亚洲色激情| 丁香深五月婷婷| 亚洲色图五月丁香| 人妻肉射免费观看| www.久久久.com| 亚洲AV无码成人电影| 噜噜五月天综合| 婷婷久久丁香| 五月天婷婷色小说| 免费国产VA国产免费| 色九九七七| 精品9197碰| 色色五月天婷婷| 婷婷精品性性性性性性性| 色色色色色热| 小色小蛇伊人婷婷色香五月| 天天揷综合网| 五月激情综合网| 大香蕉天堂| 婷婷五月天小说网| 国产在线另类五月婷婷| 狠狠色噜噜狠狠色噜噜噜999| 色激情五月| 五月丁香成年黄色|