久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

雙串口MODBUS+DMA+FIFO:STM32從站RS-485數(shù)據(jù)不丟的實(shí)現(xiàn)方案

雙串口MODBUS+DMA+FIFO:STM32從站RS-485數(shù)據(jù)不丟的實(shí)現(xiàn)方案 簡(jiǎn)介雙串口MODBUSDMAFIFO完整工程面向需要實(shí)現(xiàn)MODBUS多從機(jī)通信與串口高效收發(fā)的STM32開發(fā)者。工程基于FREEMODBUS庫在雙串口場(chǎng)景下引入DMA與FIFO緩沖機(jī)制降低CPU負(fù)載、保證數(shù)據(jù)有序性可應(yīng)用于工業(yè)自動(dòng)化設(shè)備、物聯(lián)網(wǎng)節(jié)點(diǎn)等對(duì)實(shí)時(shí)性要求較高的場(chǎng)景。資源包共收錄1220個(gè)文件壓縮后僅9.2MB以C/H源碼和工程配置文件為主除約900個(gè)源碼文件外還包含STM32CubeMX的.ioc/.mxproject配置、IAR/Keil工程文件、.a/.lib靜態(tài)庫、.hex/.axf構(gòu)建產(chǎn)物以及md/txt說明文檔目錄層次清晰便于對(duì)照學(xué)習(xí)和移植。目前已有1013人學(xué)習(xí)瀏覽。通過該工程讀者可以直接獲取雙串口DMAFIFO收發(fā)框架、FREEMODBUS從機(jī)配置方法、多從機(jī)交互邏輯和完整可編譯工程適合作為Modbus協(xié)議棧二次開發(fā)或串口性能優(yōu)化的參考樣例。1. 雙串口MODBUSDMAFIFO到底解決什么問題雙串口MODBUSDMAFIFO這套資源解決的不是“怎么把Modbus代碼復(fù)制兩份”的問題而是“兩條RS-485總線同時(shí)壓到同一臺(tái)從站上數(shù)據(jù)怎么不丟”的問題?,F(xiàn)場(chǎng)很常見1號(hào)總線的主站下發(fā)參數(shù)2號(hào)總線的主站輪詢運(yùn)行數(shù)據(jù)兩邊從站地址不同、波特率還不一樣。如果靠串口中斷一字節(jié)一字節(jié)收主程序一進(jìn)臨界區(qū)或者Flash一擦寫立刻丟字節(jié)。我拆完這套資源后的感受是兩路串口各配一個(gè)DMA接收通道用空閑中斷IDLE判定Modbus幀結(jié)束再把DMA緩沖區(qū)里的字節(jié)倒進(jìn)統(tǒng)一的FIFO隊(duì)列交給FreeModbus按幀解析中斷次數(shù)能降一個(gè)數(shù)量級(jí)。適合手里有STM32從站工程、想把中斷收數(shù)換成DMA收數(shù)的人直接拆改。2. 模塊怎么搭雙串口、DMA、FIFO三者的分工與順序2.1 為什么全中斷接收在雙串口下容易翻車Modbus RTU 的幀邊界很脆弱協(xié)議規(guī)定兩幀之間至少 3.5 個(gè)字符時(shí)間的靜默幀內(nèi)字符必須連續(xù)。一幀最長(zhǎng) 256 字節(jié)按 115200bps 8N1 計(jì)算一個(gè)字節(jié)位時(shí)間約 86.8μs3.5 個(gè)字符約 304μs。也就是說整個(gè)串口在等字節(jié)的過程中CPU 被迫跟著字節(jié)節(jié)奏走完全沒有彈性。最常見的單字節(jié)中斷收數(shù)代碼長(zhǎng)這樣void UARTx_IRQHandler(void) { uint8_t ch; if (__HAL_UART_GET_FLAG(huartx, UART_FLAG_RXNE) ! RESET) { ch (uint8_t)(huartx.Instance-RDR 0xFF); ring_fifo_push(rx_fifo_x, ch); /* 每來一個(gè)字節(jié)就壓一次隊(duì)列 */ __HAL_UART_CLEAR_FLAG(huartx, UART_FLAG_RXNE); } }這段代碼看著沒問題實(shí)際在雙串口時(shí)會(huì)暴露出兩類開銷一次中斷現(xiàn)場(chǎng)保護(hù)壓棧出棧幾十個(gè)周期兩次中斷之間還有不可裁剪的調(diào)度窗口。更麻煩的是兩個(gè)串口共享同一中斷優(yōu)先級(jí)時(shí)一旦 1 號(hào)總線連續(xù)發(fā)幀2 號(hào)總線的字節(jié)會(huì)在嵌套向量表里排隊(duì)等 1 號(hào)把一幀收完2 號(hào)硬件接收移位寄存器已經(jīng)被新字節(jié)覆蓋——ISR 沒來得及讀數(shù)據(jù)就沒了。工業(yè)現(xiàn)場(chǎng)還有更隱蔽的情況操作系統(tǒng)臨界區(qū)、Flash 擦寫、調(diào)試打印都會(huì)關(guān)中斷。實(shí)測(cè)關(guān)中斷 2ms 后9600 波特率下會(huì)丟 2 到 3 個(gè)字節(jié)。DMA 的價(jià)值在于“中斷延遲期間字節(jié)被外設(shè)自動(dòng)搬到內(nèi)存”FIFO 的價(jià)值在于“搬過來的字節(jié)還要按順序喂給 Modbus 解析不能一次全推給協(xié)議?!?。這也是這套資源把 DMA 和 FIFO 綁在一起的原因。2.2 推薦接收鏈路DMA 搬字節(jié)IDLE 定幀尾FIFO 排隊(duì)整套鏈路拆開看是五段外設(shè)字節(jié)進(jìn)入 RX DMADMA 連續(xù)寫入收發(fā)緩沖區(qū)串口產(chǎn)生 IDLE 空閑中斷時(shí)暫停 DMA軟件把緩沖區(qū)中已接收的字節(jié)拷貝進(jìn) FIFO應(yīng)用層再從 FIFO 拉數(shù)據(jù)交給 FreeModbus 分包解析。收數(shù)方式CPU 占用抗中斷延遲幀邊界檢測(cè)單字節(jié)中斷最高差RXNE 沒及時(shí)讀就丟額外軟件定時(shí)器定時(shí)器輪詢 RDR中一般字節(jié)被覆蓋風(fēng)險(xiǎn)超時(shí)近似DMA 空閑中斷 FIFO低強(qiáng)DMA 自動(dòng)保存IDLE 中斷天然定位關(guān)于 IDLE 中斷要說明一點(diǎn)串口在一個(gè)字節(jié)時(shí)間內(nèi)沒有收到新的起始位就會(huì)拉高 IDLE 標(biāo)志。Modbus 幀內(nèi)字節(jié)不允許出現(xiàn)這種間隙所以 IDLE 經(jīng)常被當(dāng)作“幀結(jié)束”的標(biāo)志。對(duì) 115200 而言一個(gè)字節(jié)空隙約 87μs小于協(xié)議要求的 3.5 字符時(shí)間只要主站字節(jié)間不間斷IDLE 不會(huì)被誤觸發(fā)。唯一例外是波特率很低或主站軟件發(fā)送不連貫這類情況后面避坑章節(jié)單獨(dú)處理。2.3 雙串口并發(fā)為什么拷貝入 FIFO 不用加鎖兩個(gè)串口各自使用獨(dú)立的 DMA 通道、獨(dú)立的接收緩沖區(qū)和獨(dú)立的 FIFO內(nèi)存地址完全不重疊。即便兩條總線同時(shí)來幀寫的是不同區(qū)域裸機(jī)環(huán)境下不需要互斥鎖。這套資源的文件結(jié)構(gòu)也是這樣設(shè)計(jì)的兩個(gè) FIFO 獨(dú)立應(yīng)用層有一個(gè)統(tǒng)一的輪詢?nèi)肟凇?define UART1_RX_FIFO_SIZE 512 #define UART2_RX_FIFO_SIZE 512 static uint8_t uart1_rx_dma_buf[UART1_RX_FIFO_SIZE]; static uint8_t uart2_rx_dma_buf[UART2_RX_FIFO_SIZE]; static uint8_t uart1_fifo_mem[UART1_RX_FIFO_SIZE]; static uint8_t uart2_fifo_mem[UART2_RX_FIFO_SIZE]; static ring_fifo_t fifo_uart1 { .buf uart1_fifo_mem, .size UART1_RX_FIFO_SIZE }; static ring_fifo_t fifo_uart2 { .buf uart2_fifo_mem, .size UART2_RX_FIFO_SIZE };這里有三個(gè) 512 字節(jié)的數(shù)組分別是 DMA 原始緩沖區(qū)和 FIFO 存儲(chǔ)區(qū)。為什么兩個(gè)大小一致因?yàn)?DMA 一輪最多搬運(yùn)的數(shù)據(jù)量不會(huì)超過 FIFO 容量如果 FIFO 比 DMA 緩沖區(qū)小IDLE 中斷里拷貝時(shí)會(huì)丟數(shù)據(jù)。如果只跑一個(gè)從站256 字節(jié)也夠雙從站且主站頻繁讀多寄存器時(shí)512 更穩(wěn)。3. FreeModbus移植與雙串口初始化能抄的代碼和參數(shù)3.1 移植 FreeModbus 時(shí)改哪幾個(gè) port 函數(shù)FreeModbus 的串口移植集中在 portserial.c 里核心就是下面幾個(gè)函數(shù)函數(shù)作用這套資源的改法xMBPortSerialInit初始化串口與 DMA啟動(dòng) HAL_UART_Receive_DMA 接收xMBPortSerialGetByte從 FIFO 取一個(gè)字節(jié)ring_fifo_pop(rx_fifo[port])xMBPortSerialPutByte發(fā)送單字節(jié)拉高 DE寫 DR 或走 DCA 發(fā)送xMBPortSerialEnableIrq使能收發(fā)中斷使能 IDLE 中斷發(fā)送完成后關(guān) DEvMBPortSerialClose關(guān)閉端口停 DMA關(guān)中斷移植的坑通常在 xMBPortSerialPutByte。Modbus 是半雙工協(xié)議發(fā)送前要把 RS-485 方向引腳拉高發(fā)完再拉低。如果只發(fā)一個(gè)字節(jié)就立刻拉低最后一個(gè)字節(jié)的停止位還在線上對(duì)端收到的幀就短了一截。3.2 雙串口的 DMA 初始化與參數(shù)選擇初始化代碼可以直接抄重點(diǎn)看 DMA 通道選擇和傳輸模式void BSP_UART_DMA_Init(void) { /* USART1 接收 DMA默認(rèn) NORMAL 模式由 IDLE 觸發(fā)停止 */ hdma_uart1_rx.Instance DMA1_Channel5; /* 按實(shí)際型號(hào)改 */ hdma_uart1_rx.Init.Direction DMA_PERIPH_TO_MEMORY; hdma_uart1_rx.Init.PeriphInc DMA_PINC_DISABLE; hdma_uart1_rx.Init.MemInc DMA_MINC_ENABLE; hdma_uart1_rx.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE; hdma_uart1_rx.Init.MemDataAlignment DMA_MDATAALIGN_BYTE; hdma_uart1_rx.Init.Mode DMA_NORMAL; __HAL_LINKDMA(huart1, hdmarx, hdma_uart1_rx); /* USART2 接收 DMA通道換掉其他參數(shù)一致 */ hdma_uart2_rx.Instance DMA1_Channel6; hdma_uart2_rx.Init.Direction DMA_PERIPH_TO_MEMORY; hdma_uart2_rx.Init.PeriphInc DMA_PINC_DISABLE; hdma_uart2_rx.Init.MemInc DMA_MINC_ENABLE; hdma_uart2_rx.Init.PeriphDataAlignment DMA_PDATAALIGN_BYTE; hdma_uart2_rx.Init.MemDataAlignment DMA_MDATAALIGN_BYTE; hdma_uart2_rx.Init.Mode DMA_NORMAL; __HAL_LINKDMA(huart2, hdmarx, hdma_uart2_rx); HAL_UART_Receive_DMA(huart1, uart1_rx_dma_buf, UART1_RX_FIFO_SIZE); HAL_UART_Receive_DMA(huart2, uart2_rx_dma_buf, UART2_RX_FIFO_SIZE); __HAL_UART_ENABLE_IT(huart1, UART_IT_IDLE); __HAL_UART_ENABLE_IT(huart2, UART_IT_IDLE); }兩個(gè)關(guān)鍵參數(shù)要說明。第一方向必須是 DMA_PERIPH_TO_MEMORY外設(shè)地址不自增內(nèi)存地址自增第二模式用 DMA_NORMAL 而不是 DMA_CIRCULAR。這套資源的思路是“收滿一幀就?!钡?IDLE 中斷把數(shù)據(jù)處理完再重新調(diào)用 HAL_UART_Receive_DMA 啟動(dòng)下一輪。如果用 CIRCULAR 模式緩沖區(qū)會(huì)被自己的寫入指針反復(fù)覆蓋IDLE 中斷里取數(shù)據(jù)時(shí)可能已經(jīng)丟了一截。另外注意 HAL 庫的 HAL_UART_Receive_DMA 會(huì)把 huart 的 RxState 置為 BUSY如果 IDLE 中斷里先停 DMA、拷貝數(shù)據(jù)、再重新啟動(dòng)必須確保上一次調(diào)用已經(jīng)返回 HAL_OK否則會(huì)卡在 HAL_BUSY 上。3.3 雙從站地址路由與輪詢邏輯FreeModbus 原生只抽象一個(gè)串口雙串口時(shí)我習(xí)慣做一層獨(dú)立的幀分發(fā)不強(qiáng)行套兩個(gè)協(xié)議棧實(shí)例。思路是先各自從 FIFO 提取完整幀校驗(yàn) CRC 后比對(duì)從站地址命中哪一路就走哪一路的應(yīng)答邏輯void MODBUS_Poll(void) { uint16_t len1 0, len2 0; len1 modbus_frame_extract(fifo_uart1, rx_frame[0]); len2 modbus_frame_extract(fifo_uart2, rx_frame[1]); if (len1 0 rx_frame[0].addr slave_addr[0]) { modbus_dispatch(rx_frame[0]); } if (len2 0 rx_frame[1].addr slave_addr[1]) { modbus_dispatch(rx_frame[1]); } }modbus_frame_extract 的邏輯是從 FIFO 里逐字節(jié)彈出邊彈邊算 CRC16直到幀長(zhǎng)度超過 4 字節(jié)且 CRC 校驗(yàn)通過才算拿到一幀完整數(shù)據(jù)。這樣做的優(yōu)勢(shì)在于兩條串口互不阻塞1 號(hào)總線上一幀 100 字節(jié)的讀操作不會(huì)延誤 2 號(hào)總線的寫操作。地址路由有個(gè)容易忽略的點(diǎn)如果兩條總線上主站恰好用相同從站地址就要在 modbus_dispatch 里帶總線編號(hào)參數(shù)應(yīng)答時(shí)找對(duì)應(yīng)的發(fā)送串口和 DE 引腳而不是用全局變量。3.4 RS-485 方向切換和發(fā)送完成判斷發(fā)送方向的切換我一般放在 FreeModbus 的 xMBPortSerialEnableIrq 回調(diào)里void vMBPortSerialEnable(BOOL xRxEnable, BOOL xTxEnable) { if (xTxEnable) { RS485_DE_WRITE(1); /* 拉高 DE進(jìn)入發(fā)送模式 */ __HAL_UART_ENABLE_IT(huart_send, UART_IT_TC); } else { /* 不能在這里立刻拉低 DE要等發(fā)送完成中斷 */ } }TC 中斷意味著 TDR 寄存器已空但移位寄存器里的最后一個(gè)字節(jié)可能還在線上。如果 TC 一到就關(guān) DE總線上的幀尾會(huì)被截掉。常見做法是在 TC 中斷里做幾十到一百微秒的延時(shí)再關(guān)void UART_TC_Callback(void) { volatile uint32_t delay; for (delay 0; delay 120; delay); /* 粗略延時(shí)按主頻微調(diào) */ RS485_DE_WRITE(0); }這個(gè)延時(shí)不追求精確只要大于一個(gè)字符的位時(shí)間即可。比如 9600 波特率下一個(gè)字符約 1.04ms115200 下約 87μs延時(shí) 120 個(gè)循環(huán)在常見主頻下約幾十微秒到一百微秒勉強(qiáng)覆蓋高速場(chǎng)景。嚴(yán)謹(jǐn)做法是按系統(tǒng)時(shí)鐘算周期但資源包里的實(shí)現(xiàn)通常就是這樣粗調(diào)現(xiàn)場(chǎng)夠用。4. FIFO緩沖與幀邊界判斷把 DMA 搬運(yùn)的字節(jié)按幀喂給協(xié)議棧4.1 環(huán)形 FIFO 實(shí)現(xiàn)與“容量必須是 2 的冪”環(huán)形 FIFO 的代碼很短但容量有個(gè)硬性約束必須寫成 2 的冪。原因很簡(jiǎn)單取余操作可以換成位與省掉除法指令typedef struct { uint8_t *buf; volatile uint16_t head; /* 寫指針 */ volatile uint16_t tail; /* 讀指針 */ uint16_t size; /* 必須是 2 的冪 */ volatile uint16_t len; /* 當(dāng)前數(shù)據(jù)長(zhǎng)度 */ } ring_fifo_t; static inline uint16_t ring_fifo_count(const ring_fifo_t *f) { return f-len; } static inline uint8_t ring_fifo_push(ring_fifo_t *f, uint8_t b) { if (f-len f-size) { return 0; /* 滿丟棄新字節(jié) */ } f-buf[f-head] b; f-head (f-head 1) (f-size - 1); f-len; return 1; } int ring_fifo_pop(ring_fifo_t *f, uint8_t *b) { if (f-len 0) { return 0; } *b f-buf[f-tail]; f-tail (f-tail 1) (f-size - 1); f-len--; return 1; }代碼里有兩個(gè)細(xì)節(jié)。第一head 和 tail 都用了 volatile因?yàn)閷懼羔樤?IDLE 中斷里被修改讀指針在應(yīng)用層任務(wù)里被修改第二len 字段用來判斷空和滿比直接用 head tail 判斷更可靠避免空和滿兩種狀態(tài)混淆。我把 512 字節(jié)的 FIFO 用在雙串口上原因是 Modbus 最長(zhǎng)幀 256 字節(jié)DMA 一輪最多搬 256 字節(jié)FIFO 至少要是 DMA 緩沖區(qū)的兩倍才能容忍應(yīng)用層解析稍慢時(shí)的積壓。4.2 IDLE 中斷里的 DMA 停收與數(shù)據(jù)搬運(yùn)IDLE 中斷是這套資源的主心骨。進(jìn)來之后先停 DMA再取計(jì)數(shù)器最后把數(shù)據(jù)搬進(jìn) FIFOvoid UART_Idle_IRQHandler(UART_HandleTypeDef *huart, ring_fifo_t *fifo, uint8_t *dma_buf, uint16_t dma_size) { uint16_t dma_index; if (__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) RESET) { return; } __HAL_UART_CLEAR_FLAG(huart, UART_FLAG_IDLE); /* 關(guān)鍵先停 DMA再讀計(jì)數(shù)器否則數(shù)據(jù)還在寫入 */ __HAL_DMA_DISABLE(huart-hdmarx); /* 當(dāng)前 DMA 已搬了多少字節(jié) */ dma_index dma_size - (uint16_t)__HAL_DMA_GET_COUNTER(huart-hdmarx); for (uint16_t i 0; i dma_index; i) { ring_fifo_push(fifo, dma_buf[i]); } /* 清空緩沖區(qū)重新啟動(dòng)下一輪接收 */ memset(dma_buf, 0, dma_size); HAL_UART_Receive_DMA(huart, dma_buf, dma_size); }一定不要把 __HAL_DMA_DISABLE 放到讀取 CNDTR 之后。DMA 在 IDLE 中斷入口處可能還在響應(yīng)最后一次 RXNE 請(qǐng)求如果先讀計(jì)數(shù)器再停 DMA讀出的值可能偏大或偏小導(dǎo)致搬運(yùn)錯(cuò)位。先停再讀雖然多花幾個(gè)周期但數(shù)據(jù)是穩(wěn)定的。還有一個(gè)細(xì)節(jié)HAL_UART_Receive_DMA 在 DMA 停掉之后調(diào)用需要重新設(shè)置傳輸長(zhǎng)度。如果上一步的 DMA 已經(jīng)搬完 512 字節(jié)且沒有觸發(fā) IDLE這里的 HAL_UART_Receive_DMA 會(huì)因?yàn)?huart-RxState 仍為 BUSY 而返回錯(cuò)誤。所以建議在調(diào)用前把 huart-RxState 強(qiáng)制復(fù)位或者直接復(fù)用底層 API 重新配置。4.3 幀邊界3.5 字符靜默靠 IDLE 還是靠定時(shí)器IDLE 中斷在大多數(shù)情況下夠用但遇到“主機(jī)字節(jié)間有微小停頓”時(shí)會(huì)誤判。比如 PC 串口工具做主站發(fā)送緩沖區(qū)刷新不及時(shí)幀內(nèi)兩個(gè)字節(jié)之間出現(xiàn)超過一個(gè)字符時(shí)間的空閑IDLE 就會(huì)提前觸發(fā)。低速 9600 波特率時(shí)3.5 個(gè)字符約 3.6ms遠(yuǎn)大于一個(gè)字符時(shí)間IDLE 反而不容易誤判高速 115200 時(shí)一個(gè)字符約 87μs如果主站軟件在字節(jié)間停頓超過 87μsIDLE 就會(huì)把一幀拆成兩幀。穩(wěn)妥做法是加一個(gè)定時(shí)器輔助判定。每個(gè)字節(jié)進(jìn)入 FIFO 時(shí)記錄時(shí)間應(yīng)用層定期檢查如果當(dāng)前時(shí)間與最后字節(jié)時(shí)間差超過 3.5 字符時(shí)間就認(rèn)為幀結(jié)束把 FIFO 里剩余數(shù)據(jù)當(dāng)作一幀處理#define MB_35C_TICK(baud) ((uint32_t)(35000000UL / (uint32_t)(baud))) static uint32_t last_rx_tick[2]; void Modbus_Frame_Check_Timer(void) { uint32_t now HAL_GetTick(); if ((now - last_rx_tick[0]) MB_35C_TICK(9600) ring_fifo_count(fifo_uart1) 0) { modbus_frame_dispatch(fifo_uart1); } if ((now - last_rx_tick[1]) MB_35C_TICK(9600) ring_fifo_count(fifo_uart2) 0) { modbus_frame_dispatch(fifo_uart2); } }這套資源里保留了兩種邊界判定默認(rèn)走 IDLE注釋里留有定時(shí)器分支。我自己的習(xí)慣是波特率大于 57600 時(shí)用 IDLE低于 19200 時(shí)用定時(shí)器。因?yàn)楦咚贂r(shí)字節(jié)間隔短IDLE 觸發(fā)更靈敏低速時(shí) 3.5 字符時(shí)間足夠長(zhǎng)定時(shí)器判定更符合協(xié)議定義。4.4 FIFO 容量選多大、溢出怎么辦不同波特率下推薦容量參考波特率推薦 FIFO 大小理由9600128幀間隔長(zhǎng)應(yīng)用層來得及處理38400256一幀最長(zhǎng) 256留一幀余量115200512雙串口同時(shí)到達(dá)時(shí)防積壓9216001024DMA 連續(xù)搬運(yùn)量更大溢出時(shí)我傾向保留舊數(shù)據(jù)、丟棄新字節(jié)。原因是 Modbus 從站本身不負(fù)責(zé)重傳主站超時(shí)后會(huì)重發(fā)完整幀丟掉新字節(jié)最多導(dǎo)致當(dāng)前幀解析失敗保留舊數(shù)據(jù)能保證之前已經(jīng)對(duì)齊的幀不受影響。每個(gè) FIFO 里維護(hù)一個(gè)溢出計(jì)數(shù)方便調(diào)試時(shí)觀察是否經(jīng)常超出容量。5. 雙串口避坑記錄五個(gè)我親眼見過的坑5.1 IDLE 在長(zhǎng)幀中間觸發(fā)把一幀拆成兩幀現(xiàn)象主站一次讀 20 個(gè)保持寄存器從站卻解析出兩幀一幀 CRC 錯(cuò)誤另一幀長(zhǎng)度不對(duì)。原因主站是 PC 串口調(diào)試工具發(fā)送緩沖刷新不及時(shí)幀內(nèi)字節(jié)之間出現(xiàn)了超過一個(gè)字符時(shí)間的空閑。UART 的 IDLE 標(biāo)志在“線空閑滿一個(gè)字符時(shí)間”時(shí)就會(huì)置位協(xié)議??吹?IDLE 就認(rèn)為幀結(jié)束。解決不要只依賴 IDLE。把第四章的定時(shí)器輔助判定打開或者把主站側(cè)換成帶連續(xù)發(fā)送模式的設(shè)備。排查時(shí)先用示波器抓總線波形看字節(jié)之間是否有超過一個(gè)字符寬度的空閑段。5.2 DMA 計(jì)數(shù)器還沒讀就被下一次接收改寫現(xiàn)象IDLE 中斷里讀 CNDTR 得到 10實(shí)際 DMA 緩沖區(qū)里只有 6 個(gè)字節(jié)是有效的幀頭被吞掉。原因IDLE 中斷響應(yīng)有延遲進(jìn)入 ISR 時(shí) DMA 尚未完全停住UART 的 RXNE 又觸發(fā)了一次 DMA 請(qǐng)求CNDTR 繼續(xù)遞減。解決ISR 第一行必須先 __HAL_DMA_DISABLE再讀 __HAL_DMA_GET_COUNTER。同時(shí)把該 DMA 通道的半傳輸中斷關(guān)掉避免 HT 中斷和 IDLE 中斷同時(shí)操作 CNDTR造成競(jìng)態(tài)。5.3 復(fù)位后第一個(gè)字節(jié)被當(dāng)成幀頭整條總線判錯(cuò)現(xiàn)象設(shè)備上電后主站第一次讀數(shù)據(jù)返回的幀總是錯(cuò)一個(gè)字節(jié)之后恢復(fù)正常。原因DMA 緩沖區(qū)里殘留上電默認(rèn)值 0xFF復(fù)位后 DMA 在應(yīng)用層初始化之前就開始搬運(yùn)了緩沖區(qū)里混進(jìn)了無效字節(jié)。協(xié)議棧把這些 0xFF 當(dāng)成幀頭解析自然出錯(cuò)。解決初始化 DMA 之前先 memset 接收緩沖區(qū)為 0x00再把 FIFO 清空最后啟動(dòng) HAL_UART_Receive_DMA。另外確認(rèn)復(fù)位后 UART 的 RXNE 不會(huì)在 DE 拉低之前觸發(fā)數(shù)據(jù)讀取。5.4 兩個(gè)串口的 DE 控制互相干擾兩條 RS-485 總線上打架現(xiàn)象1 號(hào)總線讀數(shù)據(jù)時(shí)2 號(hào)總線上的電平抖動(dòng)從站響應(yīng)幀出現(xiàn)移位和損壞。原因兩個(gè)串口共用了同一個(gè)方向控制引腳或者驅(qū)動(dòng)板上的收發(fā)器方向控制信號(hào)是反邏輯的。代碼里把 DE 拉高時(shí)兩條總線的 DE 同時(shí)被拉高兩個(gè)收發(fā)器同時(shí)驅(qū)動(dòng)總線。解決確認(rèn)兩路 RS-485 使用獨(dú)立的 DE 引腳如果硬件已經(jīng)共用只能把兩路收發(fā)器的方向控制接到不同的 GPIO并在代碼里分別控制。調(diào)試時(shí)用萬用表量?jī)蓚€(gè) DE 引腳的電平能立刻發(fā)現(xiàn)問題。5.5 發(fā)送 DE 關(guān)早了響應(yīng)幀最后一個(gè)字節(jié)被截?cái)喱F(xiàn)象從站自檢認(rèn)為已發(fā)送完畢主站收到的響應(yīng)幀長(zhǎng)度少一字節(jié)CRC 校驗(yàn)不過。原因TC 中斷觸發(fā)條件是 TDR 已空但不代表移位寄存器已空。此時(shí)最后一位可能還在線上立刻拉低 DE 會(huì)把停止位截掉。解決TC 中斷里做短延時(shí)再拉低 DE或者等 TXE 和 TC 兩個(gè)標(biāo)志都成立再加半個(gè)字符時(shí)間的延時(shí)。按波特率 115200 計(jì)算延遲 50μs 就足夠覆蓋最后一位輸出。6. 進(jìn)階把 FIFO 統(tǒng)計(jì)狀態(tài)放進(jìn) Modbus 寄存器當(dāng)驗(yàn)收指標(biāo)6.1 用保持寄存器開放內(nèi)部狀態(tài)雙串口從站調(diào)試最頭疼的是“丟幀了但不知道怎么丟的”。我習(xí)慣在項(xiàng)目里加四個(gè)保持寄存器把 FIFO 溢出次數(shù)、CRC 錯(cuò)誤次數(shù)、DMA 恢復(fù)次數(shù)、IDLE 觸發(fā)次數(shù)映射到寄存器地址uint16_t stat_regs[4]; #define REG_FIFO_OVERRUN_CNT 0 /* FIFO 溢出次數(shù) */ #define REG_RX_CRC_ERR_CNT 1 /* CRC 校驗(yàn)失敗次數(shù) */ #define REG_DMA_RECOVER_CNT 2 /* DMA 重新啟動(dòng)次數(shù) */ #define REG_IDLE_CNT 3 /* IDLE 中斷次數(shù) */ uint16_t read_stat_reg(uint8_t reg_idx) { return stat_regs[reg_idx]; }把這組寄存器掛到 FreeModbus 的保持寄存器回調(diào)里主站通過標(biāo)準(zhǔn) 03H 功能碼就能讀到。驗(yàn)收時(shí)先讓主站持續(xù)輪詢一小時(shí)如果 FIFO 溢出計(jì)數(shù)不斷增長(zhǎng)說明應(yīng)用層消費(fèi)速度跟不上如果 IDLE 觸發(fā)次數(shù)遠(yuǎn)大于實(shí)際幀數(shù)量說明字節(jié)間空隙過大應(yīng)該改定時(shí)器邊界判定。6.2 雙串口互測(cè)的自檢技巧沒有兩條獨(dú)立總線時(shí)可以用一根杜邦線把 UART1 的 TX 和 UART2 的 RX 短接反過來也一樣。程序里定時(shí)從 UART1 發(fā)一條標(biāo)準(zhǔn)讀保持寄存器請(qǐng)求再由 UART2 的 FIFO 接收并回包驗(yàn)證兩路鏈路是否正常void Modbus_SelfTest_Tick(void) { uint8_t req[8] {0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B}; UART1_SendBytes(req, 8); /* 發(fā)到 UART1 總線 */ HAL_Delay(20); if (ring_fifo_count(fifo_uart2) 0) { stat_regs[REG_RX_CRC_ERR_CNT]; } }這里 CRC 值是固定的所以測(cè)試幀不需要額外計(jì)算。如果 fifo_uart2 沒有收到任何數(shù)據(jù)說明 DMA 初始化或者 DE 方向控制有問題直接定位到對(duì)應(yīng)代碼。從那以后我每次做雙串口從站調(diào)試都強(qiáng)制把四個(gè)統(tǒng)計(jì)寄存器加進(jìn)去跑一晚上輪詢?cè)倏从?jì)數(shù)幀邊界和緩沖容量的問題基本都是這么暴露的。這套資源里的 DMA 停收順序和 FIFO 容量參數(shù)也是我當(dāng)時(shí)踩過這些坑之后改出來的希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国语av最新自产拍在线观看| 青青草无码视频| 黄色不卡视频| 免费黄色A片| 91色花堂| 欧美性Fer办公室秘书| 国产丝袜视频| 国产日韩欧美亚洲精品95 | 亚洲中文字幕熟女| 国产精品一区二区后入| 99亚亚热| 五月丁香综合啪啪| 亚洲伊人a线观看视频| 久久东京热成人| 91亚洲精品青草| 日韩av不卡在线看| 2017av无码免费无线播| 蜜臀久久99精品久久久久久婷婷| 久久偷偷色综合蜜桃| 久久九九国产精品| 久久日韩精品一区二区| 99操逼| 日韩精品电影| 欧美色自拍| 91熟女熟妇视频网站| 怡红院一区二区熟女人妻| 蜜臀一区二区三区在线 | 免费在线看黄片av| 中文三一区| 高清孕妇孕交 交孕妇| 亚洲91色在线| 第二页中文字幕| 久久激情视频| 中文字幕97| 精品一二三区女同 | 97美日韩视频| 97天天| 婷婷色婷婷| 1769国内精品视频| 久久夜夜| 蜜臀久久99精品久久久久久无删减 | 无码人妻丰满熟妇区毛片| 97在线欧洲| 日本三级小说中文字幕| 天天色悠悠激情| 久久老子无码午夜伦不卡| 天天草夜夜草高潮片| 国产性爱强奸乱伦大全| 97精| 高潮毛片无遮挡高清免费| 97国产精品视频| 激情一区二区三区在线观看| 亚洲黑人在线| 天天综合91入口| 91影视亚洲| 欧美激情片一区二区| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 亚洲自拍天堂| 五月激情小说| 丝袜熟女2P| 九九亚洲视频| 日韩人妻资源网| 99精品在线播放| 色欧美天天| 免费农村成人少妇人妻Aa一区二区视频| 亚洲色偷偷色噜噜狠狠99网| 国产精品欧美激在线| 久久久国产精品人妻丝袜| 美女久久久久久久| 欧美大片天天看| 射丝袜大香蕉| 欧美综合第一页| 久久久久97| 天天看天天日| 亚川综合视频| 日韩中文字幕在线视频观看| 五月天婷婷影院| 欧洲无码一区二区| 国产免费小视频| 精品久久久av无码免费| 日本三级A片网站com| 激情综合网激情综合| 免费精品人妻一区二区三| 再深点灬舒服灬太大了添视频| 秋霞无码av鲁丝片一区| 日本三级中国三级99人妇网站| 成年男人的天堂| 天天影视射综合网| 午夜爽爽爽| 超碰国产精品无码| 91黑丝在线播放| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 97高清啪啪| 色网综合网| 99热精品在线观看| 日韩欧美中文| 欧洲乱码视频| 日本人妻最新在线中| 日本一区二区三区四区免费观看| 91精品电影18| 亚洲欧美变态| 最好看的中文字幕在线2018| 精品久久99| 伊人四虎综合| 日韩字幕一区| 亚洲图片在线| 精品91| 日韩精品在线观看观看| 中文字幕78| 亚洲在线| www.色婷婷| 国产精品视频播放| www国产无码| 激情小说五月天| 蜜桃一区二区三区| heyZO天然素人无码AⅤ专区| 一二三啪啪专区| 久久风骚城市| 日本精品无码三级网站| 五十路熟女工口| 亚洲精品97| 一区二区三区激情在线观看| 亚洲日产专区婷婷| 久热影视| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 永久免费观看的毛片的网站| 色婷婷久久| 密臀成人视频久久久| 亚洲色系另类精品国产| 麻豆精品天美| 99热只有这里有精品| 日韩操呦呦影院在线观看| 啪啪视频免费在线观看| 人妻精品综合中文字幕在线 | 亚洲成人性爱在线观看| 欧美在线|亚洲| 涩涩涩综合| 久久视网78| 欧美日韩中文视频播放| 日本不卡三级网在线播放| 中文字幕欧美丝袜07资源| 日本色色色色色视频| 韩国女主播青草在线| 乱性AV| 九九久久国产精品| 人人玩人人添人人澡免费| 啊啊啊好湿久久| 色哟哟 日韩精品| 亚洲日韩肥臀视频在线观看| 亚洲一区二区三区播放在线| 2020中文字幕在线| 女同性恋一区二区三区精品视频| 九九碰九九爱97超| 伊人大香蕉在线| 影音先锋新男人| 第四色亚洲色图| xxxx网站亚洲精品| 99re视频在线播放青草| 久都青青视频 | 亚洲青青青视频在线| 日韩在线电影| 精品一区二区三区蜜桃臀www| 视频在线观看免费一区二区三区| 九99久久| 亚洲s在线观看| 国产女人高潮嗷嗷嗷叫小说| 国语精品av| 99999精品视频| 久久av无码| 中文字幕久久精视频久久大全| av日韩在线观看电影| 情色大香蕉| 91女神在线视频| 久久这里是精品| 男人成人黄色视频在线观看免费下载| 啊啊啊啊啊操我视频| 日韩亚洲中文有码视频| 手机看片91人妻| 欧美综合网1| 99操视频| 可以在线观看的黄色网址| 99国内熟女露脸视频| 日日日日日| 亚洲色图尤物视频| 人妻少妇精品久久久久久| 亚洲熟妇图片| 色五月综合网| 国产成人午夜视频网址| 中文字幕后石码四区五区| 日本999精品| 韩日精品四区| 午夜福利成人免费视频| 在线观看亚洲成人精品| 男人的天堂va在线| 欧美综合综合| 亚洲一区制服诱惑| 亚洲少妇诱惑| 精品久久久久瑟瑟| 中文字幕第页| 国内外色色色色色成人视频| 日韩性爱再线视频| 天天看天天在线精品| 天天色欧美| 肉丝无码中文高清| 狠狠爱AV| 伊人成人情色综合| 青青草视频久久久久| 在线视频日韩欧美国产| 亚洲1区2区三区高清中文字幕| 色在线视频导航| 另类欧美色| 色香综合天天影视综合 | 亚洲国产91精品一区二区久久| 精品一级| 亚洲欧美洲综合| 都市激情人妻一区二区青青操视频| 思思热在线观看| 日韩av不卡在线观看| 日本熟女免费視颖| 日韩图区 偷拍| 两女互慰AV高潮喷水在线观看| 啊啊啊啊啊啊啊啊在线观看| 九色黄站| 97免费在线视频| 超碰人妻久久| 色色毛片| 成在线人在线观看视频| 青娱乐亚洲自拍| 亚洲精品毛片在线观看| 欧美久热| 玖玖视频在线资源一区二区三区| 92福利社视频| 亚洲av总站| 操b网站亚洲无码| 久久国模av| 亚洲熟女乱熟乱熟妇综合网二区| 亚洲欧美日韩电影网站一区 | 神马久久久久久久久久| 久久久无码精品人妻二区| 亚洲色棕合| 中日韩久久久免费看| 日日AAvv| 91精品微拍福利| 白天啪啪晚上啪啪视频| 久久精品性| www.五月天| 五月综合色| 久久夜嗨| 97在线视频观看免费| 91欧美www| 最新日本中文字幕| 久久久久久亚洲Av无码| 亚洲无码久久久久久久| 亚洲色人妻综合| 中文字幕55555| 97欧美色综合| 国产剧情在线| 一区二区影院| 欧州色图区| 亚洲污一污二| 蜜臀久久99精品久久久久久婷婷| 欧美A片中文字幕| 国产三级电影免费观看| 欧美一级欧美三级在线观看| 加勒比av网| 亚洲无码视频免费在线观看网址!| 欧美偷拍区| 激情专区综合| 日韩中文字幕2020| 久久久女人| 日本在线一二 | 久久啊哟| 精品无码一区二区人妻久久蜜桃| 免费人成毛片乱码| 国产女人91精品嗷嗷嗷嗷| 国产丝袜美女诱惑| 91精品国产91久久久久久久久久久久| 色欲Av人妻精品一区二| 99综合网| 97精品国产精品免费观看| 中文字幕视频在线观看| 成人八戒网站| 好吊妞转入那个网| 久久久网一区| 国产高清自拍视频| 天美国产精品| 欧美综合网在线| 婷婷影院入口| 亚洲淫色网中文| 欧美天天| 99少妇精品视频| 欧美日韩亚洲少妇寂寞影院正在播放 | 欧美经典一区二区三区| 日本天堂网| 天天干人人乐| 国产免费一区二区在线A片视频| 人妻人妻天天碰| 岛国黄片网站| 97蜜桃综合| 久久9精品| 97人人干人人操| 久久大精品乱码视频人妻熟女| 尤物视频视频官网| 中文字幕乱碼在线| 丁香九月婷婷| 亚洲欧美精品一区天堂久久 | 日本操嫩b网| 亚州综合色图| 粉嫩av久久一区二区三区| 亚洲精品一二三四区| 亚洲美女精品九九视频| 天天摸,夜夜摸| 人妻激情视频| 蜜臀少妇一区二区| 思思久热在线精品66| 人人喜人人妻| 极品销魂美女一区二区| 2019AV天堂| 成年人黄色视频免费| 你操综合| 亚洲无线码欧洲精品区别| 男人的天堂色偷偷青青草视频婷婷网| 色综合V| 久久久久亚洲精品| 欧美色综合影院| 天天天干977| 草莓精品视频| 亚州性9| 久久久9品一区二区三区| 亚洲春色一区二区三区| 狠狠97| 96久久精品一二三区色欲| 99re在线精品78| 男女一级A片大黄,一进一出| 中国熟妇| 超碰97玖玖爱| 日韩欧美字幕亚洲一区二区 | 国产午夜无码片在线观看影视 | 岛国黄片网站| 色色青青久久| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 美女91网| 91色综合激情| 黄色大香焦1级‘′‘| 欧美性爱一区二区三区| 少妇500双飞99| 久久九九视频九九视频| 久久午夜色播影院免费高清| 一区二区视频你懂的| 国产成人久久久精品免费AV| 亚洲国产成人精品999| 亚洲国内精品成人不卡| 九九热视频在线观看| 国产家庭乱伦表演| 超碰97男女| 成人AV素股で擦久久| 手机在线播放国产福利| 久久只有精品| 夜色综合| 亚洲清纯综合| 天天综合网1| 精品一区二区三区蜜桃臀赵总| 日韩精品三级| 久久久精品中文字幕麻豆| 小少妇| 国产成人一级av88| 日本黄大片在线观看视频| 啊啊啊轻点在线观看| 日韩欧美成人大香蕉| 国产欧美日韩精品中文| 亚洲欧美综合区自拍另类| 综合网 欧美| 福利天天都操| 骚女高跟AV在线| 色女女女导航| 99少妇精品视频| 激情专区综合| 狠狠色婷婷7777久| 国内毛片国产专区二| 少妇厨房愉情理伦片bd在线观看| 91精品网站| 一本色道久久综合狠狠操| 一牛一区二区三区久久| 久久精品视频久久久| 亚洲国产麻豆一区二区三区| 国产精品久久久久久久黄无码| 亚洲开心网| 99精品无码| 国产精品九九| 嫩草91| 啊啊啊啊啊啊啊在线| 亚洲人妻熟妇三十三区| www.av在线观看| A级毛片在线看免费| 911av网站免费观看| 精品一区二区三区国产| 激情小说亚洲| 国产强奸无码乱伦| 一个色导综合| 国产一区在线观看无码AV | 校园春色欧美| 熟女露脸激情自拍视频| 黄页网站成人免费| 亚洲综合有码| 91综合网站| 超碰九7免费| 清纯唯美综合| 亚洲国产综合图区中文字幕| 精品人妻av区天天看片| 国产精品久久久久久久久久久久久久吹 | 国产欧美另类久久久精品课程| 97自拍一区| 欧美韩国你懂得在线| 国产精品丝袜久久亚洲不卡| 久久精品99久久久久久| 情色大香蕉| 淫淫综合网| 亚洲av成人精品一区| www国产无码| 亚洲精品三区在线观看| 亚洲精品美女久久久久久久久| 欧美一区二区三区日韩| 丰满人妻一区二区三区在线| 青青草啪啪网| 久久9免费视频| aV中文麻| 日韩一区二区精彩视频| a男人的天堂久久一级A毛片| 亚洲国产麻豆一区二区三区| 超碰免费在线| a人欧美综合天堂麻豆| 死我十八禁| 中出在线视频| 偷拍 欧美 日韩| 黄片免费久久久久久久| 天天色粽合合合合合合合| 日韩AV色图| 9999伦理视频| 久久超碰com| 秋霞网—男女啪啪亚洲免费体验区 | 五月婷婷丁香中文字幕| 久久黄色网址| 蜜桃臀久久| 麻豆久久精品亚洲精品88| 成人性爱AV在线免费观看| 国产成人自拍视频在线| 久久久久久91香蕉国产| 99热欧美| xxxx网站亚洲精品| 夂久色| 久热大香蕉网站| 69天堂| 日亚韩精品视频二区三| 丁香婷婷激情五月天无毒不卡| 热G综合热G中文| 久 久无码人妻AV| 91精品啪在线观看国产城中村| 欧美男女午夜啪啪| 精品成人久久久人人亚洲| 无遮挡一级毛片视频免费的| 91碰碰碰| 99热线麻豆 | 亚洲激情网一二三四区| 91在线国产后入风骚翘臀美女素人| 亚洲丝袜二区在线| 韩国一级做A片免费的| WWW.加勒比人妻一区不卡.com| 97欧美日韩精品| 黄色区免费观看中文字幕| 久悠悠av| 午夜爽爽爽| 伊人女女资源在线观看| 超碰在线成人电影| 亚洲成人久久一区二区| 久久国99999| 日韩熟女操逼| 国产伊人自拍| 9久精品| 激情综合五月| 亚洲欧美另类小说| 综合网欧美在线| 99热线麻豆| 中文字幕性感少妇av| 91成人久久| 日韩欧美成人性爱在线| 美骚妇av高清在线| 在线色导航| 亭亭丁香激情| 91视频精品| 乱码熟妇人妻久久久| 欧美春色| 日韩啪啪网| 熟妇高潮二区三区| 日韩成人综合网| 久久大香蕉97| 91oumei| 91在线免费精品视频| 久久不卡一区二区 | 国产福利精品最新在线 | 国产黄色在线播放观看| 亚洲鸥美色图| 久9视频| 超碰97日韩| 国产精品久久久亚洲一区| 亚洲午夜精品久久久中文影院| 日韩av在线免费网站| 亚洲不卡一| 久操大香蕉手机视频在线看| 一级黄色性爱裸体视频| 久久久专区| 大香蕉五月天婷婷| 国产乱伦亚洲色图高清无码| 少妇内射视频| 精品国产乱码久久久久久久久1| 超碰97护士| 色盈盈影院| 国产 无码 一区二区| 精品少妇一区二区| 亚洲五月天激情| 香蕉欧美| 亚洲性综合11| 久久精品免费| 国产亚洲精品第一最新| 香蕉视频欧美一卡二卡| 美女干逼2| 香蕉综合网| 国产婷婷综合在线观看| 97超色| 97超碰jingpin| 台湾成人无码AV| 九九热三级片| 超碰在线人妻不卡| 强奸xx国产| 日日躁夜夜躁狠狠躁超爽| 欧美97在线观看| 中文字幕人成乱码熟女香港| 91亚洲欧美激情| 天天综合网1| 屌色在线97视频| 亚洲欧洲无码bt精品合集| 麻豆a'v电影| 九色97| 久久99午夜精品一区人妻| 91天美免费| 金典av| 色婷婷久久| japan日本高清乱xxxx| 91色香| 九九九九九九精品| 91精品免费| 综合网欧| 96AV久久久| 天天做天天爱| 三级片网站在线播放| 天天操人人操狠狠插| 亚洲中字慕不卡| 在线黄色污污网站| 涩爱AV在线| 9999伦理视频| av中文字幕在线熟女| 无码日韩网站| 美女爽爽爽刺痛洞洞| 成人青青草原伊人| 一区超碰一区| 亚洲伊人久久精品影院| 青草香蕉网| 欧美日韩电影一区二区| 久久e6只有精品| 内射日韩大臀美女| 综合久草| 久久久久久亚洲精品中文字幕人妻| 婷婷五月天成人网| 五月丁香综合| 中文字幕黑人大片| 国产免费大片| www.99热在线只有精品| 日韩av色图综合| 欧美激情超碰777| 综合网久久| 91高跟美女在线播放| 欧美三级免费伊人| 麻豆乱码久久精| 亚洲欧洲精品成人| 爱爱久久| 超碰 国产熟女精品一区| 亚洲熟妇综合久久久久久| 久久久com| 伊人97色天使| 午夜精品久久久久| www. 男人天堂成人在线| 青草视频人妻在线观看| 天天干天天中出av| 人伦四五区| 欧美日韩小说| 人人摸人人入| 国产日韩欧美操逼视频| 国产精品福利资源在线尤物| 乱伦a片视频| 三级网色| 亚洲欧洲小说图片视频| 亚洲中文字幕日产无码久久| 麻豆 亚洲 97| 密臀在线一区尤物| 精品亚洲成人免费在线| julia ann久久| 激情婷婷丁香网| 超碰色图| 自拍偷拍草一草| 在线无码操| 欧美色图天堂在线| 麻豆激情综合| 撸无码不卡免费视频| TS人妖另类精品视频系列| 国产人妖视频一区在线观看| 色爱国产| 超碰综合色| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 综合网色| 天天影视激情欧美| 国产嫩草精品A88AV| 日曰骚久久精品| 国产精品一区二区久久精品| 成人午夜视频免费播放| 亚州色图欧美| www欧美91| 北约熟女超碰| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | xxxx网站亚洲精品| 天天干天天狼在线视频| 色欲人妻一区二区在线| 超碰人妻久久| 自偷自拍的亚洲视频| 久操 高清| 青青草在线视频美女| 人妻干天天| 欧美综合97www| yazhouzaixian| 大香蕉乱级| 精品久久久无码| 伊人性在线视频| 丰满人妻无码一区二区三区| 99999久久久久9国产精品| 青青操视频在线| 手机在线免费看的av| 性欧美另类高清| 国产丁香精品露脸视频| 美女尤物人人操| 黑人中出21连凳花野真衣| 精彩久久中文| 免费观看的黄色的网站| 蜜臀AV成人精品蜜臀| 国产一级高清免费观看| 天天流夜夜操| juliaann欧美丝袜办公室| 国产精品久久久久无码A√| 天天摸夜夜摸| 色综合一本| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 26uuu最新| 少妇高潮99p| 欧美天天射| 夜夜操狠狠操| 台湾佬大香蕉| 红杏大香蕉| 天堂成人网| 天天添天天干电影| 欧美女同在线| 亚洲欧洲日韩国产自在线| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 国产免费一区2区3区| 女人高潮大叫一级毛片| 老司机香蕉久久久久| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 在线观看十八禁| 日韩一级二级三级免费看完整版| www鬼畜国产男人的天堂| 97免费视频在线| 校园春色之综合网| 日本潮催一卡操| 爽爽爽免费视频| 操逼天美3区| 97视频在线视频| 国产成人资源| 国产精品成久久久久午夜午夜| 午夜高清成人在线视频| 防屏蔽在线视频| 日本操逼视频免费| 校园春色亚洲无码| 久久久婷婷| 豆花视频操逼网址| 欧美色图亚洲色,麻豆| 伊人91| 国产精品视频内谢女人| 国厂麻豆77q4| 国产成人久久久精品免费AV| 超碰99re| 自拍二页| 国产热RE99久久6国产精品首| 四虎影视精品| 精品亚州18| 美女自卫慰黄网站免费| 日韩欧美性爱电影在线观看| 精彩视频日韩| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 久久精品人妻一区二区| 爱妻综合网| 9久久久久久| 激情综合av| 欧美综合骚| 乱伦熟女区| 色综合天天| 免费人成毛片乱码| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 成人网欧美风情| 97色色网| 国产精品成人无码av| 无码最新| 9国产超碰| 免费操逼91| 搡老女人老91二区| 91N综合网| 九九超碰综合网| 天堂射| 欧美一级欧美三级在线观看| 加勒比无码一区二区三区| 天天色综亚洲91污| 日本精品无码三级网站| 日韩无码精品综合久久| 日本乱人伦片中文三区| 1769成人国产精品视频| 欧美人妻少妇| 男人的午夜天堂| 天天92av| 91综合网站| 丝袜足交视频| 熟妇色99| 国产后入| 亚洲无码电影久久久| 婷婷色综合欧美日韩| 蜜臀99久久精品久久久懂爱| 国产精品久久久| 欧美一区二区三区不卡高清视频| 欧美色欧美| 亚洲精品久久久久毛片A片拉屎 | 日韩 人妻 精品| 图色综合网| 国产91精品久久久久久久网曝门| 超碰性爱97| surenchaopeng| 国产精品不卡一区二区三区| 天天综合麻豆视频| 99最新日韩偷拍视频| 亚洲中字慕不卡| 亚洲 在线| 日本一区二区不卡| 欧美人人曰人人操人人射射| 午夜亚洲国产理论秋霞| 三级网色| 久久人妻精品| 日韩紧密久久| 欧美日韩人妻婷婷一区| 中文字幕无码不卡啪啪| 欧美色图综合网| 9色国产精品一区粉嫩| 亚洲另类小说卡通动漫| 日韩亚洲Av人人夜夜澡人人爽| 亚洲欧洲国产综合av| 国产玖玖| 国产欧美日韩臀| 天操天操夜操夜月月年年操操| 人妻第一页| 精品一区二区国产日韩| 国产精品第一页国产大屁股视频免费区i| 亚洲精品一区中文字幕乱码| 黄片免费视频2019| 95自拍视频在线观看| 人人看人人摸人人色| 最新欧美色网| 激情四射五月天| 国产馆| 成人无码在线视频网站| 日韩欧美亚洲一区二区三区影院| 熟妇在线视频一区二区| 超碰中文字幕人妻草一区| 久草综合网| 国产亚洲精品A在线观看下载| 久久精视频美日韩在线视频| 青娱乐导航AV| 伊人四虎综合| 日韩国产精品人妻无码久久久| 久久夜黄色无码A级大片| 五月天婷婷欧美三区| 97一区二压| 亚洲色91| 乱伦熟女区| 国产成自自拍在线观看| 色色97爱| 狠狠色噜噜狠狠狠狠狠色综合久久 | 欧美色网| 九九色逼| 激情啪啪视频| A一区片| 大香蕉色十月| 亚洲久草AV色图| 亚洲一区操| 亚洲无套久久嗯嗯| 99这里只有精品| 九月激情婷婷| 大香蕉伊人网WWWn0n| 亚洲资源一区| 成人性爱电影网| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 嗯嗯,好大,好爽,好骚| 丝袜足交视频| 97福利视频| 91热色| 夜嗨影院| 色阁阁AV综合网| 久久性生大片免费观看性| 五月天精品| 快播久久人人aV| 围产精品一区二区三区视频播放| 日韩ab网 | 狠狠夜色午夜久久综合在线| 最新亚洲黄色免费电影| 91校园春色长篇| 嗯嗯不要 视频| 成视频在线观看免费看| 色欲久久99精品久久| 亚洲无码AV九九九| 嗯嗯啊啊啊啊轻点视频| 久久综合亚洲色1080p| 黄呦呦在线| 激情抓乳插进去啪啪啪日韩| 无码视频一区二区| 国产美女销魂在线观看不卡| 色91综合网| 国产精品久久久久久久电影渣男| 国产60区。| 超碰人人操97碰| 欧美乱妇狂野欧美在线视频| 操逼国产免费| 天天草AV| 中文字幕jul-617人妻熟女| aV中文麻| 色性综合| 无码直播久久久| 亚洲少妇色图自慰直播| 操逼啊啊啊91| 久久超碰天天| 欧美一级三级| 欧美在线永久天堂| 亚洲自拍欧美色综合| 人人看人人摸人人色| 日本道人妻久久久在线不卡色视频| www.色99| 国产精品人妻无码久久久互動交流 | 极品色社| 人人干人人操人人爱| 欧美少妇色综合| 日本在线激情一区二区三区| http://qxhbdz.com| 人人操天天爽| 久久久久久久久久久久97| 极品色社| 激情抓乳插进去啪啪啪日韩| 天天综合站| 大胆91| 一区不卡在线观看av| 人人操人人精品影片| 青青草密桃在线播放| 黄色激情电影在线观看| 日日躁狠狠躁天天躁精品| 搡老女人老妇女老妇老熟女怎么读| 中文字幕乱码人妻二区三区| 高潮9999外国| 九九热超碰97亚洲最新香蕉| 亚洲图片偷拍视频区| 欧州一区二区三区四区| 天天躁夜夜躁狠狠躁AV| 后入 亚洲 美女 射| 国产白嫩漂亮KTV在线| 天美传媒AV在线| 美女诱惑在线一区| 少妇一线天久久久久久| 欧美性爱www免费版| 欧美色狠| 久久婷婷一区| 性性久久| 日本不卡高清免v欧美日韩在线观看| 伊人久久大香线蕉无码| 天天综合网网欲色| 超碰97极品9| 97超视频在线观看| 久久精品视频久久久| 青娱乐日韩无码| 国产高清无码一区三区二区| dy888午夜老子影视达达兔| 久久久久幕乱码| 超碰97最新人妻| 久久综合18p| 99久热| 国产AV高清AV无码| 日韩无码三级影院| 精品三级在线专区| 黑人综合网| 在线观看啊啊啊啊啊| 中文字幕文字幕无码一区二区三区电影99| 青青网三级视频| 久久久97| 手机在线观看不卡无码av| 亚洲A曰本VA欧美VA视频| 精品传媒在线一区| 天天射天天色成人| 亚洲不卡一| 91人人爽人人爽| 伊人网在线观看| 人妻AV 中文字幕的| 无码逼| 日韩成人高清一区二区| 欧美亚洲今日在线| 91热色| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 国产suv精品一区二区四| 色色五月天婷婷| 国产一区二区啪啪视频| 日韩国产乱子伦App| 成人av在线播放| 强奸乱伦AV一天堂网| 中文字幕精品探花视频| 精品熟女呻吟久久91| 一本大道青青| 久久97视频| 大茄子熟女AV导航| 97中文字幕一区| 国产97在线播放| 亚洲丝袜二区在线| 96国产精品| 97久久久久| 东京热毛片177b2viP| 欧美第二页| 狠狠操狠狠操操| 91视频精品| 婷婷在线视频在线观看| 久久精品人人做人人看| 中文人妻av高清一区| 四虎国产精品永久地址入口| 国产精品久久99日日| 岛国片国产成人亚洲播放| 亚洲黄色a级片| 国产AV久久久蜜爱影集| 狠狠爱综合网| 国产不卡精品91| 人妻一区久久二区三区色播| 日韩少妇无吗| 欧美综合在线91| 青青欧洲黑| 视频在线观看青青99国产| 天天影视综合色| 清纯唯美亚洲综合| 色色色日本| 免费伦费视频在线观看| 色综合色综合网| 美女尤物福利视频| 青青草五月天| 中文字幕二区| 91亚洲情色| 人人贴人人摸| 国产又粗又长又大的视频| 青青青在线高清视频在线一二三四区| 四方色播| 成人性爱av| 亚洲成av人片色午夜乱码| 中文字幕一区 二区三四五 区日 日骚 | 日本精品不卡一二三区| 色色99| 欧洲精品一区二区三区| 精品久操| 久操91视频| 日韩精品视频在线观看一卡二卡| 亚洲第一页色| 久久草视频污视频| 色色九区| 国产成人无码啪| 欧美毛片在线网| 国产中文福利| 精品传媒在线一区| 欧美精品99久久久**| 992这里有精品| 欧美一级专区免费大片 | 婷婷五月花| 国产日韩欧美| 亚洲加勒比久久日本道| 蜜乳AV一区二区三区四| 欧美亚洲国产自久久| 日本一卡二区在线| av在线播放国产一区| 99在线精品观看99| 人人爽人人精品乱人伦AV| 无码人妻一区二区三区免费九色| 国产Aα| 青青草在线视频人人想人人上| 欧美九一精品久久久熟妇| 自拍偷拍草一草| 嗯嗯啊啊视频在线看| 懂色av中文字幕一区二区三区天美| 日本影视久久免费| 色色国产| 久久久久极品| 午夜激情成人在线观看| 熟女日韩| 亚洲欧美日韩不卡人妻| 亚洲性爱无码乱伦av| 99蜜桃臀亚洲成人在线观看| 青草精品视频-日本久久久久网站| 久久久精品视频免费观看| 四虎免费看黄| 欧美Ⅴ性爱| 91neishe| 99re视频这里只有精品| 插欧洲美女欧美精品| 久久m| 人妻丰满熟妇一区二区三| 内射日韩大臀美女| 外国91| 五月丁香啪啪啪| 久久精品国产97欧美精品亚洲| 最新中文字幕精品在线| 精品性爱久久视频| 久久久久久久九九九九九九| 欧美少妇一区二区三区| 新亚洲无码| 青青草视频爽一爽| 最新日本中文字幕| 一区二区三区国产精产| 秋霞网无码| 91在线限制级| 狠狠久久手机视频精品| 二区熟妇韩日| 日韩黄片影院| 日韩三级在线观看mp4| 久久超碰国产一区二区三区| 中日无幕一二三四区| 超碰成人人人爽人人爽| 亚洲熟妇乱女区二区三区| 少妇被c 黄 免费观看| 嗯嗯啊啊操死我| 欧美v亚洲v综合v国产v妖精| 日日夜夜青青草母狗| 交换娇妻呻吟声不停中文字幕| 一区二区不卡| 国产欧美岛国精品一区| 久久机热| 天天操综合网| 搡老女人老91妇女老熟女| 97超碰无码网| 乱伦av国产| 黑白配性爱AV成| 人妻天堂综合网| 日韩无码极品| 另类 综合 日韩 欧美 亚洲| 一区操逼日比视频| 国产伊人精品在线| 九九热男人天堂| 欧美午夜视频免费观看| 欧美中字不卡| 亚洲精品男人的天堂| 最新无码国产| 黄色一区三区| 亚州国产精品乱| 国产精品一二三区18| 国产性爱欧美性爱在线| 岛国成人av在线播放网址| 97免费在线观看| 欧美精品双插| 久草视频分类在线| 日韩视频中文字幕| av久日| 五月丁香啪啪啪| 少妇一区二区三区高速| 亚春色色| 99精品热| 亚洲成人免费电影| 在线观看不卡一区二区三区| 欧美日韩精品青青| 天天干2019| 人妻精品一区二区在线| 中文字幕欧美日韩三级| 是还免费视频1727我| 色蜜AV| 亚洲乱码尤物193YW| 国产成年女黄特黄| 天天干夜夜操一区二区| 中文字幕亚洲欧美在线不卡| 精品黑人一区二区| 大屁股人妻女教师撅着屁股| 中文字幕第二页| 99re只有精品| 中文字幕人妻丝袜| 国产成人免费观看在线视频| 中文字幕精品探花视频| com 首页 18岁 禁区 女优 免费 精选 同城 | 在线观看成人性爱免费小视频| 国产超碰AV在线精品| 美女天天干| 97在线青| AV一二区| 欧美色图天堂在线| 国产女生在线| 性久久| 国产毛片片精品天天看视频| 96超碰网| 伊人久大| 试看60秒| 国产五码丝袜屁眼| 亚洲成人一二三区| 色婷婷视频| 两性综合网| 国产麻豆福利av在线播放| 国内毛片热久久思思热| 久一区久久蜜桃| 91操熟女视频 | 欧美乱伦专区| 亚洲不雅视频1区二区| 中文字幕av片| 日本中文字幕熟妇| 中文字幕综合人妻| 丁香婷婷激情五月天无毒不卡| 国产免费大片| 人妻日日夜夜精品| 91久久精品国产| 性爱动态120秒| 一区二区你上我| 超碰人人妻| 校园春色综合| 熟女人妻av在线资源,黄色的资源| 婷婷五月天色色| 亚洲成人免费在线| 337p大胆噜噜噜噜噜91Av| 性爱av在线免费观看| 五月天黄色激情视频| 国产日韩在线播放| 99久久久无码国产精品性男| 欧美国产伊人久久久久| 96久久精品一二三区色欲| 黄片无码在线制服| 92午夜免费福利视频| 秋霞一级视频在线观看免费| 丰满人妻大屁一区二区| 夜夜草网站| 亚洲色色色| 天天添天天干电影| 偷窥自拍亚洲色图| 欧美激情 日韩精品| 啊啊啊好舒服好爽啊啊啊视频| 精产国品一区二三产品| 麻豆 亚洲 97| 97超级色碰碰| 超碰人人干天天射| 久操97|