亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

STM32+OLED實(shí)時(shí)調(diào)試面板設(shè)計(jì)與實(shí)戰(zhàn)

STM32+OLED實(shí)時(shí)調(diào)試面板設(shè)計(jì)與實(shí)戰(zhàn) 1. 為什么一塊0.96寸OLED能成為STM32開發(fā)者的“第二雙眼睛”你有沒有過這樣的經(jīng)歷調(diào)試一個(gè)溫度采集系統(tǒng)串口打印滿屏數(shù)字但關(guān)鍵變量——比如PID輸出值、濾波后的ADC讀數(shù)、當(dāng)前狀態(tài)機(jī)所處階段——總在滾動(dòng)日志里一閃而過等你反應(yīng)過來想回溯早已被新數(shù)據(jù)沖走或者在做電機(jī)控制時(shí)想實(shí)時(shí)觀察PWM占空比變化趨勢(shì)卻只能靠邏輯分析儀抓波形沒法同時(shí)看電流、電壓、轉(zhuǎn)速三組數(shù)值的聯(lián)動(dòng)關(guān)系又或者在做一個(gè)環(huán)境監(jiān)測(cè)終端DHT11和BH1750的數(shù)據(jù)都正確讀出來了但OLED屏幕上只顯示靜態(tài)文字根本看不出傳感器響應(yīng)是否及時(shí)、數(shù)值跳變是否異常。這些不是功能缺陷而是調(diào)試信息與開發(fā)者認(rèn)知節(jié)奏之間的斷層——串口是單向流水線示波器是波形顯微鏡而你需要的是一塊能“呼吸”的、可交互的、帶上下文的實(shí)時(shí)信息面板。這塊面板就是用OLED給STM32做的實(shí)時(shí)調(diào)試面板。它不替代串口也不取代邏輯分析儀而是把原本需要切換窗口、解析日志、心算對(duì)比的碎片化信息固化在硬件層面上變成一眼可判的狀態(tài)快照。核心關(guān)鍵詞非常明確OLED是物理載體STM32是控制大腦實(shí)時(shí)調(diào)試是目的I2C是神經(jīng)通路SSD1306是驅(qū)動(dòng)芯片——這五個(gè)詞構(gòu)成了一條從硬件選型到軟件落地的完整技術(shù)鏈。我做過不下二十個(gè)帶OLED的STM32項(xiàng)目從F103C8T6最小系統(tǒng)到H743VIT6高性能板從Proteus仿真到真實(shí)產(chǎn)線設(shè)備最深的體會(huì)是一塊接對(duì)了I2C地址、刷對(duì)了初始化序列、跑穩(wěn)了DMA刷新的OLED其調(diào)試效率提升不是倍數(shù)級(jí)而是維度級(jí)——它讓你從“看日志找問題”進(jìn)化到“看屏幕定病因”。尤其對(duì)新手它把抽象的寄存器值、狀態(tài)標(biāo)志、時(shí)間戳直接翻譯成圖形化的進(jìn)度條、閃爍的告警燈、滾動(dòng)的數(shù)值曲線極大降低了嵌入式調(diào)試的認(rèn)知門檻。而對(duì)老手它則成為快速驗(yàn)證算法邏輯、監(jiān)控多任務(wù)調(diào)度、甚至現(xiàn)場(chǎng)演示客戶效果的不可替代工具。這不是炫技是工程實(shí)踐里最樸素的效率革命讓關(guān)鍵信息永遠(yuǎn)在你視線正前方。2. 整體設(shè)計(jì)思路與方案選型背后的硬邏輯2.1 為什么必須是OLED而不是LCD或LED點(diǎn)陣很多人第一反應(yīng)是“用LCD也行”但實(shí)際踩過坑就知道OLED在這里有不可替代的物理優(yōu)勢(shì)。LCD尤其是常見的1602或12864依賴背光靜態(tài)顯示功耗高且響應(yīng)速度慢——當(dāng)你需要每50ms刷新一次溫度曲線時(shí)LCD的余暉效應(yīng)會(huì)讓波形拖影嚴(yán)重根本看不出瞬態(tài)變化。而OLED是自發(fā)光器件每個(gè)像素獨(dú)立開關(guān)響應(yīng)時(shí)間在微秒級(jí)刷新率輕松做到60Hz以上畫動(dòng)態(tài)曲線毫無壓力。更重要的是視角和對(duì)比度LCD在側(cè)視時(shí)發(fā)灰、發(fā)白而OLED在任何角度都能保持純黑背景和銳利白字這對(duì)嵌入式設(shè)備常處的非理想光照環(huán)境比如機(jī)柜內(nèi)部、戶外陽(yáng)光直射至關(guān)重要。至于LED點(diǎn)陣雖然夠亮但分辨率太低通常8x8或16x16連顯示一個(gè)完整的十六進(jìn)制地址都得滾動(dòng)更別說畫坐標(biāo)軸了。0.96寸SSD1306 OLED128x64分辨率是個(gè)黃金平衡點(diǎn)尺寸小適配最小系統(tǒng)板分辨率夠能清晰顯示4行ASCII字符1行簡(jiǎn)單圖形接口標(biāo)準(zhǔn)I2C兩線搞定省IO資源。我試過用ILI9341驅(qū)動(dòng)的2.4寸彩屏做同樣功能結(jié)果發(fā)現(xiàn)功耗翻三倍初始化代碼多出200行而且因?yàn)镾PI速率限制刷新一幀要15ms完全達(dá)不到“實(shí)時(shí)”要求。所以O(shè)LED不是備選是經(jīng)過功耗、速度、尺寸、成本四重約束后唯一合理的解。2.2 為什么鎖定SSD1306而不是SH1106或RA8875市面上OLED模塊五花八門但真正適配STM32做調(diào)試面板的SSD1306是事實(shí)標(biāo)準(zhǔn)。它的驅(qū)動(dòng)IC生態(tài)最成熟HAL庫(kù)、LL庫(kù)、甚至裸機(jī)代碼都有海量例程Proteus、STM32CubeMX都內(nèi)置了SSD1306模型仿真調(diào)試零障礙最關(guān)鍵的是I2C協(xié)議極其簡(jiǎn)潔——整個(gè)初始化序列只有10條左右命令沒有復(fù)雜的寄存器映射或時(shí)序陷阱。相比之下SH1106雖然引腳兼容但內(nèi)部RAM尋址方式不同同一份代碼在SSD1306上跑得好好的換到SH1106可能只顯示半屏排查起來要翻 datasheet 對(duì)比頁(yè)地址映射表純屬增加無謂復(fù)雜度。RA8875這類高端驅(qū)動(dòng)則完全是另一個(gè)世界它支持圖形加速、多圖層、硬件縮放但代價(jià)是SPI接口大量初始化配置專用顯存管理對(duì)一個(gè)只要顯示幾行文本和簡(jiǎn)單波形的調(diào)試面板來說屬于“用航空母艦運(yùn)快遞”。我曾為一個(gè)客戶項(xiàng)目評(píng)估過RA8875最終放棄的核心原因是調(diào)試面板的價(jià)值在于“輕量、可靠、即插即用”而不是“功能豐富、參數(shù)繁多”。SSD1306的固件體積小HAL庫(kù)驅(qū)動(dòng)不到8KB、啟動(dòng)快初始化5ms、容錯(cuò)強(qiáng)I2C地址寫錯(cuò)只會(huì)黑屏不會(huì)鎖死總線這才是嵌入式調(diào)試場(chǎng)景最需要的特質(zhì)。2.3 為什么堅(jiān)持用硬件I2C而非軟件模擬網(wǎng)絡(luò)上充斥著“軟件I2C更靈活”的說法但在STM32實(shí)時(shí)調(diào)試場(chǎng)景下這是個(gè)危險(xiǎn)誤區(qū)。軟件I2C本質(zhì)是GPIO翻轉(zhuǎn)延時(shí)循環(huán)其時(shí)序精度完全依賴CPU主頻和編譯器優(yōu)化等級(jí)。當(dāng)你的STM32正在處理ADC采樣中斷、UART接收中斷、定時(shí)器更新中斷時(shí)一個(gè)微妙的中斷延遲就可能導(dǎo)致I2C SCL時(shí)鐘拉長(zhǎng)OLED模塊誤判為起始信號(hào)丟失直接進(jìn)入錯(cuò)誤狀態(tài)屏幕閃動(dòng)或卡死。而硬件I2C由專用外設(shè)實(shí)現(xiàn)時(shí)鐘由APB總線分頻生成完全獨(dú)立于CPU執(zhí)行流即使在最高優(yōu)先級(jí)中斷服務(wù)程序中I2C通信也能穩(wěn)定進(jìn)行。實(shí)測(cè)數(shù)據(jù)很說明問題在F103C8T672MHz上硬件I2C寫入一整屏128x641024字節(jié)耗時(shí)約1.8ms且抖動(dòng)小于0.1ms軟件I2C同樣操作平均耗時(shí)3.2ms抖動(dòng)高達(dá)1.5ms在多任務(wù)環(huán)境下失敗率超30%。更隱蔽的風(fēng)險(xiǎn)是功耗軟件I2C在傳輸期間CPU不能進(jìn)入低功耗模式而硬件I2C支持DMA傳輸CPU可以全程休眠。所以選擇硬件I2C不是圖省事而是為系統(tǒng)穩(wěn)定性埋下的關(guān)鍵伏筆——它確保調(diào)試面板這個(gè)“醫(yī)生聽診器”永遠(yuǎn)不會(huì)因?yàn)樽陨砉收隙`導(dǎo)診斷。2.4 為什么調(diào)試面板必須“實(shí)時(shí)”而非“準(zhǔn)實(shí)時(shí)”“實(shí)時(shí)”在這里有嚴(yán)格定義從變量更新到屏幕刷新的端到端延遲必須穩(wěn)定且足夠短。我們?cè)O(shè)定目標(biāo)為≤100ms這意味著每秒至少能刷新10幀。為什么是這個(gè)閾值因?yàn)槿搜蹖?duì)變化的感知臨界點(diǎn)就在10Hz左右——低于此值數(shù)值跳變看起來是“頓挫”的無法判斷是真實(shí)波動(dòng)還是噪聲高于此值則能形成流暢的視覺反饋。例如監(jiān)控一個(gè)PID控制器的輸出如果刷新間隔是200ms你看到的可能是“85→92→88”這種跳躍根本分不清是系統(tǒng)震蕩還是正常調(diào)節(jié)而100ms刷新下“85→87→89→91→92→91→89”這條平滑上升再回落的曲線立刻就能告訴你系統(tǒng)正在超調(diào)需要減小積分項(xiàng)。這個(gè)實(shí)時(shí)性要求直接決定了軟件架構(gòu)不能用阻塞式I2C傳輸會(huì)卡住整個(gè)主循環(huán)必須用DMA中斷方式異步刷新不能把所有數(shù)據(jù)顯示邏輯堆在main()里必須拆分為獨(dú)立的任務(wù)或回調(diào)函數(shù)緩沖區(qū)設(shè)計(jì)也要考慮——比如用雙緩沖機(jī)制前臺(tái)顯示舊幀時(shí)后臺(tái)準(zhǔn)備新幀徹底消除刷新撕裂。我見過太多項(xiàng)目OLED能點(diǎn)亮、能顯示靜態(tài)文字但一旦接入動(dòng)態(tài)數(shù)據(jù)就卡頓、丟幀根源全在于沒把“實(shí)時(shí)”二字當(dāng)作硬性指標(biāo)來設(shè)計(jì)而是當(dāng)成“能動(dòng)就行”的軟需求。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)3.1 硬件連接I2C地址的“0x3C”與“0x3D”之爭(zhēng)幾乎所有0.96寸OLED模塊的背面都印著兩個(gè)焊點(diǎn)A0和A1它們決定I2C從機(jī)地址。SSD1306標(biāo)準(zhǔn)地址是0x3C寫/0x3D讀但這個(gè)“標(biāo)準(zhǔn)”有個(gè)前提A0引腳接地。如果A0懸空或接VCC地址會(huì)變成0x3D寫/0x3E讀。這就是為什么網(wǎng)上大量教程寫著“SSD1306地址是0x3C”而你接上板子卻黑屏——很可能你的模塊出廠時(shí)A0是懸空的。實(shí)操中必須用萬用表蜂鳴檔實(shí)測(cè)A0對(duì)地電阻若接近0Ω則地址為0x3C若為無窮大則地址為0x3D。更穩(wěn)妥的做法是在原理圖上強(qiáng)制將A0接地并標(biāo)注“ADDR0x3C”從源頭杜絕歧義。另外I2C上拉電阻的選擇直接影響通信可靠性。常見誤區(qū)是“隨便用10K”但STM32的I2C引腳開漏輸出能力有限10K在長(zhǎng)走線或多個(gè)設(shè)備并聯(lián)時(shí)上升沿會(huì)嚴(yán)重拖尾。我的經(jīng)驗(yàn)是單設(shè)備、短線10cm用4.7K多設(shè)備或長(zhǎng)線必須降到2.2K。實(shí)測(cè)過用10K上拉時(shí)在72MHz主頻下I2C通信誤碼率高達(dá)0.5%換成2.2K后降為0。還有一個(gè)隱藏陷阱OLED模塊的VCC和GND必須與STM32共地且最好用獨(dú)立的電源路徑避免電機(jī)、繼電器等大電流器件引起的地彈干擾I2C信號(hào)。我在一個(gè)魚缸控制器項(xiàng)目里OLED偶爾閃屏最后發(fā)現(xiàn)是水泵啟動(dòng)時(shí)地線電壓跳變200mV解決方案很簡(jiǎn)單給OLED模塊加一級(jí)LDO穩(wěn)壓并用地線銅箔單獨(dú)鋪到STM32的GND引腳。3.2 初始化序列為什么必須嚴(yán)格遵循datasheet的時(shí)序SSD1306的初始化不是“發(fā)幾條命令就行”而是一套精密的時(shí)序舞蹈。核心命令包括DISPLAYOFF、SETDISPLAYCLOCKDIV、SETMULTIPLEX、SETDISPLAYOFFSET、SETSTARTLINE、CHARGEPUMP、MEMORYMODE、SEGREMAP、COMSCANINC、SETCOMPINS、SETCONTRAST、SETPRECHARGE、SETVCOMDESELECT、DISPLAYALLON_RESUME、NORMALDISPLAY、DISPLAYON。其中CHARGEPUMP命令0x8D必須在DISPLAYON0xAF之前開啟否則屏幕永遠(yuǎn)不亮SETMULTIPLEX0xA8的參數(shù)必須是0x3F對(duì)應(yīng)64行寫錯(cuò)會(huì)導(dǎo)致顯示區(qū)域錯(cuò)位最致命的是SEGREMAP0xA0/A1和COMSCANINC0xC0/C8的組合——它們決定掃描方向如果配錯(cuò)屏幕內(nèi)容會(huì)上下顛倒或鏡像顯示新手常以為是代碼bug其實(shí)只是這兩條命令的參數(shù)反了。我建議的做法是不要自己手寫初始化序列直接從官方參考設(shè)計(jì)或成熟庫(kù)如ST提供的STM32Cube_FW_F1_V1.8.0中的oled_demo里復(fù)制粘貼。這些序列經(jīng)過了晶圓廠驗(yàn)證時(shí)序參數(shù)如DELAY_MS(100)都是精確計(jì)算過的。曾經(jīng)有個(gè)項(xiàng)目為了“精簡(jiǎn)代碼”我把初始化里的幾個(gè)DELAY_MS(10)全刪了結(jié)果在-20℃低溫環(huán)境下OLED啟動(dòng)失敗率飆升到70%補(bǔ)上延時(shí)后100%通過——因?yàn)殡姾杀秒娙莸某潆姇r(shí)間隨溫度變化硬件延時(shí)是必須的。3.3 字符顯示如何讓ASCII字符真正“所見即所得”O(jiān)LED原生只支持128x64的點(diǎn)陣顯示ASCII字符看似簡(jiǎn)單但細(xì)節(jié)決定成敗。首先字體取模必須匹配屏幕坐標(biāo)系。很多取模軟件默認(rèn)生成“縱向取?!奔匆粋€(gè)字節(jié)的8位對(duì)應(yīng)8行像素但SSD1306的GRAM是按頁(yè)P(yáng)age組織的每頁(yè)8行所以必須用“橫向取?!币粋€(gè)字節(jié)的8位對(duì)應(yīng)8列像素否則文字會(huì)旋轉(zhuǎn)90度。其次字符間距不能簡(jiǎn)單設(shè)為0。OLED像素是離散的相鄰字符如果緊貼右邊字符的最左列會(huì)和左邊字符的最右列重疊導(dǎo)致“il”看起來像“h”。實(shí)測(cè)最佳間距是1像素即每個(gè)字符占用寬度字寬1。再者光標(biāo)定位的坐標(biāo)計(jì)算容易出錯(cuò)SSD1306的X坐標(biāo)范圍是0-127Y坐標(biāo)是0-63但Y軸以頁(yè)為單位0-7頁(yè)所以實(shí)際顯示行號(hào) Y / 8。例如要在第3行從0開始計(jì)數(shù)顯示文字Y坐標(biāo)應(yīng)設(shè)為2424/83。我封裝了一個(gè)通用函數(shù)OLED_ShowString(uint8_t x, uint8_t y, uint8_t *str)內(nèi)部自動(dòng)處理坐標(biāo)轉(zhuǎn)換和間距避免每次調(diào)用都手動(dòng)算。最后中文顯示是高頻痛點(diǎn)。SSD1306本身不支持Unicode必須用點(diǎn)陣字庫(kù)。推薦使用“PCtoLCD2012”軟件生成16x16點(diǎn)陣但要注意生成的數(shù)組是按行存儲(chǔ)的而OLED的GRAM是按頁(yè)存儲(chǔ)的所以必須做矩陣轉(zhuǎn)置否則漢字會(huì)“橫著長(zhǎng)”。這個(gè)轉(zhuǎn)置邏輯我放在了字庫(kù)加載函數(shù)里確保調(diào)用者無感。3.4 圖形繪制用“偽坐標(biāo)系”實(shí)現(xiàn)真正的波形圖調(diào)試面板的靈魂在于動(dòng)態(tài)圖形而OLED的128x64分辨率對(duì)波形圖是巨大挑戰(zhàn)。直接畫坐標(biāo)軸會(huì)吃掉大量像素留給數(shù)據(jù)的空間所剩無幾。我的解決方案是拋棄傳統(tǒng)坐標(biāo)系構(gòu)建“偽坐標(biāo)系”。具體做法定義一個(gè)數(shù)據(jù)緩沖區(qū)如int16_t wave_buffer[128]只存128個(gè)最新采樣值屏幕X軸固定映射到緩沖區(qū)索引0-127Y軸不做絕對(duì)值映射而是做相對(duì)歸一化——找出緩沖區(qū)最大值max_val和最小值min_val計(jì)算縮放因子scale 63.0 / (max_val - min_val)然后每個(gè)點(diǎn)的Y坐標(biāo) 63 - (val - min_val) * scale。這樣無論原始數(shù)據(jù)是0-1000的ADC值還是-5000~5000的IMU加速度都能自動(dòng)適配滿屏顯示。繪圖時(shí)用Bresenham直線算法連接相鄰點(diǎn)避免浮點(diǎn)運(yùn)算拖慢速度。關(guān)鍵優(yōu)化在于不每次都清屏重繪只擦除上一幀的“尾巴”。因?yàn)椴ㄐ问菨L動(dòng)的只需把新點(diǎn)畫上去再把舊點(diǎn)位置用背景色黑色覆蓋即可。實(shí)測(cè)下來這種方法比全屏刷新快5倍CPU占用率從12%降到2%。還有一個(gè)技巧用不同顏色區(qū)分多通道。OLED是單色但可以用“點(diǎn)”、“線”、“塊”三種模式模擬通道1用單像素點(diǎn)通道2用2x2方塊通道3用3像素高線段視覺區(qū)分度極高。我在超聲波測(cè)距項(xiàng)目里用這種方式同時(shí)顯示發(fā)送脈沖、回波信號(hào)、計(jì)算距離三條曲線一目了然。4. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)4.1 基于HAL庫(kù)的OLED驅(qū)動(dòng)移植從CubeMX到點(diǎn)亮第一行第一步用STM32CubeMX配置硬件。選擇你的MCU以F103C8T6為例啟用I2C1SCL-PB6, SDA-PB7模式設(shè)為“I2C”時(shí)鐘速率為400kHz標(biāo)準(zhǔn)模式足夠不必用高速模式增加風(fēng)險(xiǎn)開啟RCC的HSE外部晶振在SYS里選擇“Serial Wire”調(diào)試生成代碼時(shí)勾選“Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral”。生成后在main.c里添加OLED頭文件#include ssd1306.h這是你后續(xù)要寫的驅(qū)動(dòng)文件。接著編寫ssd1306.h聲明初始化函數(shù)void SSD1306_Init(void)、清屏函數(shù)void SSD1306_Clear(void)、顯示字符串函數(shù)void SSD1306_ShowString(uint8_t x, uint8_t y, uint8_t *str)。核心是ssd1306.c的實(shí)現(xiàn)。初始化函數(shù)里先調(diào)用HAL_I2C_Init(hi2c1)完成硬件初始化然后發(fā)送SSD1306初始化序列——這里必須注意HAL庫(kù)的HAL_I2C_Master_Transmit()函數(shù)第三個(gè)參數(shù)是數(shù)據(jù)長(zhǎng)度單位是字節(jié)而SSD1306命令是單字節(jié)數(shù)據(jù)是多字節(jié)所以命令要單獨(dú)發(fā)數(shù)據(jù)要打包發(fā)。例如發(fā)送命令0xAEDISPLAYOFF代碼是uint8_t cmd 0xAE; HAL_I2C_Master_Transmit(hi2c1, 0x3C1, cmd, 1, HAL_MAX_DELAY)發(fā)送數(shù)據(jù)如顯示緩沖區(qū)則用HAL_I2C_Master_Transmit(hi2c1, 0x3C1, buffer, 1024, HAL_MAX_DELAY)。最關(guān)鍵的一步是在發(fā)送數(shù)據(jù)前必須先發(fā)送控制字節(jié)0x40表示后續(xù)是顯示數(shù)據(jù)否則OLED會(huì)把數(shù)據(jù)當(dāng)成命令執(zhí)行屏幕亂碼。這個(gè)0x40很多初學(xué)者會(huì)遺漏導(dǎo)致“代碼沒錯(cuò)就是不顯示”。4.2 實(shí)現(xiàn)DMA中斷的異步刷新讓CPU徹底解放阻塞式I2C傳輸會(huì)卡住主循環(huán)必須升級(jí)。HAL庫(kù)提供了HAL_I2C_Master_Transmit_DMA()函數(shù)但直接用它有個(gè)坑DMA傳輸完成后OLED的GRAM還沒完全更新屏幕可能閃爍。解決方案是用I2C的TCTransfer Complete中斷在中斷里觸發(fā)屏幕刷新完成事件。具體步驟在ssd1306.c里定義一個(gè)全局標(biāo)志volatile uint8_t oled_dma_done 0在SSD1306_Refresh()函數(shù)中調(diào)用HAL_I2C_Master_Transmit_DMA(hi2c1, 0x3C1, ssd1306_buffer, 1024)然后在I2C1_EV_IRQHandler()中斷服務(wù)程序里檢查if(__HAL_I2C_GET_FLAG(hi2c1, I2C_FLAG_TC))如果是則置位oled_dma_done 1并清除標(biāo)志。主循環(huán)里用while(!oled_dma_done); oled_dma_done 0;等待刷新完成。但這還不夠高效因?yàn)镃PU還在輪詢等待。終極方案是把刷新邏輯放到FreeRTOS任務(wù)里用信號(hào)量同步。創(chuàng)建一個(gè)oled_task優(yōu)先級(jí)設(shè)為低于主控任務(wù)在I2C TC中斷里xSemaphoreGiveFromISR(oled_sem, pxHigherPriorityTaskWoken)在oled_task里xSemaphoreTake(oled_sem, portMAX_DELAY)后執(zhí)行刷新。這樣CPU在等待時(shí)可以去處理其他任務(wù)利用率接近100%。我實(shí)測(cè)過在F103上運(yùn)行4個(gè)任務(wù)ADC采樣、UART轉(zhuǎn)發(fā)、PID計(jì)算、OLED刷新CPU占用率僅68%遠(yuǎn)低于阻塞式方案的92%。4.3 構(gòu)建實(shí)時(shí)調(diào)試框架變量綁定與自動(dòng)刷新真正的調(diào)試面板不是手動(dòng)調(diào)用SSD1306_ShowString()而是讓變量“自己長(zhǎng)出屏幕”。我設(shè)計(jì)了一個(gè)極簡(jiǎn)的綁定框架定義結(jié)構(gòu)體typedef struct { char* name; void* ptr; uint8_t type; } debug_var_t;其中name是變量名如tempptr是指向變量的指針如temperaturetype是類型標(biāo)識(shí)0uint8_t, 1int16_t, 2float等。在main()里初始化一個(gè)數(shù)組debug_var_t debug_vars[] {{TEMP, temperature, 1}, {VOLT, voltage, 2}, {STATE, state_machine, 0}};。然后創(chuàng)建一個(gè)debug_refresh()函數(shù)遍歷這個(gè)數(shù)組根據(jù)type用sprintf()格式化值再調(diào)用SSD1306_ShowString()顯示。關(guān)鍵創(chuàng)新在于用SysTick定時(shí)器觸發(fā)自動(dòng)刷新。在HAL_IncTick()里每100ms即10Hz調(diào)用一次debug_refresh()。這樣只要變量值改變下一幀就會(huì)自動(dòng)更新開發(fā)者完全不用關(guān)心顯示邏輯。更進(jìn)一步可以加入“編輯模式”長(zhǎng)按某個(gè)按鍵進(jìn)入變量修改界面用編碼器調(diào)整數(shù)值直接寫回內(nèi)存——這已經(jīng)是一個(gè)簡(jiǎn)易的在線調(diào)試器了。我在一個(gè)環(huán)境監(jiān)測(cè)系統(tǒng)里用這個(gè)框架同時(shí)監(jiān)控DHT11溫濕度、BH1750光照、MQ-2氣體濃度三組數(shù)據(jù)以不同顏色點(diǎn)/線/塊同屏顯示刷新率穩(wěn)定在10Hz工程師在現(xiàn)場(chǎng)用手機(jī)拍視頻就能直觀展示系統(tǒng)響應(yīng)。4.4 高級(jí)功能實(shí)戰(zhàn)用OLED做狀態(tài)機(jī)可視化與故障自檢OLED的價(jià)值遠(yuǎn)不止顯示數(shù)字。在復(fù)雜狀態(tài)機(jī)如電機(jī)FOC控制、電池充放電管理中狀態(tài)切換是調(diào)試難點(diǎn)。我的做法是用OLED的每一行代表一個(gè)狀態(tài)用閃爍指示當(dāng)前激活態(tài)。例如定義enum {IDLE, STARTING, RUNNING, FAULT} motor_state;在debug_refresh()里為每個(gè)狀態(tài)分配一行第0行顯示IDLE第1行顯示STARTING第2行顯示RUNNING第3行顯示FAULT然后根據(jù)motor_state值在對(duì)應(yīng)行末尾畫一個(gè)閃爍的?符號(hào)用SSD1306_DrawChar()畫一個(gè)自定義字符。閃爍用SysTick計(jì)數(shù)器實(shí)現(xiàn)if((systick_count % 10) 0) draw_arrow !draw_arrow;。這樣狀態(tài)切換一目了然再也不用猜“現(xiàn)在到底停在哪一步”。另一個(gè)實(shí)用功能是故障自檢。OLED本身可能失效但如何判斷是OLED壞了還是STM32沒發(fā)數(shù)據(jù)我在初始化后立即寫入一個(gè)自檢標(biāo)記如ssd1306_buffer[0] 0xAA; ssd1306_buffer[1] 0x55;然后在主循環(huán)里每5秒讀取這兩個(gè)字節(jié)如果值不對(duì)說明I2C通信中斷立即在串口打印OLED_COMM_ERROR。這個(gè)自檢機(jī)制幫我在一個(gè)工業(yè)網(wǎng)關(guān)項(xiàng)目里提前發(fā)現(xiàn)了PCB上I2C線路的虛焊問題避免了產(chǎn)線批量返工。最后別忘了電源管理OLED在不顯示時(shí)用SSD1306_DisplayOff()關(guān)閉功耗從20mA降到0.1mA在待機(jī)喚醒后用SSD1306_DisplayOn()恢復(fù)整個(gè)過程1ms無縫銜接。5. 常見問題與排查技巧實(shí)錄5.1 屏幕全黑從地址到供電的七層排查法OLED全黑是最常見問題但原因千差萬別。我總結(jié)了一套七層排查法按順序執(zhí)行90%問題能在5分鐘內(nèi)定位供電層用萬用表測(cè)OLED模塊VCC和GND間電壓必須是3.3VSTM32 IO電平或5V模塊標(biāo)稱誤差5%即不合格連接層確認(rèn)SCL、SDA、VCC、GND四根線無虛焊、無短路特別檢查開發(fā)板上的I2C引腳是否被其他外設(shè)復(fù)用如USB D D-地址層用I2C掃描工具如Arduino的I2CScanner檢測(cè)總線上設(shè)備地址確認(rèn)0x3C或0x3D存在初始化層在SSD1306_Init()函數(shù)開頭加HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);點(diǎn)亮一個(gè)LED如果LED不亮說明初始化函數(shù)根本沒執(zhí)行命令層用邏輯分析儀抓I2C波形確認(rèn)是否發(fā)出了0xAEDISPLAYOFF、0xAFDISPLAYON等關(guān)鍵命令數(shù)據(jù)層在發(fā)送顯示緩沖區(qū)前用HAL_GPIO_TogglePin()翻轉(zhuǎn)一個(gè)IO在邏輯分析儀上看數(shù)據(jù)包是否發(fā)出內(nèi)容層手動(dòng)給ssd1306_buffer[0] 0xFF;全亮第一行然后刷新如果亮了說明是數(shù)據(jù)內(nèi)容問題不是硬件問題。這個(gè)流程我在培訓(xùn)新人時(shí)強(qiáng)制要求背誦。曾經(jīng)一個(gè)學(xué)員折騰兩天最后發(fā)現(xiàn)是開發(fā)板上I2C1的SCL引腳被默認(rèn)配置為SWDCLK根本沒釋放給I2C外設(shè)——這就是“連接層”和“初始化層”的交叉問題。5.2 屏幕花屏/錯(cuò)位GRAM映射與緩沖區(qū)溢出的雙重陷阱花屏表現(xiàn)為文字扭曲、圖形錯(cuò)位、部分區(qū)域亂碼。首要懷疑點(diǎn)是GRAM映射。SSD1306的128x64像素被組織成128列×8頁(yè)每頁(yè)8行總共1024字節(jié)。如果你的顯示緩沖區(qū)定義為uint8_t buffer[128][64]按行列那么寫入時(shí)必須做坐標(biāo)轉(zhuǎn)換buffer[x][y]對(duì)應(yīng)GRAM地址buffer[(y/8)*128 x]。更安全的做法是直接定義uint8_t ssd1306_buffer[1024]并用宏#define SSD1306_BUFFER(x,y) ssd1306_buffer[((y)/8)*128 (x)]訪問。第二個(gè)陷阱是緩沖區(qū)溢出。例如用sprintf(str, TEMP:%d, temp)如果temp是int16_t最大值32767加上TEMP:前綴共10字符但你只分配了char str[8]就會(huì)覆蓋相鄰內(nèi)存導(dǎo)致花屏。我的習(xí)慣是所有字符串緩沖區(qū)長(zhǎng)度預(yù)期最大長(zhǎng)度2且用snprintf()代替sprintf()強(qiáng)制截?cái)?。還有一個(gè)隱蔽原因I2C總線上有其他設(shè)備如EEPROM在同時(shí)通信地址沖突導(dǎo)致數(shù)據(jù)錯(cuò)亂。解決方案是在OLED刷新前用HAL_I2C_IsDeviceReady()檢查0x3C設(shè)備是否就緒超時(shí)則跳過本次刷新。5.3 刷新卡頓/丟幀DMA配置與中斷優(yōu)先級(jí)的生死線卡頓表現(xiàn)為畫面撕裂、數(shù)值跳變、刷新率不穩(wěn)定。根源幾乎都在DMA和中斷配置。首先檢查DMA通道I2C1_TX必須映射到DMA1_Channel6F1系列且DMA請(qǐng)求源必須是I2C1_TX不能選錯(cuò)成I2C1_RX。其次DMA緩沖區(qū)大小必須精確等于1024字節(jié)多1字節(jié)都會(huì)導(dǎo)致DMA傳輸異常終止。最關(guān)鍵的是中斷優(yōu)先級(jí)I2C的EV事件和ER錯(cuò)誤中斷優(yōu)先級(jí)必須高于所有可能打斷它的其他中斷如TIM2更新中斷、ADC轉(zhuǎn)換完成中斷。在CubeMX里把I2C1的NVIC優(yōu)先級(jí)設(shè)為1數(shù)值越小優(yōu)先級(jí)越高其他外設(shè)設(shè)為2或更低。實(shí)測(cè)過當(dāng)TIM2中斷優(yōu)先級(jí)為1I2C為2時(shí)在TIM2中斷里調(diào)用HAL_I2C_Master_Transmit_DMA()DMA傳輸會(huì)概率性失敗因?yàn)門IM2中斷還沒退出I2C的TC中斷就被屏蔽了。最后檢查DMA傳輸完成回調(diào)函數(shù)HAL_I2C_MasterTxCpltCallback()是否被正確注冊(cè)——HAL庫(kù)默認(rèn)不啟用回調(diào)必須在MX_I2C1_Init()后手動(dòng)調(diào)用HAL_I2C_RegisterCallback(hi2c1, HAL_I2C_MASTER_TX_COMPLETE_CB_ID, I2C_MasterTxCpltCallback)。5.4 中文顯示方塊/亂碼字庫(kù)存儲(chǔ)與取模方向的精準(zhǔn)匹配中文顯示亂碼99%是因?yàn)樽謳?kù)與OLED的GRAM組織方式不匹配。PCtoLCD2012默認(rèn)生成“縱向取?!奔匆粋€(gè)字節(jié)的bit0-bit7對(duì)應(yīng)字模的第1行到第8行。但SSD1306的GRAM是“頁(yè)”組織一個(gè)字節(jié)的bit0-bit7對(duì)應(yīng)同一列的第1-8行像素所以必須用“橫向取?!薄2僮鞑襟E在PCtoLCD2012里選擇“橫向取?!薄白止?jié)倒序”因?yàn)镺LED的列地址從左到右遞增而字模數(shù)據(jù)從高位到低位排列生成C文件后把數(shù)組復(fù)制到工程里。調(diào)用時(shí)用SSD1306_ShowCN16(uint8_t x, uint8_t y, const uint8_t* cn_font)函數(shù)內(nèi)部按頁(yè)循環(huán)for(uint8_t page0; page2; page) { for(uint8_t col0; col16; col) { ssd1306_buffer[(y/8 page)*128 x col] cn_font[page*16 col]; } }。注意16x16漢字占2頁(yè)16行所以y坐標(biāo)必須是16的倍數(shù)否則會(huì)跨頁(yè)錯(cuò)位。我封裝了一個(gè)自動(dòng)適配函數(shù)輸入任意y值內(nèi)部自動(dòng)向下取整到最近的16的倍數(shù)并返回實(shí)際繪制的y坐標(biāo)避免調(diào)用者計(jì)算錯(cuò)誤。5.5 低溫/高溫失效電荷泵與延時(shí)參數(shù)的環(huán)境適應(yīng)性在-20℃或70℃環(huán)境下OLED可能啟動(dòng)失敗或亮度驟降。根本原因是SSD1306內(nèi)部的電荷泵電路對(duì)溫度敏感。Datasheet明確指出電荷泵電容通常為10nF的ESR等效串聯(lián)電阻隨溫度升高而增大導(dǎo)致升壓效率下降。解決方案有兩個(gè)一是更換為溫度特性更好的NP0/C0G材質(zhì)電容二是在初始化序列里動(dòng)態(tài)調(diào)整電荷泵使能參數(shù)。SSD1306的CHARGEPUMP命令0x8D后跟一個(gè)字節(jié)bit41使能電荷泵bit3-0是預(yù)充電周期。在低溫下把預(yù)充電周期從默認(rèn)的0x022個(gè)時(shí)鐘周期改為0x033個(gè)周期能顯著提升啟動(dòng)成功率。我的做法是在SSD1306_Init()里讀取片上溫度傳感器如STM32F1的TS_CAL1/TS_CAL2根據(jù)溫度查表設(shè)置預(yù)充電值-10℃用0x03-10~50℃用0x0250℃用0x01減少功耗。這個(gè)小改動(dòng)讓我們的環(huán)境監(jiān)測(cè)終端在漠河冬季野外測(cè)試中OLED啟動(dòng)成功率從65%提升到100%。另一個(gè)問題是亮度SSD1306的SETCONTRAST命令0x81參數(shù)范圍是0x00-0xFF但低溫下0xFF會(huì)導(dǎo)致電流過大加速OLED老化。實(shí)測(cè)最佳值是0x80中等亮度兼顧可視性和壽命。6. 經(jīng)驗(yàn)心得與延伸思考做了這么多年STM32OLED調(diào)試面板最深刻的體會(huì)是它從來不是一個(gè)孤立的外設(shè)而是整個(gè)嵌入式系統(tǒng)可觀測(cè)性的入口。最初我只是把它當(dāng)做一個(gè)“高級(jí)數(shù)碼管”用來顯示幾個(gè)關(guān)鍵變量后來它成了狀態(tài)機(jī)的“儀表盤”讓我能一眼看清系統(tǒng)運(yùn)行軌跡再后來它演變?yōu)樵诰€調(diào)試器支持變量修改、命令下發(fā)、日志滾動(dòng)而現(xiàn)在它是我設(shè)計(jì)系統(tǒng)時(shí)的“第一用戶界面”——在硬件原理圖定稿前我就先規(guī)劃好OLED的顯示布局因?yàn)檫@直接決定了軟件模塊的接口定義和數(shù)據(jù)流向。舉個(gè)例子在設(shè)計(jì)一個(gè)四軸飛行器飛控時(shí)我先畫好OLED的四分區(qū)左上角顯示姿態(tài)角Roll/Pitch/Yaw右上角顯示電池電壓和剩余電量左下角顯示GPS狀態(tài)和衛(wèi)星數(shù)右下角顯示遙控信號(hào)質(zhì)量。這個(gè)布局反過來約束了傳感器驅(qū)動(dòng)、電源管理、定位模塊的API設(shè)計(jì)——所有模塊必須提供符合該布局的數(shù)據(jù)結(jié)構(gòu)否則就無法接入調(diào)試面板。這種“以觀測(cè)驅(qū)動(dòng)設(shè)計(jì)”的思維讓系統(tǒng)架構(gòu)天然具備可維護(hù)性和可測(cè)試性。另一個(gè)被低估的價(jià)值是“降低溝通成本”。在團(tuán)隊(duì)協(xié)作中硬件工程師、嵌入式工程師、測(cè)試工程師對(duì)同一個(gè)問題的理解常有偏差。而一塊實(shí)時(shí)刷新的OLED就像一個(gè)客觀的第三方見證者。比如當(dāng)測(cè)試報(bào)告說“設(shè)備在高溫下重啟”硬件工程師認(rèn)為是電源不穩(wěn)嵌入式工程師懷疑是看門狗誤觸發(fā)這時(shí)把OLED接入顯示實(shí)時(shí)的VDD電壓、看門狗喂狗時(shí)間戳、關(guān)鍵任務(wù)執(zhí)行狀態(tài)三方盯著屏幕看幾分鐘結(jié)論自然浮現(xiàn)。我
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
一个色导综合| 啊啊啊啊啊啊好湿好爽视频| 国产精品一区二区黄片| 激情五月婷婷综合| 日韩在线电影| 亚洲国产精品无石码久久| 少妇被c 黄 免费观看| 后入式免费视频| A一区片| 黄色不卡视频| 9精品久久久久| 国产精品一区二区久久精品| 中文字幕在线免费观看视频| 亚洲国内精品成人不卡| 婷婷在线视频在线观看| www.久久| 亚州性色| 91久久久久久久| 国产人妻精品一区二区三区秋霞| 婷婷伊人五月| 中文字幕高清20页视频| 九九热在线精品视频| 青青草自拍视频在线播放| 97国产中文| 精品中文字幕一区二区| 强奸少妇AV导航网| 亚洲欧美自拍偷拍| 国产成人一级av88| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 色麻豆AV| 国产 无码 一区二区| 91AV老熟女视频| 丰满人妻-区二区三区免费看| 成人性爱AV在线免费观看| 精品 码产区一区二-1080P高清在线www-B029AV | 精品人妻一区二区免费看| 久久黄色视频一区二区三区| 欧美日韩97在线| 亚洲阿v天堂无码z2018| 国产精品一区二区密臀| 国产熟女| 久久久久久久久久9| 极品极品色影院| 国产精品一二三| 激情综合五月婷婷| 在线a v| 国产精品97超碰| 国产男女无套视频免费观看| 亚洲天堂精品日韩电影| 老女人91| 久久女同性恋一二区| 九九英色视频| 熟妇操花| 亚洲一区二区精品福利| 日韩性爱一级片| 欧美日韩人妻少妇 一区二区三区| 99丝袜福利在线播放| 97超碰超| 麻豆区久久久久亚| 欧美高潮| 中文字幕版| 婷婷五月综合在线| 九九aV| 99精品九九九九九九| 青青草字幕AV| 欧美亚洲国产日本在线,久久精品国产| 天天干夜夜一操| 婷婷五月天丁香花| 凸凹视频在线观看| 99热日本| 99精品视频在线观看| 亚洲国产一级精品毛一级精品看免费视频 | 中出人妻中文字幕91在线| oumeisetu综合| 大香蕉520| 亚洲五码一区二区三区| 亚洲综合婷婷| 九九热精品免费视频| 插欧洲美女欧美精品| 干婷婷综合网| oumeisetu综合| 中国乱伦一区二区| 永久免费av无码网站国产app| 亚欧美色图| baiduhicn.com。| A V少妇特黄三级| 色色激情五月天| 九月婷婷久久| 九九久久国产精品| 大香蕉性欧美| 亚洲图片欧美91N| 91高跟美女在线播放| 夜夜人妻爽| 91久久国产综合精品| 成人熟女区| 激情文学小说一区二区 | 日韩中文欧美| m欧洲一级午老| 精品无码一区二区三区| 天天色播亚洲综合网站| 婷婷五月成人| 综合伊人网12色| 超碰在线一区二区| 图片区小说区| 人妻少妇无码| 亚洲国产一区二区入口| 天天干天天爽| 色综合1991| 国产精品播放| 色哟哟的毛片| 欧美天堂超碰97| 欧美日综合| 欧美特大AA级黄片| 人人爱操| 国产60页| 91欧美偷拍| 91亚洲网站| 日韩去日本高清在| 蜜桃天美传媒AV一区二区三区| 午夜男女爽爽大片免费观看| 九九玖玖精品| 日本国产亚洲一区在线观看| 欧美色图天堂在线| 欧美性91| 久久婷婷国产一区二区色| 97在线观看视频| 日本黄色大片一级视频免费麻豆| 丁香五月天堂网| 久久久久久久久国产| 国产精品秘 福利姬在线观看| 天天干夜夜肏| 国产精品青草综合久久| 男人天堂网站| 青青伊人久久| 一区二区三区在线资源| 影音先锋少妇| 国产97色在线 | 亚洲| 97天堂| 91久久国产精品| 久久精品人体AV| 在线观看AV片| 久久久九九| 六月婷婷色综合| 国内伊人久久久久久网站视频| 1024久久高清视频| 任你爽视频| 91情色| 日日日大屁股骚女人精品| 无码精品蜜桃一区二区三区ww| 色99久草| 在线亚洲丝袜视频网站| 国产女上位好爽在线| 国产亚洲精品第一最新| 日本黄色精品专区网站| www欧美91| 91国产丝袜足交精品视频| 婷婷天堂站| 亚洲精品国语在线播放| 狠狠色五月亚洲91| 加勒比99999| 九九九九97| 人妻在线大香蕉| 一起草日韩| 精品久久久久久中文字幕视频免费 | 97超碰国产亚洲精品资源| 国产精品999aaa| 韩国轻伦国内自拍一区| 在线99热| 色色丁香| 男人的天堂激情| 超碰97欧美在线| 超碰在线91| 人妻日日干| 国语对白在线播放视频| AV免费在线播放一区| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 亚洲熟女人妻中文字幕一区二区| 亚州欧美另类| 91网站18禁| 大香蕉人妻久久| 国产乱子伦一区二区三区免看| 91色鬼| 亚洲91亚洲| 日本高清电影欧美色图| 日韩内射视频| 一区,二区,三区视频| 男人下部插入女人下部 | 亲子敌伦对白在线播放| 一本久道在线综合视频| 婷婷伊人| 91 国产丝袜在线播放-百度| 酒色综合网| 亚洲精品成人动漫在线| 欧美视频边做饭边橾| 男人天堂2019亚洲| 色哟哟av| 久久久久久久伊人精品| 伊人91| 青青草国产亚洲精品久久| 精品96久久| 精品视频在线观看| 人妻-91porn| 亚洲精品丝袜-不卡成人免费……| 蜜臀久久99精品久久久久久久久| 欧美少妇高潮久久91| 91麻豆天美国产欧美高潮| 人人操欧美风骚| 91强热人妻| 激情亚洲天堂| 午夜一区二区三区国产| 久久久中文版| 18啪啪手机免费性爱| 麻豆天美国美国产| 久久久久亚洲| 国产熟女少妇一区| 人妻精品一区二区| 夜夜狼人妻| 操国产高清| 五月丁香狠狠爱| 在线看污网站| 久久久久久久久久久久久久9999| 国产一级舔足在线观看| 五月天色图| 久久久久国产精品久久久| 久久久9品一区二区三区| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 成 人片 黄色大片| 韩日欧亚a级| 九月婷婷久久| 久久久性| 黄色十八禁| 国产精品无码AV网站| 性高潮久久久久久久久久久| 97se综合网| 神马久久久久眼| 国内精品a| 久欲AV| 亚洲在饯| 亚洲蜜臀精品视频久久| 嗯啊啊啊轻点视频 | 精品无人区麻豆乱码1区2区图片| 精品人妻夜夜草| 亚洲AV无码黄色强奸| 成人性交午夜免费片| 高清肉丝中文无码| 成人影 天天操 亚洲| 91在线精品| 人人操,人人液| 夜夜夜夜久久久久| av草草在线电影| 欧美少妇高潮久久91| 中日无幕一二三四区| 一线黄色免费性爱片| 国产精品乱码久久久| 久草男人天堂| 久久久性爱视频| 精品99999久久久久久| 熟妇高潮二区三区| 欧美激情在线观看视频| 一区二区不卡| 试看60秒| 后入人妻无码| 精品少妇一区二区三区| 99热欧美| 亚洲国产成人精品女人久久久| 亚洲十八禁止| 啊啊啊好舒服视频在线观看| 国厂麻豆77q4| 九九九草| 97欧美视频| 久久久久九九九| 亚洲精品九九九| 超碰美国| 国产美女mm131爽爽爽爽| 欧美成人性活片| 九九精品网| 亚洲人妻日日日| 美女被啪到深处抽搐视频| 九九九热| 日韩Va亚洲va欧美Ⅴa久久| 日韩人妻制服丝袜av| 国产动漫操逼视频| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 欧美色999| 欧美后入式| 91在线秘 男同| 淫色网综合| 天美传媒AV在线| 天天天天操| 欧美一区二区三熟女剧情| 日B操| 欧美日韩99| 亚洲天堂一区二区| 黄色性爱网网| 嗯嗯啊啊的视频| 亚洲精品第一| 91欧| 91美女丝袜诱惑视频| Aa东京男人的天堂| 国产色呦呦| 亚洲精品白丝| 日本视频在线观看污污污| 97色涩| 强歼乱伦资源网| 97超碰在线资源网站| 无码直播久久久| 91中文精品日韩欧美在线| 亚洲无码视频免费在线观看网址!| 丁香六月激情| 一区二区乱码福利| 国产老熟女| 人人操人人摸avav| 偷拍欧美亚洲| 欧美制服另类丝袜| 亚洲国产一级精品毛一级精品看免费视频 | 老熟女熟妇| 大香蕉十区| 欧美性爱第一页久久| 粘花网06av视频| 黄片视频,下载| 久久久九九| 六月色色| 亚洲无码视频免费在线观看网址!| 伊人影院在线理论播放| 无码 黑人一区二区三区| 裸体1区| 欧美专区日本专区| 日夜伊人网| 美女久久久久久久| 久久国内| 欧美精品三级黄片| 国产视频小说| 婷婷尹人大香蕉免费| 亚洲春色欧美激情自拍| 九九九九九九九九九九九蜜桃| 人人操人人狠狠操| AVE乱伦| 久啪视频| 97亚洲资源| 熟女视频久久| 草草影院日本第一页| 91综合天天看| 97精品97| 欧美日韩人人精品| www.久久久久| 乱伦AVxx| av无线看| 国产精品com| daxiangjiao你懂的| 男人的天堂2010| 国产操逼视频在线观看| 亚洲天天操| 超碰在线1234区| 国产精品91ai| 亚洲综合小说另类图欧美视频激情小说色五月天| 伊人久久综合影院精品久久久| 亚春色色| 午夜福利一区二区三区四区五区色婷婷| 97视频观看| 人妻22p| 美女尤物人人操| 久久精品一区二区一8| 啊啊啊轻点在线观看| 伊人网在线视频| 久久一留热品黄| 精品国产一区二区三区av在线资源| 夜嗨影院| 伊人黄色视频免费观看| 亚洲va有码在线天堂| 久久狠狠色噜噜狠狠狠狠97| 日本媚薬中文字幕在线| 999热日韩精品| 中文欧丝袜诱惑| 亚州色图欧美| 九九九九九九九九九五码| av操操不卡| 91色碰| 激情综合网激情五月天| 精品国产精品一区二区| 日本亚洲熟女视频| 国产精品亚洲免费| 六月婷婷激情| 青青草日韩无码| 女优视频第10页| 国产精品色色| 色狠人在线99| 综合一区二区影视| 久久久久久中文| 国产夫妻性生活视频| 九9精品| 日日骚av| 欧美色图20p| 国产精品96| 国内毛片欧美香蕉精品| 强奸乱伦 亚洲一区| 日韩av免费一级电影| 久久草草亚洲蜜桃臀| 成人无码在线视频网站| 亚洲色图日韩精品| 国产亚洲国产超碰| 亚洲夜夜欢无码一区二区| 国产日比| 超碰超碰95| 人妻天天操天天爽视频免费| 60秒免费小视频| 啊啊啊啊操死我了| 亚州九九九精品视频| 深爱伊人影院| 精品人妻一二三| 欧美AB在线| 精品九九九九九九| 国产综合网站在线播放| 国产亚州高清国产拍精| 无码聚合| 国内毛片热久久思思热| 蜜乳av首页| 久久五月份| 九九热精品在线| 国产黄色小视频网站| 欧美精品久久久久久久丰满| 亚洲精品国产专区在线观看| 99热只有这里有精品| 一色网男人的天堂| 情侣操 逼视频99| 97天天在线| 蜜臀久久99精品久久久| 欧美日韩黄片精品在线| 亚洲天堂7777| 男人亚洲91首页在线| julia中文字幕在线观看| 夜夜爽夜夜摸夜夜操免费视频| 婷婷人妻激情| 操操逼视频| 国产做?爰片久久毛片?片美国| 色色色综合网| 综合天天网| 熟女人妻一区二区三区| 333kkkk·亚洲com久久| 欧美天天插| 韩国嫰模上门援交视频| 欧美中出| 亚洲午夜av| 国产十八禁视频| 亚洲美女精品九九视频| 久久久久久电影| 亚洲成人在线播放| 欧美,亚洲,日韩,v,天堂,手机在线观看| 亚洲情色 自拍| 97资源视频| 污污汅18禁网站在线永久免费观看| 欧美日韩性爱精品| 好屌色综合| 久久久新亚洲AV| 色狠狠色| q2午夜理论片夜色av| 97香蕉网| 天天摸夜夜摸| 日本天天操| 欧美色日本| 国产主播福利| 国产欧美一区二区| 91性网| 国产成人精品日本视频| 2019午夜福利视频| 亚洲精品久久久久毛片A片拉屎 | 国产精品91ai| 91综合色| 久久精精区一区二区一蜜桃一区二区| 国产中文字幕在线| 国产伦精品一区二区三区在线观| 97天天插| 久久美女福利是上海美女| 超碰天天操| 99亚洲国产精品色一区二区三区| 伊人大香蕉在线| 欧美资源| 色五91| 漂亮人妻被强中文字幕hd| 欧美亚洲日本视频久久久| 99在线啪| 久久婷婷精品| 免费精品无码一级毛片牛牛影视| 欧美日韩222| 亚洲天堂五月天国产| 天天摸夜夜摸| 93人人操人人| 青青伊人加勒比海| 国产熟女免费观看久久| 骚鸭AV| 欧美国产日韩高清在线| 综合少妇网| 欧美一区二区亚洲天堂| 欧美九九九| 色婷婷激情| 蜜乳av一区二区三区四区不卡| 大色综合网| 91狠狠狠| 麻豆天美久久91| 超碰激情808| 富女玩鸭子一级毛片| 丝袜夫妻自拍| AV污污污污| 男女香蕉一区二区| 9 9精品一区二区三区| 无码久久国产 | 加勒比中文av| 在线视频一区二区传媒| 草草影院最新网址| 97精品视频在线播放| 特污免视频| 99久久亚洲精品无码毛片潘甜甜| 男人网站婷婷| 中文字幕黑人大片| 国产Aα| 超碰在线日韩一区| 99抽插| 国产精点久久久成人| 欧美性爱一区二区三区| 欧美日韩婷婷中文| 九九色影院| 成人免费视瓶| 热热热热日日漂亮永久永久国产日| a在线视频免费观看| av网站免费看| julia ann久久| 亚洲另类色图片| 熟女人妇一区二区三区| 亚洲欧美另类激情小说| 亚洲第二页| 久妇网| 中文字幕精品资源在线| 乱伦a片视频| 97中文综合| 97玖玖超碰| 免费看毛片操穴| 国产亚洲日韩在线三区黑人| 啊啊啊好想要| av天堂电影网| 性欧美| 伊人久久大香蕉线AV五月天| 午夜天天碰综合视频| 久久久成人国产精品无码| 中文字幕丰满子伦无码专区在线视频最新| 欧美色道啊| 天天看人人操屄犊摸阴| 性爱动态120秒| 日本三级日本三级99| 国产精品久久久久无码A√| 国产搭汕a级片| 国产三级中文字幕粉嫩| 狠狠亚洲| 日本 免费 一区二区三区 久久香蕉 | 毛片电影一区二区三区| 色哟哟511老熟女| 天天做天天爱夜夜爽毛片试看| 精品视频一区二区| 精品无av| 欧美久久人体| 亚洲精品人伦一区二区| 玖玖爱综合网| 伦理弟一页| 欧美久久婷婷| 色九九综合AV| 激情文学小说一区二区| 国产视频大全| 久久精品男人的天堂| 亚洲人91| 亚洲黄色网址| 操逼无毒无码免费视频| 九九九九免费视频| 色综合潮| 欧美视频激情久久久久久| 操香逼| 射 色综合| 射丝袜高跟鞋99| 91网亚洲| 五月天欧美色图| 欧美在线综合| 日本国产二线女色| 国产剧情在线| 精品人妻一区二区三区四区不卡在| 超碰人妻久久| 欧美一区二区一级岛国大片| 免费观看国产小粉嫩喷水精品午| 国产精品成人无码a v毛片| 综合欧美日韩在线观看| 国产成人精品亚洲日本| 91日本在线观看| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 在线播放成人网站| 97干日韩| 欧美亚洲涩涩| 日本2020一区二区| 丝袜人妻av一区二区| 国产操逼视频在线观看| 夜夜操美女| 91站街按摩店老熟女熟女| 五月天激情小说网| 大香蕉综合在线| 一本色道久久综合狠狠操| 亚91网| 五十路六十路素人熟女| 久久一区二区三区入口| 狠狠综合网| 精品久久久不卡一区二区| 91劲爆| 狠狠操狠狠操操| 另类 日韩 熟女| 嗯啊不要在线观看嗯啊| 97视频网站在线观看| 日本九九久久99| 国产精品久久久久久久久久久久久久吹| 免费国产电影一区二区| www网站黄| 麻豆天美久久91| 物业黑人 AV一区| 精品国模无码| 影音先锋国产精品| 久久亚洲天天做| 9 1果冻精品视频| 自拍偷拍亚洲熟女妇人精品| 婷婷五月天色| 天操天操夜操夜月操月年年操操| 亚洲中字幕日本一区二区三区| 手机在线视频国内精品| 操穴国产| 日韩欧美久久婷婷网站| 最新国内自拍av免费| 五月丁香啪啪| 青青草原伊人网| 精品少妇人妻av久久免费| 天天综和| 日韩啊V| 亚洲精品男人的天堂| 最新av在线| a亚洲欧美色欲| 天天做天天爱| 男人综合网| 色牛牛AV| 久久久九九| 操逼视频免费日韩无码| 亚州久久9| 美女被啪到深处抽搐视频| 九九热免费视频| 精品久久久不卡一区二区| 中文字幕精品一区欧美| 美国美女AV在线| 欧美se综合| 午夜大香蕉| 丝袜视频网国产90| 韩国午夜理伦三级好看| 亚洲性综合| 国内毛片无遮挡国产| 国产精品91ai| 日韩福利综合一区| 亚洲AV资源| 欧美人人曰人人操人人射射| 男人的天堂.com| 91精品丝袜久久久久久| 亚洲不卡AV在线| 夜夜躁狠狠躁日日躁av| 色综合中文字幕不卡| 9Ⅰ老熟女| 2020视频1区2区3区| 久久久999| 人人澡人人爽人人精品| 97色综合中文网| 欧美综合站| 97香蕉网| 激情四射五月天| 亚洲人妻中文高清| 亚洲AV不卡在线观看尤物| 日本免费人成视频播放120秒| 午夜精品久久久久久久99热影院 | 99国产精品免费| 强奸乱伦Av网| 亚洲AV永久无码精品成人调教| 国产97色在线| 一级性爱网| 亚洲免费97免费| 久久直播国产| 天天干嫩逼网| 欧美熟妇乱码在线一区| 国产 亚洲 丝袜 制服| 青青操视频在线| 激情丁香婷婷| 妇女性内射冈站HDWWWCOM| 成人热久久精品| 婷婷五月天久久久| 夜草网站| 色综合20p| 国产女人高潮视频| 人妻干天天| 亚欧洲日韩国产精品| 翘臀vidoes| 日日噜噜夜夜狠狠视频无| 大香蕉人妻久久| 人妻在线中出视频| 婷婷色影院| 午夜男女爽爽爽影院视频| 亚洲色图自拍| 岛国AV一区二区电影| 亚洲色系另类精品国产| 97欧美综合| 欧美成人一区二区| 99自拍视频| 日韩欧美一级特黄大片| 欧美色网络| 熟女一区二区三区四区| 偷拍 精品另类 凸凹了四区| 日欧亚洲二三区大片不卡| 热99这里有精品综合久久 | 色婷婷香蕉| 日日噜噜夜夜狠狠视频无| 91 亚洲 欧美 日韩 国产 综合| 欧美日韩中文字幕不卡| 日本一片一区| 九九九九九九九精品视频| 亚洲午夜福利在线影院| 色色毛片| 极品销魂美女一区二区| 亚洲天堂少妇| 中文字幕神马久久| 操逼精品视频| 中文字幕国产精品1区| 五月天色色网站| 亚洲中字幕日本一区二区三区| 久久激情四射婷婷丁香五月天| 裸体女人草逼视频播放一区,二区,三区,四区,五区| 91丝袜人妻| 视频在线观看青青99国产| 日韩欧美aⅴ综合网站发布| 久久久婷| 97天天爽| 国产成人精品日本视频| 99久久精品欧美国产| 伦理第一页| 国产91丝袜 在线播放| 蜜屁Av| 97天天操天天干| 99999久久久久9国产精品| 中文字幕 国产 精品| 人、人、摸,人、人、草| 日韩高清黄片| 看大黄色大片原件| ji熟女.com| 亚洲丝袜少妇在线| 友优传媒精品在线一区二区| 无码精品啪啪啪一区二区三区三州 | 91女在线观看| 国产精品经典一卡久久久| 久热免费视频| 五月综合久久| 国产精品老熟女一区二区| 丁香五月婷婷色| 东京日日夜夜| 欧美成人都市人妻| av日韩在线观看电影| 黄色网址在线免费观看| 欧美大香蕉专区网| 抽插无码高清一区| 国产精品无码论坛| 五月丁香大香蕉| 五月丁香啪啪啪| 婷婷五月天影院| 亚洲伊人久久精品狠狠在线| 97精彩视频网站| 久久久穴999| 超碰人妻中文在线| 51一区二区三区| 久久久久成人网| 久久人妻熟女一区二区| 久久久久久亚洲Av无码精| 99人妻碰碰碰久久久久禁片| 国产东北女人在线视频| 日韩欧美俄罗斯A片| 天天日少妇逼AV| 天天综合亚在线| 日韩二三区| 亚洲第一页综合在线| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 蜜臀久久99精品久久久久久-DVD原版全| 东京热男人的天堂| 国产亚洲日韩欧| 91色婷婷综合久久中文字幕二区| 婷婷亚洲综合| 麻豆 亚洲 97| 夜夜夜夜久久久久| 呦呦一区| 插欧洲美女欧美精品| 欧美拳交在线播放| 东北操逼| 女欧美一区二三区| 图片区小说区| 国内操逼视频二区| 亚洲骚男同com| 中文AV制服乱伦| 免费综合亚洲中文| 久久精品72| 97色欧洲| 福利视频一区二区微拍| 九九九九久久久| 久久国产99精品72福利| 国产女主播视频在线观看| 天天拍夜夜| 亚洲砖码砖专无区2023| 欧美亚洲激情小说| 99少妇| 热无码中文亚洲H一道本一区二区| 噜噜吧,噜噜色,噜噜| av亚洲天堂资源网站| 国产精品一区二区麻豆| 亚洲图片婷婷五月天| 人妻啊啊人妻啊啊| 好色美女九七第一页| 国产三级在线现体验区| 精品国产少妇高潮视频| 久久久成人免费av电影| 日韩综合无码色欲vv| 亚洲中文字幕噜噜噜久久久| 天天综合欧美黑人| 国产精品一区av在线| 可以看的av| 超碰欧美COM| 午夜120视频在线观看| 天天摸天天碰天天添青青| 黑人性欧美| 岛国片在线观看视频亚洲| 东北女人被操| 久草精品国产99| 三级三级三级日本99| 亚洲中文sv| 家庭乱伦网站国产| 精品网站9999| 很很操在线| 国产精品一区人妻精品阁在线| 日本大香蕉综合网| 国产成人无码网站在线视频| 亚洲在钱| 五月丁香社区婷婷日韩欧美精品影院| 97频视在线| 日本日逼高清| 韩国嫰模上门援交视频| 岛国视频一二三区| 一区二区三区色综合| 午夜激情成人在线观看| 日韩欧美偷拍美女视频| 狠狠久久手机视频精品| 人妻久久久| 超碰91在线| 啊啊啊啊视频免费| 欧美日韩大香蕉| 欧美色图亚洲特色| 岛国激情视频软件| 人妻社区男人天堂| 国产av强奸美女| 熟女网站最新| 性爱av在线免费观看| 无码九九九九| 久久综合99| 91久| 操香逼| 看免费的黄片| 懂色影视久久| www激情| 国产在线综合福利网站| 有码人妻系列| 国产精品美女久久久久AⅤ国产馆| 欧美精品久久96人妻无码| 久久99国产精品| 91偷拍欧美亚洲| 色就色综合| 安微少妇操BBB| 久久婷婷五月天| 先锋影音av先锋一区| 天天看特黄的免费网站| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 人人噜夜夜操| 超碰人人色| 久久夜夜| 欧美性五月| 欧美综合站| 久草视频在线视频在线视频在线观看 | 欧美精品偷拍| 婷婷丁香成人| 国产精品精品系列在线观看| 操淫穴亚洲五月丁香 | 97国产精品在线观看| 五月丁香六月激情综合| www欧美91| 91爱做| 口爆吞精在线观看| 中文字幕熟女人妻丝袜| 夜夜高潮夜夜爽高清视频一| 日韩,欧美,中文在线| 亚洲欧美清纯| 欧美激情久久久久| 人妻激情偷乱视频一区二区三区 | 亚洲九月丁香| 超碰97护士| 日本最新免费韩国1区2区视频播放| 黄片无码在线制服| 午夜美女诱惑电源网| 性生活无遮挡纯毛片在线看| 国产AV高清AV无码| 日韩av不卡在线看| 亚洲久久久| 97在线亚洲| 狠狠夜色午夜久久综合在线| 玖色AV| 久久精品国产亚洲AV无码做| 黄色成人网久久久久久| 国产精品久久久久久久免牛肉蒲团| 超91综合网| 人妻中文字幕日韩电影| 黄片视频,下载| 欧美性少妇| 性交一区二区在线播放| 爱我干综合| 特级丰满少妇一级AAAA爱毛片| 一区AV| 69精品| 欧美色性情| 日本国产二线女色| 超碰午夜| 国产SV一线| 女色视频社区| 久久精彩免费视频| 91|九色|国产熟女| 强奸乱伦Av网| 色综合av男人天堂| 国产精品麻豆免费视频| 亚洲一区日韩精品中文字幕| 久久久亚洲熟妇资源| 亚洲凸凹超碰成人| 婷婷色一区| 丁香五月综合| 欧亚免费视频| 欧美性爱系列| 人人人人插| 国产欧美精选自拍一区| 天天操夜夜嗨| 欧美一级久久久久久久大片动画| 色黄污美女啪啪啪免费网站| 视频不卡中文字幕| 欧美一级A一级a爱片久久| 欧美操逼录像国产黄色国产| 久久久涩| 九九热re99re6在线精品| 91n处女在线观看| 国产夫妻性生活视频| 怡春院久久| 亚洲综合色图欧美| 黑人综合网| 射久久| 国产亚洲精品A在线观看下载| 少妇人妻在线| 国产精品在线免费| 国产操逼网站亚洲一级黄色| 中文字幕蜜乳av| 性爱网站一区二区| 在线观看不卡一区二区三区| 伦伦成年午夜免费视频| 伊人久久大香线蕉无码| 精品久久久亚洲AV成人网站| 懂色AV蜜臀无码精品APP| 深夜激情无码| aaa一级黄片| 欧美亚洲综合色| 国产九月婷婷| 第二页中文字幕| 欧美72网页| 久久国模av| 九一国产精品| 天天色怡春院| a啊啊啊啊啊啊啊啊一区二区| 亚洲91网| 小视频国产| 99性视频| 国产少妇与亚洲av| 日韩欧美中文字| 国产乱码久久久| 亚洲伊人久久综合97| 极品销魂美女一区二区 | 天堂蜜桃无码视频一区二区| 欧洲精品在线播放| 中文字幕女同在线| 91四海无码日韩欧美| 国产无码精品无码| 黄色电影观看久久9| 能看的av| 五十路熟女工口 | 2017天天插| 免费在线看黄片av| 蜜乳AV一区| 久久国内| 伊人综合色网| 91男同| 后入合集| 国内毛片热久久思思热| 欧美一级美片在线观看免费| 精品区国产区一区二区三区| 日韩精品一区的| 97色诱| 欧美日韩97| 操人人| 后X久久| 成人区人妻精品一| 中文字幕美女91| 一色网男人的天堂| 精吧天堂| 精品无码久久久久久国产浪潮| 伦伦成年午夜免费视频| 激情露脸爱| 啊啊啊啊啊啊好多水| 岛国视频免费在线观看| 75大香蕉| 人妻一区二区三区熟女| 激情综合二| 志村玲子视频一区二区| 91色色综合| 久久综合国产精品国产| 日韩精品99999| 99少妇内射| 综合操逼| 久久精品国产久精国产| 成人av影院在线观看| 性欧美另类高清| 男人久久天堂| 动漫爆乳3D奶水一区在线观看| 好爽免费视频,| 国产免a费看黄片在线| 啊啊啊啊啊啊好湿好爽视频| 狼人狠干| 国产11页| 国产老太乱伦一区| 99这里只有精品| 日夜精品| 久久久com| 欧美激情在线观看视频| 日本99视频| 亚洲操操操无码| 婷婷五月激情综合| 亚洲97网站| 激情综合久久| 久操网在线| 另类 日韩 熟女| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 亚洲乱熟女一区二区三区大香蕉| 亚洲青色欧美| 免费观看的黄色的网站| 免费久久9999| 中文一区在线视频| 久草毛片| 国产成人无码久久精品| 日比av无码| 99色色网| 国产精品 视频| 色婷婷成人综合| 2019精品国产无码成人| 麻豆AV短剧| 99e久久国产精品| 夜夜夜夜爽| 精品人妻伦一二三区久久| 欧美热图99| 偷窥自拍亚洲色图| 久久在线观看免费视频| 亚州中文字幕超碰97| 户外裸露刺激视频第一区| 综合色久欲| 校园春色制服丝袜中文字亚洲 | 青娱乐 成人娱乐在线| 翔田千里Av在线| 1024手机看片欧美日韩| 亚洲AV永久无码一区仙野| 嗯嗯啊啊啊啊轻点视频| 丰满的三级少妇欧美久久久| 国产精品久久久| 亚洲精品天天影视综合网 | 欧美午夜精品久久久久久3D| 久久久97| 中文字幕欧美日本乱码一线二线 | 后入国产| 婷婷精品国产一区二区三区日韩| 人妻系列无码专区中文有码| 久久香蕉国产线看观看亚洲女人 | 久久本道| 资源新线在线天堂| 五月激情天| 欧美日韩午夜精品一区二区三区| 欧美精品三区| 99热在线播放| 伊人网免费视频| 蜜臀在线看片| 亚洲一区二区三区麻豆传媒| 日本日皮视频逼| 97天堂| 天天干夜夜操一区二区| 人妻熟女午夜精品在线| 日本精品无码三级网站| 久久啊啊| 国产精品不卡一区二区三区| 性爱动态120秒| 国产女生在线| 人人操人人爽人人操人人| 97精品人妻一二三四| 久久久久久大| 天天操天天插| 色噜噜人妻丝袜a∨先锋影 | 蜜臀人妻少妇久久在线观看| 国产黄片精品在线| 中文字幕制服诱惑| 日本 情色 1区2区3区| 欧洲无码一区二区| 97婷婷色| 在线观看精品国产免费| 一区二区乱码福利| 亚洲人妻五月丁香婷婷| 亚洲中亚日激情视频| 婷婷情色综合网| 五月天伊人| 精品人妻一区二区三区四区石在线 | 九九九九一区| 日韩欧美中文字| 黄色大片一区二区密桃丝袜| 97啪啪| 亚洲熟女中文字幕在线| 在线观看一级α片刺激高潮视频| 麻豆成人影音在线| 台湾佬大香蕉| 狠狠爱AV| 欧美激色| 粉嫩久久久极品| 夜夜嗷嗷一区二区| 伊人色综合超碰| 婷婷五月天丁香花| 日本女优在线视频福利| 久久国产乱子伦精品免费女人| 亚洲丨在线| 日韩精品亚洲一二三| 色综九九九一区| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 色激情综合网站| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 天天久久久久久| 91精品无码久久久久久久| 97超碰欧美精品| 性感美女啊啊啊在线| 久久偷偷色综合蜜桃| 女色视频社区| 99re3这里只有精品| 久久9亚洲| 久久久工口| 综合干干干av久久久综合网 | 热热色综合网| 激情另类激情| 日本高清视频在线观看黄已三辽| 日本久久久久久久久久| 日韩综合97p| 超碰诱惑|