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

ARTICLE DETAIL

資訊詳情

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

串口亂碼排查指南:時鐘偏差、GPIO、中斷、DMA與地線環(huán)路

串口亂碼排查指南:時鐘偏差、GPIO、中斷、DMA與地線環(huán)路 1. 串口亂碼這件事為什么總讓人抓狂搞嵌入式的朋友大概都有過這種體驗代碼邏輯翻來覆去檢查了十幾遍串口助手那邊就是一堆看不懂的字符有時候是規(guī)律的“燙燙燙”有時候是零星的亂碼夾雜著幾個正常字節(jié)還有時候干脆一個字節(jié)都收不到。你換了一根USB轉(zhuǎn)串口線換了一個串口助手甚至換了一塊板子問題依舊。更讓人崩潰的是同樣的代碼昨天還好好的今天上電就亂碼了。串口通信看起來簡單——兩根線一個波特率發(fā)出去收回來就完事了。但恰恰是這種“看起來簡單”的東西一旦出問題排查起來往往比復(fù)雜的網(wǎng)絡(luò)協(xié)議還費勁。因為串口通信的可靠性依賴于太多底層細節(jié)時鐘樹的配置、GPIO工作模式的選擇、中斷優(yōu)先級的安排、DMA通道的分配、地線的質(zhì)量、甚至周圍有沒有大功率設(shè)備在干擾。這篇文章不打算給你講串口通信的基礎(chǔ)教程那種內(nèi)容網(wǎng)上太多了。我想做的是把“串口亂碼”這個現(xiàn)象當成一個系統(tǒng)性問題來拆解從五個最常見的根因入手逐一分析背后的原理、排查方法和解決思路。這五個原因分別是時鐘偏差、GPIO模式配置錯誤、中斷處理不當、DMA與緩沖區(qū)問題、地線環(huán)路與硬件干擾。每一個我都會結(jié)合實際案例和可操作的排查步驟來講盡量讓你看完之后能直接上手定位問題。不管你是剛接觸STM32、GD32、ESP32、CH32V這類MCU的新手還是已經(jīng)在做FPGA串口、Linux串口、PLC串口通信的老手這篇文章里的排查思路都是通用的。串口亂碼的本質(zhì)無非是“發(fā)送方和接收方對信號的理解不一致”而我們要做的就是找到這個“不一致”到底出在哪里。2. 五個核心原因的整體排查思路2.1 為什么先看時鐘偏差串口通信是異步通信沒有單獨的時鐘線。發(fā)送方和接收方各自用自己的時鐘來約定波特率雙方靠起始位來同步。這就意味著如果發(fā)送方的實際波特率和接收方預(yù)期的波特率偏差超過一定范圍采樣就會出錯數(shù)據(jù)就會亂。這個容忍范圍是多少呢對于標準的UART協(xié)議接收方通常在每個位的中間位置采樣。如果波特率偏差導(dǎo)致采樣點偏移超過半個位周期就會采到錯誤的位。理論上總偏差發(fā)送方偏差接收方偏差不能超過±5%實際工程中建議控制在±2%以內(nèi)才比較穩(wěn)妥。時鐘偏差的來源主要有幾個一是系統(tǒng)時鐘配置錯誤比如外部晶振頻率和代碼里寫的不一致二是PLL倍頻參數(shù)算錯了三是波特率分頻系數(shù)計算時用了整數(shù)除法導(dǎo)致截斷誤差四是時鐘源本身精度不夠比如用內(nèi)部RC振蕩器做時鐘源。2.2 GPIO模式為什么會影響串口很多人覺得GPIO配置就是選個復(fù)用功能就完事了但實際上GPIO的工作模式對串口通信質(zhì)量影響很大。推挽輸出和開漏輸出的驅(qū)動能力不同上拉和下拉會影響空閑電平復(fù)用功能的映射關(guān)系如果搞錯了TX和RX可能根本就沒接到USART外設(shè)上。特別是在STM32、GD32這類MCU上GPIO的8種工作模式輸入浮空、輸入上拉、輸入下拉、模擬輸入、開漏輸出、推挽輸出、推挽復(fù)用、開漏復(fù)用如果選錯了輕則通信不穩(wěn)定重則完全不通。而且不同系列的MCU復(fù)用功能的配置方式還不一樣有的用AFR寄存器有的用AFIO有的用設(shè)備樹。2.3 中斷處理不當會帶來什么后果串口通信中中斷是用來處理接收和發(fā)送事件的。如果中斷優(yōu)先級設(shè)置不當或者中斷服務(wù)函數(shù)里做了太多耗時操作就會導(dǎo)致數(shù)據(jù)丟失或接收緩沖區(qū)溢出。更隱蔽的問題是中斷嵌套和中斷上下文的問題——在高優(yōu)先級中斷里調(diào)用了低優(yōu)先級的串口發(fā)送函數(shù)或者在中斷里用了阻塞式的延時都會導(dǎo)致串口行為異常。還有一種情況是中斷進不去或者進去了但標志位沒清除干凈導(dǎo)致反復(fù)進中斷或者再也進不去。這類問題在CH32V、GD32等國產(chǎn)MCU上尤其常見因為中斷向量表的配置和GCC編譯器的屬性聲明方式跟Keil不太一樣。2.4 DMA和緩沖區(qū)的關(guān)系用DMA做串口收發(fā)是很常見的優(yōu)化手段但DMA配置不當也會導(dǎo)致亂碼。比如DMA的傳輸寬度設(shè)置錯了字節(jié)vs半字vs字或者DMA的源地址和目標地址搞反了或者DMA傳輸完成中斷和串口空閑中斷的配合有問題。緩沖區(qū)的問題更隱蔽發(fā)送緩沖區(qū)被覆蓋、接收緩沖區(qū)溢出、緩沖區(qū)大小和DMA傳輸長度不匹配這些都會導(dǎo)致數(shù)據(jù)錯亂。而且這類問題往往不是每次都出現(xiàn)可能跑幾個小時才復(fù)現(xiàn)一次排查起來非常頭疼。2.5 地線環(huán)路為什么是隱形殺手前面四個原因都是軟件和配置層面的地線環(huán)路是純硬件問題。當兩個設(shè)備通過串口連接時如果它們各自接了不同的電源地或者地線走線形成了環(huán)路就會在地線上產(chǎn)生電流進而導(dǎo)致信號電平的參考點發(fā)生偏移。這種偏移可能表現(xiàn)為偶發(fā)的亂碼也可能表現(xiàn)為通信距離縮短甚至可能損壞收發(fā)器芯片。地線環(huán)路的問題在實驗室里往往不容易復(fù)現(xiàn)因為實驗室的設(shè)備通常共地良好。但到了現(xiàn)場特別是工業(yè)環(huán)境或者長距離通信場景地線環(huán)路就成了高頻問題。3. 時鐘偏差最容易被忽略的根因3.1 波特率是怎么算出來的要理解時鐘偏差首先得搞清楚波特率是怎么從系統(tǒng)時鐘算出來的。以STM32為例USART的波特率計算公式是BaudRate fCK / (16 * USARTDIV)其中fCK是USART外設(shè)的時鐘頻率USARTDIV是一個分頻系數(shù)由整數(shù)部分和小數(shù)部分組成。比如系統(tǒng)時鐘72MHz要得到115200的波特率USARTDIV 72000000 / (16 * 115200) 39.0625整數(shù)部分是39小數(shù)部分是0.0625。小數(shù)部分再乘以16得到1所以BRR寄存器的值就是0x271。你可以自己算一下72000000 / (16 * 39.0625) 115200剛好。但問題在于很多MCU的波特率寄存器小數(shù)部分只有4位也就是精度只有1/16。如果你算出來的小數(shù)部分不能精確表示就會有截斷誤差。比如某個時鐘頻率下算出來的USARTDIV是39.07小數(shù)部分0.07乘以16等于1.12只能取1實際分頻就是39.0625誤差很小。但如果算出來是39.5小數(shù)部分0.5乘以16等于8剛好能表示沒問題。最怕的是算出來小數(shù)部分接近0.5但又不是0.5的情況誤差就會比較大。3.2 實際案例GD32F470的時鐘配置陷阱我之前用GD32F470VET6做項目的時候遇到過一個典型的時鐘偏差問題。代碼是從GD32F407的工程移植過來的系統(tǒng)時鐘配置看起來一樣都是200MHz。但串口就是亂碼用示波器量了一下TX引腳發(fā)現(xiàn)實際波特率大概是108000左右跟設(shè)定的115200差了6%以上。排查過程是這樣的先確認了外部晶振是25MHz然后檢查PLL配置。GD32F470的PLL配置和F407有些差異特別是PLL分頻系數(shù)和倍頻系數(shù)的組合。F407的工程里用的是25MHz晶振PLLM25PLLN400PLLP2得到200MHz。但F470的PLL架構(gòu)略有不同同樣的參數(shù)配置出來的時鐘不是200MHz而是192MHz左右。用192MHz去算115200的波特率USARTDIV 192000000 / (16 * 115200) 104.1667整數(shù)部分104小數(shù)部分0.1667乘以16等于2.67取2實際分頻104.125實際波特率 192000000 / (16 * 104.125) 115240左右誤差0.03%看起來沒問題啊。但問題在于GD32F470的USART時鐘源不一定直接來自系統(tǒng)時鐘。如果USART掛在APB1上而APB1的分頻系數(shù)設(shè)置不對實際時鐘可能又不一樣。我最后查出來是APB1的分頻系數(shù)設(shè)成了4而不是2導(dǎo)致USART時鐘只有48MHz算出來的波特率偏差就大了。排查時鐘偏差的第一步用示波器或者邏輯分析儀量一下TX引腳的實際波特率。如果沒有儀器可以發(fā)送已知的固定字節(jié)比如0x55用示波器看方波的周期周期倒數(shù)就是實際波特率。3.3 內(nèi)部RC振蕩器的坑有些低成本方案會用MCU內(nèi)部的RC振蕩器作為時鐘源省掉外部晶振。內(nèi)部RC的精度通常在±1%到±5%之間而且隨溫度變化很大。如果你用內(nèi)部RC做時鐘源波特率偏差可能一開始就在臨界點上溫度一變就亂碼了。我見過一個案例某產(chǎn)品用STM32F030的內(nèi)部HSI8MHz做時鐘源波特率設(shè)的9600。常溫下通信正常到了冬天戶外溫度零下十幾度就開始間歇性亂碼。后來換成外部晶振問題就消失了。所以如果你的項目對串口通信可靠性有要求建議還是用外部晶振。如果實在要用內(nèi)部RC至少要做溫度補償或者把波特率降下來波特率越低對時鐘偏差的容忍度越高。3.4 波特率偏差的容忍度計算前面提到總偏差不能超過±5%但這個數(shù)字是怎么來的我們來推導(dǎo)一下。UART接收方在每個位的中間采樣。假設(shè)發(fā)送方的波特率是T接收方的波特率是R偏差為誤差 (T - R) / R接收方從起始位的下降沿開始計數(shù)到第n個位的采樣點累計的時間誤差是累計誤差 n * 位周期 * 誤差對于8位數(shù)據(jù)1位停止位最壞情況下第9個位停止位的采樣點偏移最大。如果累計誤差超過半個位周期就會采錯9 * 位周期 * 誤差 0.5 * 位周期 誤差 0.5 / 9 5.56%所以理論上±5%是極限但實際工程中要考慮噪聲、信號邊沿抖動等因素建議控制在±2%以內(nèi)。對于115200這種高波特率位周期只有8.68微秒對時鐘精度的要求就更高了。4. GPIO模式配置不只是選個復(fù)用功能4.1 GPIO的8種工作模式到底怎么選STM32和GD32系列MCU的GPIO有8種工作模式很多人配置串口的時候直接抄例程選個“推挽復(fù)用”就完事了。但實際上TX和RX的模式選擇是有講究的。TX引腳應(yīng)該配置為推挽復(fù)用輸出GPIO_Mode_AF_PP。推挽輸出的驅(qū)動能力強能提供足夠的電流驅(qū)動串口線。開漏輸出需要外部上拉電阻如果上拉電阻太大上升沿會變緩高速通信時可能導(dǎo)致位采樣錯誤。RX引腳應(yīng)該配置為浮空輸入GPIO_Mode_IN_FLOATING或者上拉輸入GPIO_Mode_IPU。浮空輸入適合外部已經(jīng)有上拉電阻的情況上拉輸入適合外部沒有上拉的情況。如果配成下拉輸入空閑電平會被拉低接收方會一直認為收到了起始位導(dǎo)致亂碼。我見過一個案例有人把RX配成了下拉輸入結(jié)果串口助手一直收到0x00。因為空閑狀態(tài)下RX被拉低接收方認為是起始位然后采樣8個位都是0最后停止位也是0就收到了0x00。這種情況用示波器看TX引腳是正常的但RX引腳一直被拉低。4.2 復(fù)用功能映射的坑不同系列的MCU串口引腳的復(fù)用功能映射方式不一樣。STM32F1系列用AFIO寄存器來重映射F4系列用AFR寄存器來選擇復(fù)用功能編號GD32F470跟F4類似但也有差異。以STM32F407為例USART1的TX可以映射到PA9或者PB6RX可以映射到PA10或者PB7。如果你在代碼里配置了PA9為復(fù)用功能但沒有設(shè)置AFR寄存器選擇AF7USART1那PA9可能就接到了別的外設(shè)上串口自然不通。GD32F470VET6的復(fù)用功能配置跟STM32F4類似但AF編號可能不同。比如USART0的TX在PA9上AF編號是AF7但有些GD32型號可能是AF8。這個一定要查數(shù)據(jù)手冊的復(fù)用功能映射表不能憑經(jīng)驗猜。4.3 GPIO速度設(shè)置的影響GPIO的輸出速度GPIO_Speed也是一個容易被忽略的參數(shù)。STM32的GPIO速度有2MHz、25MHz、50MHz、100MHz幾檔。速度越高功耗越大但邊沿越陡峭。對于115200的波特率位周期8.68微秒邊沿時間只要遠小于位周期就行。2MHz的速度對應(yīng)邊沿時間大約幾百納秒完全夠用。但如果你把速度設(shè)得太低比如2MHz而波特率又很高比如1Mbps邊沿時間可能占到位的十分之一以上導(dǎo)致采樣點偏移。反過來速度設(shè)得太高雖然邊沿陡峭但EMI輻射也會增大可能干擾其他信號。我的經(jīng)驗是115200及以下的波特率GPIO速度設(shè)25MHz就夠了更高的波特率設(shè)50MHz或100MHz。沒必要一上來就設(shè)最高速度除非你的通信速率確實很高。4.4 設(shè)備樹中的GPIO配置在Linux系統(tǒng)上做串口通信GPIO的配置是通過設(shè)備樹Device Tree來描述的。比如全志V3S或者Jetson TK1這類平臺串口的引腳配置在設(shè)備樹的pinctrl節(jié)點里。一個典型的設(shè)備樹串口配置是這樣的uart0 { pinctrl-names default; pinctrl-0 uart0_pins_a; status okay; }; uart0_pins_a: uart00 { pins PB4, PB5; function uart0; };如果設(shè)備樹里的引腳配置和實際硬件不一致串口就不會工作。而且Linux下的串口設(shè)備節(jié)點/dev/ttyS0等需要正確的權(quán)限才能訪問否則會報“Permission denied”。在Ubuntu下查看串口設(shè)備可以用ls -l /dev/ttyS* ls -l /dev/ttyUSB* dmesg | grep tty如果串口被其他程序占用了可以用lsof查看lsof /dev/ttyUSB0Win7下查看串口被哪個程序占用可以用“資源監(jiān)視器”或者第三方工具如Process Explorer來查。5. 中斷處理優(yōu)先級、上下文與標志位5.1 中斷優(yōu)先級配置的常見錯誤串口中斷的優(yōu)先級配置直接影響通信的實時性和可靠性。如果串口接收中斷的優(yōu)先級太低可能被其他高優(yōu)先級中斷打斷導(dǎo)致接收數(shù)據(jù)丟失。如果優(yōu)先級太高又可能影響其他關(guān)鍵任務(wù)的執(zhí)行。在STM32和GD32上中斷優(yōu)先級分為搶占優(yōu)先級和響應(yīng)優(yōu)先級。搶占優(yōu)先級決定能否嵌套響應(yīng)優(yōu)先級決定同搶占優(yōu)先級下的排隊順序。串口接收中斷一般建議設(shè)置為中等偏高的搶占優(yōu)先級確保能及時響應(yīng)但不要高到影響系統(tǒng)滴答定時器SysTick等關(guān)鍵中斷。我遇到過一個案例有人把串口接收中斷的搶占優(yōu)先級設(shè)成了最低同時系統(tǒng)里有一個高優(yōu)先級的定時器中斷每100微秒觸發(fā)一次每次執(zhí)行50微秒。結(jié)果串口接收中斷經(jīng)常被延遲導(dǎo)致接收緩沖區(qū)溢出數(shù)據(jù)丟失。5.2 中斷服務(wù)函數(shù)里的禁忌操作中斷服務(wù)函數(shù)ISR應(yīng)該盡可能短小精悍。以下操作在ISR里是禁忌阻塞式延時在ISR里調(diào)用delay_ms()之類的函數(shù)會導(dǎo)致其他中斷無法響應(yīng)。浮點運算如果MCU沒有FPU浮點運算會消耗大量時間即使有FPU也要注意上下文保存的問題。動態(tài)內(nèi)存分配malloc()和free()不是可重入的在ISR里調(diào)用可能導(dǎo)致堆損壞。打印調(diào)試信息在ISR里調(diào)用printf()通過串口輸出會導(dǎo)致遞歸調(diào)用或者死鎖。正確的做法是在ISR里只做最少的事情——讀取數(shù)據(jù)、清除標志位、把數(shù)據(jù)放入緩沖區(qū)然后設(shè)置一個標志位或者發(fā)送信號量讓主循環(huán)去處理后續(xù)邏輯。5.3 CH32V在GCC下的中斷函數(shù)定義CH32V系列是RISC-V內(nèi)核的MCU在GCC編譯器下定義中斷函數(shù)的方式和ARM核不太一樣。ARM核用__attribute__((interrupt))或者特定的中斷向量表而CH32V需要用__attribute__((interrupt(WCH-Interrupt-fast)))來聲明。一個典型的CH32V串口中斷函數(shù)定義void USART1_IRQHandler(void) __attribute__((interrupt(WCH-Interrupt-fast))); void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) ! RESET) { uint8_t data USART_ReceiveData(USART1); // 處理數(shù)據(jù) USART_ClearITPendingBit(USART1, USART_IT_RXNE); } }如果忘了加__attribute__((interrupt))編譯器不會生成正確的中斷返回指令導(dǎo)致中斷進去之后出不來或者返回地址錯誤程序跑飛。5.4 中斷標志位清除的時機中斷標志位的清除時機很關(guān)鍵。以STM32的USART為例接收中斷標志位RXNE在讀取數(shù)據(jù)寄存器DR時自動清除但有些標志位需要手動清除比如溢出錯誤標志ORE、幀錯誤標志FE、噪聲標志NE等。如果ORE標志沒有及時清除會導(dǎo)致后續(xù)接收中斷無法觸發(fā)。我見過一個案例串口因為噪聲導(dǎo)致了一次ORE但代碼里沒有處理ORE結(jié)果串口再也收不到數(shù)據(jù)了。排查了半天才發(fā)現(xiàn)是ORE標志沒清。正確的做法是在中斷服務(wù)函數(shù)里檢查所有可能的錯誤標志并逐一清除void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) ! RESET) { uint8_t data USART_ReceiveData(USART1); // 處理數(shù)據(jù) } if(USART_GetITStatus(USART1, USART_IT_ORE) ! RESET) { USART_ClearITPendingBit(USART1, USART_IT_ORE); } if(USART_GetITStatus(USART1, USART_IT_FE) ! RESET) { USART_ClearITPendingBit(USART1, USART_IT_FE); } }5.5 中斷進不去的原因排查中斷進不去是另一個常見問題。可能的原因包括中斷使能位沒有設(shè)置NVIC_EnableIRQ沒調(diào)用中斷向量表地址不對特別是用了Bootloader或者重映射的情況中斷優(yōu)先級分組設(shè)置錯誤中斷標志位在使能中斷之前就已經(jīng)被清除了全局中斷沒有使能__enable_irq()沒調(diào)用排查的時候可以一步步來先確認NVIC的中斷使能寄存器ISER對應(yīng)位是否置1再確認中斷掛起寄存器ISPR是否有對應(yīng)的掛起位然后確認中斷向量表里的地址是否正確。6. DMA與緩沖區(qū)效率提升背后的陷阱6.1 串口DMA的配置要點用DMA做串口收發(fā)可以大大減輕CPU負擔但配置不當也會引入新的問題。以STM32為例串口TX的DMA配置需要注意DMA通道要選對不同串口對應(yīng)的DMA通道不一樣傳輸方向是內(nèi)存到外設(shè)Memory to Peripheral傳輸寬度要和數(shù)據(jù)寬度匹配串口是字節(jié)傳輸所以源和目標都應(yīng)該是字節(jié)ByteDMA模式一般選單次模式Normal不是循環(huán)模式Circular傳輸完成中斷要正確配置一個典型的配置代碼DMA_InitTypeDef DMA_InitStructure; DMA_InitStructure.DMA_PeripheralBaseAddr (uint32_t)USART1-DR; DMA_InitStructure.DMA_MemoryBaseAddr (uint32_t)tx_buffer; DMA_InitStructure.DMA_DIR DMA_DIR_PeripheralDST; DMA_InitStructure.DMA_BufferSize tx_len; DMA_InitStructure.DMA_PeripheralInc DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode DMA_Mode_Normal; DMA_InitStructure.DMA_Priority DMA_Priority_Medium; DMA_Init(DMA1_Channel4, DMA_InitStructure);如果DMA_PeripheralDataSize和DMA_MemoryDataSize設(shè)成了HalfWord或者Word而串口是字節(jié)傳輸就會導(dǎo)致數(shù)據(jù)錯位。比如發(fā)送0x01 0x02 0x03 0x04DMA按半字傳輸可能會變成0x0201 0x0403接收方看到的就是亂碼。6.2 接收緩沖區(qū)的設(shè)計串口接收緩沖區(qū)的設(shè)計直接影響數(shù)據(jù)完整性。常見的方案有單緩沖區(qū)簡單但接收和處理不能同時進行容易丟數(shù)據(jù)雙緩沖區(qū)Ping-Pong一個緩沖區(qū)接收另一個處理交替使用環(huán)形緩沖區(qū)適合不定長數(shù)據(jù)但實現(xiàn)稍復(fù)雜用DMA接收時通常配合串口空閑中斷IDLE來判斷一幀數(shù)據(jù)結(jié)束??臻e中斷的觸發(fā)條件是總線空閑一個字節(jié)的時間。在空閑中斷里讀取DMA的剩余傳輸數(shù)量計算出接收到的數(shù)據(jù)長度然后處理數(shù)據(jù)。這里有一個坑DMA的剩余傳輸數(shù)量寄存器NDTR在傳輸過程中是實時變化的讀取的時候要注意原子性。如果先讀NDTR再讀數(shù)據(jù)可能在讀NDTR之后、讀數(shù)據(jù)之前又收到了新數(shù)據(jù)導(dǎo)致長度計算錯誤。6.3 緩沖區(qū)溢出的排查緩沖區(qū)溢出是串口亂碼的常見原因之一。表現(xiàn)是接收到的數(shù)據(jù)前半部分正常后半部分亂碼或者數(shù)據(jù)整體偏移。排查方法在接收中斷或者DMA完成中斷里記錄每次接收的數(shù)據(jù)長度和緩沖區(qū)剩余空間。如果發(fā)現(xiàn)接收長度超過了緩沖區(qū)大小就說明溢出了。解決方法是增大緩沖區(qū)或者提高數(shù)據(jù)處理速度。如果數(shù)據(jù)處理本身很慢可以考慮用多級緩沖或者把數(shù)據(jù)先存到外部RAM里。6.4 串口DMA與中斷的配合串口DMA和中斷的配合需要仔細設(shè)計。以接收為例通常的流程是串口接收DMA配置為循環(huán)模式緩沖區(qū)大小設(shè)為N串口空閑中斷使能空閑中斷觸發(fā)時讀取DMA剩余傳輸數(shù)量計算接收長度處理數(shù)據(jù)重置DMA如果需要這里的關(guān)鍵是DMA模式的選擇。如果用循環(huán)模式DMA會一直循環(huán)填充緩沖區(qū)不會停止。如果用單次模式每次接收完需要重新配置DMA。循環(huán)模式適合連續(xù)數(shù)據(jù)流單次模式適合定長數(shù)據(jù)幀。7. 地線環(huán)路與硬件干擾看不見的殺手7.1 地線環(huán)路是怎么形成的地線環(huán)路是指兩個設(shè)備之間的地線形成了閉合回路。比如設(shè)備A通過串口線連接到設(shè)備B同時設(shè)備A和設(shè)備B又各自通過電源線接到了同一個插線板上。這樣串口線的地線和電源線的地線就形成了一個環(huán)路。當?shù)鼐€上有電流流過時由于地線本身有電阻和電感會在不同位置產(chǎn)生電位差。這個電位差會疊加在串口信號上導(dǎo)致接收方看到的電平發(fā)生偏移。偏移小的時候表現(xiàn)為偶發(fā)亂碼偏移大的時候可能完全無法通信。7.2 地線環(huán)路的實際表現(xiàn)地線環(huán)路導(dǎo)致的串口問題有幾個典型特征通信距離越遠問題越嚴重周圍有大功率設(shè)備如電機、變頻器工作時問題加劇用手觸摸設(shè)備外殼或者串口線時亂碼情況會變化換一根短一點的串口線問題可能減輕我遇到過一個工業(yè)現(xiàn)場的案例PLC通過RS485串口連接到一個遠程的儀表距離大概50米。在實驗室里測試完全正常到了現(xiàn)場就頻繁亂碼。后來發(fā)現(xiàn)是PLC和儀表分別接了不同的電源地兩個地之間存在幾伏的電位差。加了一個隔離型RS485收發(fā)器之后問題就解決了。7.3 隔離方案的選擇解決地線環(huán)路最徹底的方法是使用隔離。常見的隔離方案有光耦隔離在TX和RX線上各加一個光耦實現(xiàn)電氣隔離。成本低但速度受限適合低速通信。磁耦隔離用變壓器或者電容隔離速度高但成本也高。隔離型收發(fā)器比如ADM2483、ADM2582等集成了隔離和收發(fā)功能使用方便。選擇隔離方案時需要考慮通信速率、成本、體積等因素。對于115200及以下的波特率光耦隔離就夠用了。對于更高的速率建議用磁耦或者隔離型收發(fā)器。7.4 硬件濾波與保護除了隔離還可以通過硬件濾波來抑制干擾。常見的措施包括在串口線上加共模電感抑制共模干擾在TX和RX線上加TVS管防止靜電和浪涌在收發(fā)器電源引腳加去耦電容一般用100nF和10uF并聯(lián)在RS485總線的A、B線上加偏置電阻確保空閑時電平穩(wěn)定這些措施雖然不能完全消除地線環(huán)路的影響但可以顯著提高通信的可靠性。8. 常見問題速查表與排查流程8.1 串口亂碼問題速查表現(xiàn)象可能原因排查方法解決方案全部亂碼無正常字節(jié)波特率不匹配示波器量TX引腳周期重新計算波特率分頻偶發(fā)亂碼大部分正常時鐘偏差臨界檢查時鐘源精度換外部晶振或降低波特率收到0x00或0xFFGPIO模式錯誤檢查RX引腳電平改為浮空或上拉輸入數(shù)據(jù)錯位字節(jié)順序亂DMA傳輸寬度錯誤檢查DMA數(shù)據(jù)寬度配置改為Byte傳輸接收一段時間后停止中斷標志未清除檢查ORE/FE標志在ISR中清除所有錯誤標志通信距離短就正常地線環(huán)路測量兩地電位差加隔離或共模電感中斷進不去NVIC配置錯誤檢查ISER/ISPR寄存器重新配置中斷優(yōu)先級發(fā)送正常接收亂碼RX引腳配置錯誤檢查RX復(fù)用功能映射查數(shù)據(jù)手冊確認AF編號8.2 系統(tǒng)化排查流程遇到串口亂碼建議按以下順序排查確認硬件連接TX接RXRX接TX地線接好。用萬用表量一下串口線的通斷。量TX引腳波形用示波器或者邏輯分析儀看TX引腳有沒有波形波特率對不對。檢查時鐘配置確認系統(tǒng)時鐘、APB時鐘、USART時鐘的計算是否正確。檢查GPIO配置確認TX和RX的復(fù)用功能映射、工作模式、速度設(shè)置。檢查中斷配置確認中斷優(yōu)先級、中斷使能、標志位清除。檢查DMA配置確認DMA通道、傳輸方向、數(shù)據(jù)寬度、模式。檢查緩沖區(qū)確認緩沖區(qū)大小、讀寫指針、溢出保護。檢查硬件環(huán)境確認地線連接、隔離措施、濾波電路。這個順序是從簡單到復(fù)雜從硬件到軟件。大部分問題在前三步就能定位。8.3 實操心得與避坑技巧心得一先量波形再改代碼。很多人一遇到亂碼就開始改代碼改了半天發(fā)現(xiàn)是硬件問題。先用示波器量一下TX引腳的波形確認波特率和數(shù)據(jù)內(nèi)容能省很多時間。心得二用已知數(shù)據(jù)測試。發(fā)送固定的0x55或0xAA這兩個字節(jié)的方波周期最容易測量。0x55是01010101方波周期等于位周期0xAA是10101010也是方波。用示波器量周期倒數(shù)就是波特率。心得三串口助手也有坑。有些串口助手在接收到錯誤數(shù)據(jù)時會自動丟棄或者顯示異常導(dǎo)致你看到的亂碼和實際接收到的數(shù)據(jù)不一致。建議用示波器或者邏輯分析儀直接抓取原始數(shù)據(jù)。心得四注意電平標準。TTL電平、RS232電平、RS485電平不能直接互連。TTL是0-3.3V或0-5VRS232是負邏輯-15V到15VRS485是差分信號。接錯了不僅亂碼還可能燒芯片。心得五地線一定要接。有些人只接TX和RX不接地線覺得能省一根線。但串口通信的參考電平是地線不接地線的話兩邊的電平參考點不一致必然亂碼。心得六長距離通信要加保護。超過1米的串口線建議加共模電感和TVS管。超過10米的建議用RS485或者加隔離。超過100米的必須用RS485加隔離加中繼。9. 從具體平臺看串口問題的差異性9.1 STM32與GD32的差異STM32和GD32雖然引腳兼容但在串口配置上有一些細微差異。GD32的USART時鐘源選擇比STM32更靈活但默認配置可能不同。比如GD32F470的USART0默認掛在APB2上而STM32F407的USART1也掛在APB2上但分頻系數(shù)可能不同。另外GD32的中斷向量表偏移和STM32可能不一樣特別是在用Bootloader的時候。如果中斷向量表沒有正確重映射中斷就進不去。9.2 ESP32的串口配置ESP32的串口配置和STM32差異較大。ESP32有三個UART默認的UART0用于下載和調(diào)試UART1和UART2可以自由使用。在Arduino框架下用Serial.begin(115200)就可以初始化串口但要注意引腳映射。ESP32的GPIO矩陣允許幾乎任意引腳映射到UART但有些引腳在啟動時有特殊功能不能隨便用。比如GPIO6到GPIO11通常連接了SPI Flash不能用作串口。在PlatformIO下開發(fā)ESP32S3串口輸出的配置和ESP32類似但要注意USB串口和硬件串口的區(qū)別。ESP32S3有內(nèi)置的USB-Serial-JTAG可以直接通過USB輸出串口數(shù)據(jù)不需要額外的USB轉(zhuǎn)串口芯片。9.3 FPGA的串口實現(xiàn)FPGA實現(xiàn)串口發(fā)送ASCII字符串需要自己寫UART發(fā)送模塊。核心是一個波特率發(fā)生器和一個移位寄存器。波特率發(fā)生器的分頻系數(shù)計算分頻系數(shù) 系統(tǒng)時鐘頻率 / 波特率比如系統(tǒng)時鐘50MHz波特率115200分頻系數(shù) 50000000 / 115200 434.027取434實際波特率 50000000 / 434 115207誤差0.006%完全夠用。Verilog實現(xiàn)串口發(fā)送整數(shù)和浮點數(shù)需要先把整數(shù)和浮點數(shù)轉(zhuǎn)換成ASCII字符串然后逐字節(jié)發(fā)送。整數(shù)轉(zhuǎn)換可以用除法和取模浮點數(shù)轉(zhuǎn)換比較復(fù)雜可以用sprintf或者自己實現(xiàn)。9.4 Linux下的串口配置Linux下配置串口用termios結(jié)構(gòu)體設(shè)置波特率、數(shù)據(jù)位、停止位、校驗位等。一個典型的配置struct termios options; tcgetattr(fd, options); cfsetispeed(options, B115200); cfsetospeed(options, B115200); options.c_cflag | (CLOCAL | CREAD); options.c_cflag ~PARENB; options.c_cflag ~CSTOPB; options.c_cflag ~CSIZE; options.c_cflag | CS8; tcsetattr(fd, TCSANOW, options);Linux下串口接收數(shù)據(jù)丟失的常見原因是緩沖區(qū)設(shè)置太小或者讀取速度跟不上??梢杂胹elect()或者poll()來監(jiān)聽串口事件及時讀取數(shù)據(jù)。10. 幾個真實案例的完整復(fù)盤10.1 案例一GD32F470VET6串口亂碼問題描述GD32F470VET6開發(fā)板串口配置為115200-8-N-1發(fā)送字符串“Hello”串口助手收到亂碼。排查過程用示波器量TX引腳發(fā)現(xiàn)波特率約為9600而不是115200。檢查代碼發(fā)現(xiàn)系統(tǒng)時鐘配置為200MHz但USART時鐘源選擇的是APB1而APB1的分頻系數(shù)設(shè)成了4導(dǎo)致USART時鐘只有50MHz。重新計算波特率分頻50000000 / (16 * 115200) 27.126整數(shù)部分27小數(shù)部分0.126*162實際分頻27.125實際波特率 50000000 / (16 * 27.125) 115207誤差0.006%。修改APB1分頻系數(shù)為2USART時鐘變?yōu)?00MHz重新計算分頻100000000 / (16 * 115200) 54.253整數(shù)部分54小數(shù)部分0.253*164實際分頻54.25實際波特率 100000000 / (16 * 54.25) 115207誤差0.006%。重新編譯下載串口輸出正常。經(jīng)驗總結(jié)GD32F470的時鐘樹比F407復(fù)雜APB1和APB2的分頻系數(shù)會影響USART時鐘。配置串口之前一定要確認USART的時鐘源和實際頻率。10.2 案例二ESP32外部中斷導(dǎo)致串口亂碼問題描述ESP32開發(fā)板用外部中斷檢測按鍵同時用串口輸出調(diào)試信息。按鍵按下時串口輸出亂碼。排查過程檢查串口配置波特率115200正常。檢查中斷服務(wù)函數(shù)發(fā)現(xiàn)按鍵中斷的優(yōu)先級設(shè)成了最高而且ISR里有Serial.println()調(diào)用。Serial.println()在ISR里調(diào)用會導(dǎo)致串口發(fā)送和中斷處理沖突因為串口發(fā)送本身也可能觸發(fā)中斷。修改方案在ISR里只設(shè)置一個標志位在主循環(huán)里檢測標志位并輸出調(diào)試信息。重新測試按鍵按下時串口輸出正常。經(jīng)驗總結(jié)ISR里不要調(diào)用串口發(fā)送函數(shù)尤其是高優(yōu)先級中斷。串口發(fā)送最好放在主循環(huán)或者低優(yōu)先級任務(wù)里。10.3 案例三RS485長距離通信亂碼問題描述PLC通過RS485連接遠程儀表距離50米通信頻繁亂碼。排查過程在實驗室用短距離測試通信正常。到現(xiàn)場測量PLC和儀表的地線電位差發(fā)現(xiàn)約有2V的交流電壓。判斷是地線環(huán)路導(dǎo)致的共模干擾。在RS485總線上加裝隔離型收發(fā)器問題解決。經(jīng)驗總結(jié)長距離RS485通信一定要考慮地線環(huán)路問題。隔離是最徹底的解決方案雖然成本高一些但能避免很多現(xiàn)場問題。11. 串口調(diào)試工具與技巧匯總11.1 常用串口調(diào)試工具串口調(diào)試助手Windows下最常用的串口調(diào)試工具支持HEX和ASCII顯示支持定時發(fā)送。SSCOM功能更強大支持多條發(fā)送指令、數(shù)據(jù)校驗、波形顯示。minicomLinux下的串口終端工具適合命令行環(huán)境。screenLinux下簡單的串口終端screen /dev/ttyUSB0 115200即可。邏輯分析儀抓取串口波形分析時序和協(xié)議。示波器測量波特率、電平、邊沿時間。11.2 串口封裝與代碼復(fù)用在實際項目中串口通信代碼通常需要封裝成模塊方便復(fù)用。一個典型的串口封裝包括初始化函數(shù)配置GPIO、USART、中斷、DMA發(fā)送函數(shù)支持阻塞發(fā)送和DMA發(fā)送接收函數(shù)支持中斷接收和DMA接收回調(diào)函數(shù)數(shù)據(jù)接收完成后的處理邏輯C語言下的串口封裝可以用結(jié)構(gòu)體來管理串口實例typedef struct { USART_TypeDef *usart; uint8_t *rx_buffer; uint16_t rx_size; uint16_t rx_head; uint16_t rx_tail; void (*rx_callback)(uint8_t *data, uint16_t len); } uart_handle_t;這種封裝方式在STM32、GD32、CH32V等平臺上都可以通用只需要修改底層的寄存器操作。11.3 串口燒寫失敗的排查串口燒寫失敗也是常見問題可能的原因包括BOOT引腳電平不對STM32需要BOOT01BOOT10進入系統(tǒng)存儲器啟動模式串口線連接錯誤TX接RXRX接TX波特率不匹配有些Bootloader固定用9600或115200復(fù)位時序不對需要先拉低復(fù)位再發(fā)送同步字節(jié)串口被其他程序占用排查的時候可以先確認BOOT引腳電平然后用示波器看TX引腳有沒有數(shù)據(jù)發(fā)出再檢查串口助手的配置。12. 寫在最后的一些個人體會串口亂碼這個問題說大不大說小不小。它不會讓程序崩潰但會讓調(diào)試變得極其痛苦。我這些年踩過的坑總結(jié)下來就是一句話串口通信的可靠性取決于最薄弱的那個環(huán)節(jié)。時鐘、GPIO、中斷、DMA、地線任何一個環(huán)節(jié)出問題都會表現(xiàn)為亂碼。排查的時候我的習慣是先從硬件入手用示波器量波形確認物理層沒問題再往上查配置。軟件配置里優(yōu)先檢查時鐘和GPIO這兩個是最容易出錯的。中斷和DMA的問題往往更隱蔽需要結(jié)合代碼和實際現(xiàn)象來分析。還有一點很重要不要迷信例程。很多例程是針對特定開發(fā)板寫的換一塊板子或者換一個芯片型號時鐘配置、引腳映射可能就不一樣了。一定要查數(shù)據(jù)手冊和參考手冊確認每一個寄存器的配置。最后分享一個小技巧如果你懷疑是波特率偏差導(dǎo)致的亂碼可以試著把波特率降低一半或者降低到9600。如果降低之后通信正常了那基本可以確定是時鐘偏差問題。因為波特率越低對時鐘精度的要求越低容忍度越高。這個方法雖然不能解決根本問題但能幫你快速定位方向。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲 日本 一 二 三| 午夜精品久久久99| 亚洲一区二区三区欧美日韩| 成人无码在线超碰网| 欧美成人精品欧美一级乱黄一区二… | 亚洲无码超碰免费| 97在线欧| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 久久这里只有精品9| 2017超碰| 亚洲综合嫩| 加勒比五月天| 男人的天堂日本东京热| 色999偷自拍拍| 日韩有码一区三区| 欧美有码激情视频一区二区三区| 久久久精品视频免费观看| 久操操AV电影| 亚洲精品一二区| 91亚洲色人| 青青操网| 日本影视久久免费| 台湾一区国产高清在线| av激情亚洲五月天| 国产品精品自在在线午夜免费 | 丰满人妻一区二区三区大胸懂色| 91c色| 国内毛片国产欧美拍| 91大神精品长腿在线观看网站| 综合网亚洲在线| 91色亚洲| 淫荡网址| 99热超碰| 小草精彩毛片| 欧美一区二区在线资源| 国产午夜福利视频在线| AV丝袜少妇| 日本精品国产视频| 天天cao在线| 色噜噜国产精品视频一区二区| 亚洲综人| 国产精品分类在线观看| 久久久成人国产精品无码| 91操人| 婷婷AV一区二区三区| 日韩av一级黄片| 91成人久久| 女人双腿搬开让男人桶| 精品久久久亚洲AV成人网站| 色综合色综合网| 色五月激情综合网| 国产欧美一区二区| www.AV有限公司一区| 好看的久久不射无码影视影院| 久久久久密臀视频| 色约约一区=区三区| www.男人的天堂| 欧美激情专区| 99久久久久久亚洲精品不卡| 黄页网站免费高清在线观看| 国产精品一二三免费网站| 懂色综合久久久| 亚洲天堂性爱| 久操影视| 久久亚州精品成人Av无| 欧美疯狂做爰xxxx| 亚洲欧洲无码97久久精品| 婷婷香网站| 精品夜夜澡人妻无码AV| 久综合国内精品自在自线| www黄片免费看com| 岛国小电影| 伊人国产视频| 性色综合网| 亚洲中文字幕在现观看| 欧美色五月| 国产偷仑| 3PAV乱伦视频| 涩五月婷婷| 91在线/欧洲| 国产97在线播放| 老熟女乱伦一区| 色婷网| 少妇人妻精品| 91丨人妻丨国产丨丝袜| 久久亚洲AV成人精品无码| 丁香五月成人| 婷婷人妻激情| 99老司机精品视频在线观看| 一道本久久棕合爱| 欧美午夜熟妇黑人精品91| 被窝影院午夜看片无码| 久久久噜噜噜久久久| 啊啊啊久久久视频| 国产欧美日韩一区二区三区| 在线天堂999| 日韩电影中文字幕| 日韩欧美字幕亚洲一区二区| 日韩人妻无码精品系列| 久久久久亚洲Av无码专区老牛影视 | 欧美躁死她一区二区| 1204金沙人妻懂旧版免费| 十八禁啪啪视频| 在线国产探花| 女人天堂网| 国产成人手机视频激情| 99啪啪| 色综91| www.久久久久| 综合情欲网| 国产一区二区a毛片| 亚洲免费精品一区| 1769一区| 97干色天堂| 亚洲本色精品一区二区久久| a久久| 999久久芭蕾| 午夜亚洲国产理论秋霞| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 久久久激情| 人人爽夜夜玩视频| 国产 无码 一区二区| 蜜桃久久久久久久| 九月丁香婷婷色| 精品国产一区二区三区久久久蜜臀 | 操逼无毒无码免费视频| 国产在线不卡导航| 18禁久极品美女久久哦哟呀!| 狠久久| 亚洲成a人片在线观看中文!!!| 毛片中心9视频99| 骚熟女AV网| 黄片免费看黄片免费看| 韩国毛片一区二区三区| 久久久久婷婷| 亚洲无992tv| 久久9 9 9精品| 欧美亚洲第一页| 欧美少妇色综合| 黄色毛片A片| 欧美高清第一页| 亚洲免费精品一区| 色呦呦呦在线观看视频| 99夜夜操| 成人老鸭窝人人在线视频| 亚洲欧美在线观看免费| 人妻熟女一区二区在线视频| 一区二区三区四区姦女| 超碰人人操97碰| 97欧美色| 一本久久精品中文字| 看一级黄色视频| 国产午夜福利专区综合| 久久免费9| 日本顶级天天操狠狠操夜夜操中文字幕| 俺去俺来也在线www| 一区在线精品中文字幕| 人妻另类| 欧美日韩国产色五月综合在线| 爱爱60秒免费视频| 这里都是精品在线观看| 欧美性巨大╳╳╳╳╳高跟鞋| 亚洲精品蜜桃久久久| 91在线美女| 精品一啪| 偷窥自拍A片| 天天射天天| 国产精品第一页国产大屁股视频免费区| 老熟女91av| 日韩性爱网址| 中文字幕 码精品视频网站| 久久riav中文精品| 91久热| 99久re热视频精品98| 波多野结衣一级视频| 精品久久久久久中文字幕视频免费| 国产精品久久久午夜夜伦鲁鲁| AV丝袜东京热| 天美传媒av一区二区| 麻豆一区在线| 精品视频一区二区| 亚州男人天堂| 三级日本一区二区三区| 日韩国产乱子伦App| 天天干天天操天天干天天操| WWW黄片COM| 婷婷五月天丁香| 黄色片大香蕉| 国内操逼视频二区| 亚州,欧美在线| 最新无码国产| 综合激情五月天| 欧美97日韩| 国产suv精品一区二六| 91国产丝袜白虎| 欧美色图亚洲色| 国产高清精品福利| 综合久欧洲| 日韩欧美中文字亚洲慕| 精品无码欧美三级| 五月天综合| 青久操| 伦理第一页| 国产91亚洲精品一区二区三区| 久久精品国产亚洲AV无码做| 67914亚洲精品| 伊人亚洲综合| 日韩精品人妻一| 亚洲人在线| 日产123区精品免费观看| 自拍偷拍 日韩欧美| 五月天激情婷婷| 人妻无码视频一区二区三区久久| 国产辣妈在线视频福利| 人妻丝袜无 码视频专区| 91久久久久久久| 日本高清免费一本视频在线观看| AA丁香综合激情| 日韩中文9| 91人妻最真实刺激绿帽| 超碰爽人妻熟女Av| 成人av在线播放| 丁香五月婷婷色| 热热色综合网| 免费A V在线| 色香在线| 久操热线| 欧美色视| 麻豆国产第一| 很黄很色的视频在线观看| 加勒比AV网| 成人av福利在线观看| 少妇专区一二三四五| 少妇久久久久久| 综合网欧美在线| 白嫩少妇| 亚洲一区制服诱惑| 久久精精区一区二区一蜜桃一区二区| 17c嫩草51久久91嫩草| 久九干| 国产无码三级视频在线观看| 级品肉射| 96AV久久久| 亚洲综合中文字幕有码 | 国产丝袜视频| 婷婷AV一区二区三区| 久久久久久中文| juliaann精品熟女一区| 五月婷婷爱六月丁香色| 亚洲成人性爱网站在线播放| 91情色在线| 狠狠图片青青草| 天天日天天色| 免费一级毛片在线视频观看| 国产精品久久久无码AV网站| 少妇综合网| 久久这里只精品| 国产美女91视频| 亚洲av无码成人精品国产| 日本成人免费一区二区三区| 黄页网站成人免费| 国产和美国毛片| 国模限制级电影| 久久人妻精品| 激情五月天视频| 综合久久久久久久综合网| 97视频在线免费观看| 九九久久国产精品怡红院| 国产高清不卡视频| 午夜精品久久久99热蜜桃的功能特点| 爱欲AV| 神马久久久久眼| 26uuu国产成人综合| 亚洲另类小说卡通动漫| 色波多| 免费一级黄色录像影片| 伊人久久在线视频观看| 93人人操人人| 丁香九月激情| 天天综合网~69| 五月天婷婷欧美三区| 中文字幕日本久久| 色九九九九久| 一二视频神马久久传媒| 欧美爱国产综合、| 欧美综合天天| 柠檬AV导航| 色哟哟的毛片| 超碰97久久国| 中文精品一区二去| 午夜天堂精品久久久久91| 亚洲av无码成人精品国产| 亚洲国产精品久久久久婷婷青年| 乱色老一区二区三区的观看方式 | 久久精品人妻一区二区三区| 亚洲无992tv| 午夜福利免费精品视频| 97人妻色| 天天亚洲| 久操热| 亚洲和欧美裸体美女双飞视频| 亚洲美女30b| 国产suv精品一区二六| 亚洲黑人在线| 亚欧高清在线| 久久人妻无码毛片A片麻豆| 男人天堂2019| 99无码| 91久久国产精品| 不卡中文字幕aⅴ在线| 精品人人插人人操| 酒色综合网| 人人操人人搞人人草| 96久久科窝| 久草成人影片| 狠狠操狠狠插| 超碰97伊人| 久久精品国产亚洲妲己影视| 久久久久久久久久久久久久久性生活视频| 免费国产| 国产又色又爽又舒服的三级视频| 亚洲熟久久| 久96热在线观看视频| renqi久久久久久久久久久久| 国产精品一区二区后入| 十八岁啪啪视频免费看| 91亚洲欧美综合高清在线| 亚洲中文国际强奸字幕| 91在线观看,天天综合| 五月丁香拍拍激情综合三级| 啊啊啊啊好疼视频| 99国产人成精品| 天天操天天舔| 亚洲天堂另类小说男人| 黄色一区二区秘书性感| 后入式视频国产自| 亚洲无码99| 黄色大片视频在线免费看| 五月天激情小说| 久久免费少妇| 狠肏骚人妻| 狠狠操官网| 97超碰精品图片| 东北黄色电影| 26uuu性物| 婷婷国产精品一区二区| 一区二区三区日韩欧美| 国产三级中文有码在线视频| 五十路六十路七十路熟婆| 中文一区在线日| 男人的天堂不卡一区二区| 干日本人少妇午夜寂寞影院| 97操| 97爱爱爱| 亚洲啪啪综合?v一区综合精品区| 热久久无毒不卡| 有码人妻系列| 一本正道久久熟女| 六六久久日韩不卡| 99超级碰免费视频| 99婷婷| 神马久久久久久伦理片| 91 丝袜在线播放| 91狠狠综合网| 精品美女久久久久| 欧美性生活免费网| 777AV电影| 日语五十路和六十路亚洲国产精品| 中文字幕在线2| 亚洲色图 图片| 欧美成人综合| 国模不卡一本二本三电影| 伊人久久国产免费观看视频| 高凊专区人人操| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 国语精品av| 情色图区| 亚洲中字幕日本一区二区三区| 久久免费少妇| 欧美精品99久久久**| 国产强上视频在线观看| 中日高清无码操逼视频| 射丝袜高跟鞋99| 日日干夜夜操视频h| 95精品在线| 亚洲大色堂| 久久东京热成人| 一起草视频在线| 9色国产精品一区粉嫩| 国产精品高清2021在线| 午夜精品视频777| 久久久久久久九九九九九九| 大吊色| 丝袜高跟澳门91视频| 熟女少妇一区二区三区| 日本人妻中文字幕精品| 偷看洗澡一二三区美女| 免费看污网址| 人人爱人人乐人人操| 亚洲成a人在线观看久| 婷色五月天| 中文字幕女同在线| 97在线免费| 岛园激情| 欧美中字不卡| 丝袜剧情| 久久99999| 熟妇综合一区二区三区| 超碰三级秋霞| 精品日日人妻| 色色五月婷| 精品无av| 啊a一区在线| 五月情色天| 丁香五月影院| 大香蕉淫人| 动漫爆乳3D奶水一区在线观看| 久久久久亚洲精品| 第四色奇米影视777| 男人的天堂成人的社区| 久久粉色| 毛片17S| 日韩激情无码影院| 青青欧美| 亚洲综合中文字幕有码| 色偷偷综合91久久噜噜| 九九久久99| 亚洲色阁| 一区二区 电影 亚洲| 国产精品爱欲| 欧美日日人人天天| 91狠婷| 亚洲日韩人妻中文字幕一区| 日韩图区| 欧美有码激情视频一区二区三区| 亚洲男人天堂网| 亚州色国| 性爱动态120秒| 免费中文综合精品| 人妻 欧美亚洲| 婷婷五月天久久精品视频一区二区三区| 精品性爱| 精品无码久久久久久久杏吧| 狠狠爱夜夜干| 白丝jkav| 天天看天天综合成人网| 国产午夜无码片在线观看影视 | 人妻9117c| 干美女人妻| 日本不卡高清免v欧美日韩在线观看| 人妻偷拍一区二区三区| 欧美精品久久久久久久丰满| 黑丝制服中文字幕| 嗯嗯啊啊啊啊轻点视频| 久操操| 高清不卡国产| 男人的天堂2010| 激情小说五月天| 国产激情片在线观看| 国产精品久久久久久照片| 91亚洲电影| www.男人的天堂| 亚洲狠狠入| 成人资源中文字幕在线观看| 国产AV线| 96超碰网| 青娱乐999| 校园春色 欧美| 亚洲美女精品九九视频| 久久一区二区蜜桃| 激情小说亚洲| 国产成人亚洲精品无| 男人天堂资源| 国产狂喷潮在线精品| 凹凸视频在线一区二区| 在线播放免费av福利片| 国产浮力影院第1页| 日韩av在线免费网站| 在线看的av| 成人性爱电影一区二区| 2024人人操人人摸| 色哟哟-国产专区| 亚州中文字幕超碰97| 色偷偷综合91久久噜噜| 国产激情视频一区区三区| 国产91亚洲精品一区二区三区| 丁香婷婷五月| 国产农村一一级特黄毛片| 99热成人| 国产白丝在线| 久艹日日日| 91成人精品在线播放| 色综合美国| 插入粉嫩少妇视频| 日本成人免费一区二区三区| 18禁的网站在线| 日韩乱码Av| 熟女网站最新| 精品人妻视频入口| 日本欧美国内在线| 精品无码人妻一区二区免费蜜桃| K8久久久久| 日韩黄片视频试看| 欧美 亚洲 制服 精品| 伊人午夜福利视频| 久久丁香久草综合网| 麻豆这里只有精品| 骚妻少妇精品性色无码四色A V| 日韩国产精品人妻无码久久久| 国产亚州高清国产拍精| 97精品在线| 99操视频| 综合少妇网| 国产精品久久久久久片| 97精品网站| 性色av大全| 97玖玖人妻| 又粗又长又大国产不卡| 日日干日日| 成人国产视频在线观看| 黄污污污污| 色97干| www.狠狠干.coom| 国产97在线 | 亚洲| 精品超碰中文在线| 91春色| 欧美综合站| 蜜臀一区二区三区在线| 青青草视频导航官网| 国产乱伦性爱区| 99re在线视频这里只有精品| 久久XX| 98人妻精品一区二区色欲 | 99精品综合久久久久五月天| 99只有精品| 上特色A在线| 欧美色九九九| 粉嫩不卡一区二区性爱 | 九九热九九热| 日本视频在线观看污污污| 久区视频| 中文字幕诱惑制服人妻丝袜美丝袜美| 亚洲欧美精品福利在线| 啪啪啪精品| 日本孕妇孕交| 美女诱惑久久| 亚洲综合夜色| 操操操操网黑人| 伊人亚洲国产一成人久久精品,久久| 精品国产一区探花在线观看| 天天日天天干天天摸天天操| 欧美夜夜骑视频| 极品白嫩福利在线| 久热伊人99re| 99操逼| 曰本人妻人人澡人人夹| 青娱乐福利99| 17c在线成人免费A片观看| 殴美色网| 清纯唯美综合亚洲| 亚洲AV在线资源| 日韩精品大香蕉伊人在线| 欧美性区| 九九av| 天天综合网~91综合网| 久久超碰98| AV99热18这里只有精品| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 欧美性综合| 高清孕妇孕交 交孕妇| 97超碰国产亚洲精品| 干妹子| 综合网亚洲在线| 久操国产在线| 国产毛片毛片4p懂色| 97无码视频在线播放| 国产无码高清操逼视频| 色婷婷激一区二区三区| 国产99 中文字幕日韩小视频| 日韩性爱高清免费视频| 亚洲nv男人的天堂网| 久久香蕉国产传媒一区剧情天美| 狠狠 91| 长久操视频| 中文字幕制服诱惑| 色网在线视频观看免费| 伊人成人中文字幕久久网| 人人摸人人干| 久久久久久久久久久精| 久久69| av最新免费中文字幕| 亚洲中文字母在线播放| 超碰视97中文| 性爱网站一区二区| AV中文在线可看| 激情终合网| 亚洲少妇视频| 国产人妖视频一区在线观看| 精品人妻一区二区三区不卡断 | 91日产欧美| 久久综合18p| 欧美亚洲第1页| 在线情色电影 91大| 日韩欧美久久婷婷网站| 国产无码精品成人| 久久麻豆一区二区| 天久久久噜噜噜久久国产精品爽爽| 大稥蕉免费视频这里只有精品| 色 婷97| 精品少妇人妻| 网友自拍第一页| 亚洲人妻中文高清| 免费一级视频特黄色大片| 青青操97| 色欧美在线| 国产女人高潮嗷嗷嗷叫小说| 激情色色| 欧美偷偷网| 三级日本一区二区三区| 男人的天堂com| 日产操逼| 欧美亚洲日本激情在线| juliaann精品熟女一区| julia国产在线 | 91亚洲欧美| 开心五月婷婷激情| 99久久9| 无码操逼视频一下| 亚洲日产专区| 亚洲欧美清纯| 超碰91在线| 十八禁电影伊人网| 操B视频日韩无码| 欧洲综合视频| 蜜臀中文字幕| 人人操,人人插| 强奸乱伦大香蕉网| 国产日韩在线播放av| 999综合网| 久草这里只有精品| 超碰日韩人妻| 精品少妇人妻一区二区三区| 久久久久元码视频| 翔田千里无码中出中文字幕| 北京专精特新企业招聘信息| 亚州色综合| 992这里有精品| 久热这里只有精品9| 国产AV高清AV无码| 精品少妇一区二区三区| 久久久夜夜嗨免费视频| 超碰97综合网| 人人操AV| 国语少妇精| 欧美黑人XXXⅩ高潮交| 亚洲天堂欧美| 亚洲综合码| 日欧操屄| 亚洲污污网站| 国产精品一级片在线看| 无码人妻毛片丰满熟妇精品区| 久久无码电影| 啊啊啊啊好疼| 伊色综合天堂色97| 国产91亚洲精品一区二区三区| 精品射1999| 国产在线强奸视频| 在线观看午夜婷婷久久久久清性观看| 久久婷婷综合国际产色怕| 亚洲春色欧美| 日韩97视频!在线| 国产超碰AV在线精品| 色妇91| 桃花色涩综合影院| 性夜影院爽黄A爽免费动漫| 日韩一级二级在线| 日逼国产| 中文乱码字幕观看视频| 97超碰天天爱天天爱| 欧美性爱1080p| 狠狠入| 国产男女无套97| 五月天婷精品激情| 亚洲97精品| 91久久国产综合精品| 国模精品娜娜一二三区| 蜜臀久久99精品久久久久久-DVD原版全| 国产精品久久久视频| 亚洲导航深夜福利| 亚洲人妻爽爽爽| 亚洲www91| 天天操夜夜操| 老熟女乱子伦中文字幕一区二区| 亚洲欧美综合网| 欧美激情一区二区| 91超级碰碰碰| 日韩在线性爱免费视频| 日韩欧视频| 麻豆 亚洲 97| 美女啊啊啊啊啊啊啊| 亚洲国产午夜真人一级片中文字幕精品黄网站| 亚洲人妻五月丁香婷婷| 999综合色| 啊啊啊com| 色色丁香| 欧美顶级黄色大片免费| 91大神精品长腿在线观看网站| 亚洲有码视频二区| 国产精品一级片在线看| 放黄片放3级黄片没穿衣服| 91操熟女| 精品九九| 97色欧州| 97资源超碰| 妺妺跟我一起洗澡没忍住| 国产亚洲色停停久久99精品91| 操国产高清| 欧美日韩国产在线| 国产av又色又爽又黄| 国产高清自拍| 麻豆成人影音在线| 久草精品在线| 精品白丝一区| 麻豆天美在线喷水AV| 九久久九精品视频| 久久人妻视频网| 这里都是精品在线观看| 成人网站 免费观看| 久操com| 国产色综合亚洲色综合吹潮| 久久午夜色播影院免费高清| 男人天堂新| 蜜屁av| 激情在线青青操| 午夜美女诱惑电源网| 久久久久婷婷精品av电影| 老女人碰碰在线碰碰视频| 神马久久久久久久久久| 91艹逼精品| 超碰 av 女人天堂| 刺激精品视频| 日本九九久久99| 色在线69堂| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | 特级丰满少妇一级AAAA爱毛片| 一起草欧美| 日日噜噜夜夜狠狠视频无| 影音先锋少妇| 99色热国产视频精品| 日本成人A片免费看| 乳欲人妻办公室奶水| 青娱乐亚洲自拍| www黄片免费看com| 五月婷婷色| ′ !γ}丶。。久久精品欧美一区二区三区| 亚洲精品男人的天堂| 欧美精品成人亚洲| 九九九久久久久| 欧美亚洲成人在线一区二区三区| 久久久久久久9最新免费视频观看| 欧洲精品欧洲精品| 国产农村妇女毛片精品久久| 亚洲黑人在线| 欧美黄色大片在线观看 | 精品制服美女中文一区二区三区| 日韩无码服务区| 麻豆成人影音在线| 人人操人人色人人摸| 欧美性爱中文字幕无线码| 欧美日韩岛国大片在线观看| 日本三级久| 热久日综合| 日韩91网| 天天躁日日躁AAAAXXXX国产| 中国探花熟女| 日本人妻一区二区| 99热国产精品| 欲香欲色| 96久久精品一二三区色欲| 六六久久日韩不卡| 十八禁一区二区无码观看| 97美日韩视频| 国产乱色国产精品免费视| 亚欧韩av| 91网站18在线| 老鸭窝成人免费毛片视频| 国产高清精品一区二区三区毛片| 欧美一区二区亚洲天堂| 5252色欧美在线| 玖玖资源视频一区二区三区| 日韩成人高清一区二区| 偷看洗澡一二三区美女| 丝袜喷水在线| 欧美姓爱综合网| 一类av片在线看| 天天色综合图片| 日韩精品99久久久久久中文字幕 | 国产成人精品日本亚洲语言| 青娱乐 成人娱乐在线| juliaann丝袜大战黑鬼| 男人的天堂一区| 园内精品自拍视频在线播放| 无码99| 国产免费一区在线观看| silk lablo在线观看一区二区| 丝袜综合网| 韩国黄片aaaa| 一区 欧美 日韩 麻豆| 久久9免费视频| 在线播放免费av福利片| 骚逼高潮久久精品| 久久久性少妇| 91香蕉视频在线观看免费| 九九九九九九亚洲| 999精品乱码| 国产18精品亚洲精品| 手机久操欧美综合色码| 97综合在线| 99色在线| 亚洲综合草草| 丁香五月综合| 久久久久人妻| 91老司机精品| 婷婷亚洲色| 玖玖爱伊人玖玖爱| 在免费jIzzjIzz在线视频| 日日夜夜骚| 日韩性爱一级片| 婷婷五月天av| 神马久久免费电影观看| 丁香五月激情综合国产| 69久久久久久久久久久久久| 欧美1区二区三区公司| 蜜桃传媒一区二区亚洲| 欧美色图片| 五月色丁香| 92一区二区| 快点操死我| 欧美色欧美| 天综合网| 亚洲另类欧美精品| 男人 天堂 日 亚洲| 中文字幕精品探花视频| 久久久久性熟视频| 97精| 久久久久久91香蕉国产| 亚洲天天自拍| 91 手机在线播放 绯色| 97在线观看| 4141514逼喷水三级片| 国产无马在线| 97精品第3页| 亚洲日韩美国人妻| 啊啊啊啊,啊啊好多水| 99只有精品| 熟女精品一区二区三区| 91国产操逼视频| 中文字幕精品免费一区二区| 自拍偷拍第26| 国产日韩在线播放| 亚洲熟妇丝袜在线观看| 久热69九色熟妇97| 久久同城AV| 在线播放免费av福利片| 亚洲系列第一页| 乱论91| 亚洲天堂美臀在线| 91精品人| 9999九九九久久久| 日本高清_区二区三区| 中文字幕av片| 爆乳免费黄网站| 伊人操你| 久久久免费高清中文视频| 丁香六月啪| 久久草草亚洲蜜桃臀| 啊啊啊啊啊啊啊啊要喷了| 人妻精品视频一区二区| 91老熟女视频| 99热aaa| 亚洲成人综合在线| 无码天堂| 久久久九精品| 很黄很污的免费网站| 涩涩这里只有精品视频| 天堂亚洲欧美| 春色校园综合网| 91超级碰碰| 久久久久免费看少妇A片特黄| 色爽——AV| 欧美性战999| 人摸人人操人| 啪啪性爱免费视频| 91无码人妻精品一区二区三区蜜桃| 亚洲有码 视频一区| 国产精品成人蜜臀AV在线| 91岛国动作片| 九草九九九| 无码人妻丰满熟妇奶水区毛片| 一级久久久久久久久久久 | 亚欧无码在线| 成人小说另类在线| 国产精品农村妇女| surenchaopeng| 一本一道人妻久久一区二区三区| 在线色导航| 自拍内地三级在线观看| 少妇无码999| 国偷自 一区二区| 99热在线不卡| 精品久久青青草| 久久激情五月| 免费黄色A片| 青青青国产手线观看视频2| 黄页av| 久热99999| 欧亚揄拍偷拍精品视频 | 热无码中文亚洲H一道本一区二区| 亚洲交性| 97天天插| 青青伊人久久| 96AV久久久| 人人喜人人妻| 97超碰碰碰| 色情综合| 婷婷久久五月| 户外裸露刺激视频第一区| 波多野结衣先锋影音| 影视综合无码少妇| 日韩成人高清一区二区| a级免费在线观看| 91 综合 色| 欧美 亚洲 91| 超碰是碰在线观看| 中文字幕精品乱码| 亚洲精品97中文字幕| 亚洲综合图片在线| 五十路二区在线| 欧美色色人| 亚洲爱爱视频一区二区| 性交一区二区在线播放| 日本顶级天天操狠狠操夜夜操中文字幕| 日韩二级| 最新精品久久蜜桃| 91肏屄网| 色五91| 久久综合精品一区二区三区| 激情一区二区三区在线观看| 东京热激情视频一二三区| 日韩成人色图| 毛片视频白嫩| 色婷婷婷五月天激情四射| 五月丁香成人网| 看看小穴| 欧美亚洲美少妇一区二区| 青草香蕉网| 国产一| 大香蕉日韩| 亚洲97在线| 青青青国产手线观看视频2| 成人毛片免费| 秋霞一级鲁丝片A片| 探花在线免费观看视频国产一区| 国产高清免费不卡av| 乱伦系列一区二区| 狠狠 91| 台湾佬中文娱乐自偷自拍| av72网| 91bbbbbb| 韩国免费播放一级毛片| ..日韩av毛片精品久久久| 国产欧美精选自拍一区| 能直接看AV的网站| 夜夜操2028| 天天弄欧美| 国产深喉| 亚洲av无码国产精品字幕| 免费一级a毛片久久久久久鸭绿欲| 国产成人bd在线观看| 亚洲色图大香| 亚洲 欧美 小说| 亚洲精品熟妇1区2区3区。| 绯色一区二区三区不卡少妇| 黄色片一区二区三区四区五区| 欧美日韩国产色图在线| 欧美一级三级| 北野未奈加勒比av| 懂色Av| 在线观看色视频| 久久久久久久久久久久久久久性生活视频| 伊人伊人LD| 夜夜性| 激情综合网五月婷婷五月天| 97精品国产97久久久久久| 97在线青| 亚洲一区二区三区在线激情| 精品一啪| 久久色一区| 男同专区一区二区三区在线| 在线岛| 五月天开心网| 中文精品少妇天堂| 97在线精品观看视频| 啊v视频在线观看| 精品无码人妻一区二区免费蜜桃| 亚洲交性| xxx0国产在线播放| 草久久久| 国产野战露脸在线播放| 美女诱惑一区| 偷拍 欧美 日韩| 91操操| wuyechaopeng| A级片日韩欧美国产欧美视频精选观看| 欧美疯狂做爰xxxx| 夜色97| 欧州一区二区三区四区| 亚洲精品视频二区| 深喉吞精| 国产aⅴ无码片毛片一级网站| 夜夜嗨av午夜成人| 欧美色欧美| 九九香蕉网| 色狠狠色| 老司机久久| 99热18这里只有精品| 超清福利精品视频在线| 五月天婷婷色色| 日日AAvv| 麻豆啪啪啪视频| 色香伊人| 欧美日韩性爱无码| 久久久神马影院| 曰韩精品视频一区二区| 天天α片| 午夜AV人气不卡| 黄污污污污| 夜夜爽夜夜爽| 亚洲熟妇图片| 91丰满| 欧美性爱另类综合| 久久这里只精品| 国产丝袜视频| 精品人妻美妇91job| 99在线免费观看| 九九久精品| 九九综合| 2020久久免费视频| 天天综合在线4| 啊啊啊在线观看免费视频| 婷婷导航| 精彩国产视频播放1区2区| a片久久久久久久久久久久 | 内射黑人| 91美| 射 色综合| 国产在线视频午夜精华在| 东京热激情视频一二三区| 亚洲欧美高清无码| 少妇极品熟妇人妻无码| 久久欲| 欧美色道啊| 激情五月婷婷| 日韩欧美日韩| 97超碰久久色| 五月丁香激情综合| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 在线观看色视频| 欧美激情久| 97av在线视频| 丰满人妻被猛烈进入中| 东北老女人的激情视频| 亚洲一本色道中文无码aV天美| 97超碰精品图片| 亚洲图片欧美日韩| 欧美日韩不卡a片| 91美女精品| 影音先锋国产精品| 26uuu久久| 日韩毛片9| ,国产乱人伦精品一区二区三区| 久久性爱视频99| 欧洲一区二区| 成人网欧美风情| 国产无马视频| 91综合在线| 老鸭窝日丰县女人| 91 刺激在线| 免费看国产曰批40分钟怎么下载| 国产精品乱码久久久久久久久| 亚州色站 日韩电影| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 欧日a| 中文字幕久久婷婷丁香五月天| 国产60区。| 婷婷久久综合| 日韩av在线免费网站| 一二三区操逼国产91| 天天操天天日天天干| 色婷婷aV一区二区三区麻豆综合| 综合影视国产无码| 蜜臀99精品国产高清在线观看| 久久精品中文| 中文字幕精品人妻丝袜| 久久久精品视频免费观看| 一个色导综合| 中文字幕乱亚洲美女精品一区| 超碰97在线中文| 91ise欧美| 欧美性生活综合| 无码操逼网| 精品九九| 香蕉99秘 一区精品蜜桃臀| 土豪酒店各种姿势玩弄极品幼稚| 亚洲男人的天堂V| 国产亚洲精品自在线亚洲情侣| 国产一区二区三区久久久精品| 欧美一区二区男人天堂| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 欧美亚洲韩国视频十五区| 夜夜高潮夜夜爽高清视频一 | 久久久神马影院| 青青草吊丝| 亚洲AV成人在线| 久草国产在线视频| 91爱啪| 婷婷五月综合激情| AV女优男人的天堂| 日欧美色| 夜夜中出国产| 亚洲偷拍自拍在线视频| 久久久久久久久久va| 亚洲人天堂| 人妻激情视频| 日本免费一区二区不卡| 久久久久9999妇女| 欧美性爱五月天| 国产精品老师| 国产激情综合| 99操| 色蜜AV| 日日夜夜狠狠| 久久久久久久国产视频| 日本色色视频网站| 久久精品国产99精品亚洲蜜...| 午夜a成v人电影| 国内偷自视频区视频综合| 91P0RNY大屁股人妻| 伊人操你| 一类无码操逼视频| 日韩欧美午夜视频在线| 国产精品女生av| 在线看片国产精品每日更新| 欧美黄片欧美黄片xxx| 国产无码精品久久久久久| 老熟女乱伦片| 天堂а√在线最新版在线| 国产麻豆福利av在线播放| 成年人黄色小视频网站| 久草免费在线一区二区|