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

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(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)方案 簡介雙串口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ù)怎么不丟”的問題。現(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ù)。一幀最長 256 字節(jié)按 115200bps 8N1 計(jì)算一個(gè)字節(jié)位時(shí)間約 86.8μs3.5 個(gè)字符約 304μs。也就是說整個(gè)串口在等字節(jié)的過程中CPU 被迫跟著字節(jié)節(jié)奏走完全沒有彈性。最常見的單字節(jié)中斷收數(shù)代碼長這樣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直到幀長度超過 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 的冪。原因很簡單取余操作可以換成位與省掉除法指令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ù)長度 */ } 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 最長幀 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è)置傳輸長度。如果上一步的 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í)間足夠長定時(shí)器判定更符合協(xié)議定義。4.4 FIFO 容量選多大、溢出怎么辦不同波特率下推薦容量參考波特率推薦 FIFO 大小理由9600128幀間隔長應(yīng)用層來得及處理38400256一幀最長 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 在長幀中間觸發(fā)把一幀拆成兩幀現(xiàn)象主站一次讀 20 個(gè)保持寄存器從站卻解析出兩幀一幀 CRC 錯(cuò)誤另一幀長度不對(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í)用萬用表量兩個(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)幀長度少一字節(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ù)不斷增長說明應(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无码| 五月丁香色色网| 亚洲色性情三级| 欧美特大AA级黄片| 久久婷婷成人综合色怡春院| 丁香五月天激情综合| 久久久555| 射丝袜高跟鞋99| 无码不卡亚洲成?人片| 91 国产丝袜在线放观看| 人人操人人操人人操人人操人人操人人人11.CM | 九九国产| 色99色| 在线观看无码三级少妇| 天天综合91入口| 99热欧美| 91爆操视频| 亚洲人妻色图| 欧美 青青草| 99日精品欧美国产| 青草精品视频-日本久久久久网站| 丰满人妻一区二区三区性色| 亚洲欧洲激情| 任我爽视频在线观看| 四虎影院成年人片| 国产中文字幕曰本毛片| 欧美黑人精品在线播放| 亚洲乱妇p22| 久久久久久999| 日本孕妇孕交| 久九9精品| 嗯嗯啊在线视频| 欧美午夜视频免费观看| 色色毛片| 97精品熟女少妇一区| 久久在线观看免费视频| 蜜臀va69| 粉嫩AV一区二区夜夜| 精品女同一区| 在线观看午夜婷婷久久久久清性观看| 99re视频在线观看这里只有精品| 国产精品黄色三级av| 手机看片91人妻| 人人做天天爱| 超碰97久久| 高潮综合网| 久久婷色| 中文高清一区二区的| 老司机深夜影院18未满| 欧美黄色手机在线观看| 人妻一区视频| 人人操人人狠狠操| 欧美亚洲综合色| 婷婷午夜成人色中色| www.伪伪| 熟女视频久久| 亚洲 欧美 91| 久久妇| 美腿丝袜高跟网免费视频免费视频| 操逼视频免费日韩无码| 亚洲国产一区二区入口| 黄片无码在线制服| 欧美综合第一| 91/欧美| 99少妇内射| 天天综合网日韩| 欧美色图欧美| 亚洲国产精品V?在线播放| 性爱乱伦视频免费| 五月天婷婷小说| 天天看人人操屄犊摸阴| 免费观看一区| 啪啪免费| 91麻豆天美国产欧美| 神马午夜久久久| 欧美狠狠弄| www被窝色com| 九七超碰| 亚洲色图超碰在线| 九九操久久国产免费视频| 人妻少妇久久中文字幕一区二区 麻豆 | 亚洲欧美国产日本一区二区三区 | 制服中出中文人人精品| 国产精品久久久吖| 一区在线国产播放| 午夜精品久久久久久久99热影院| 日韩欧无码一区二区三区免费不卡 | 操逼网站视频漫画国产| 91 丝袜在线| 我爱操| 伊人操你| 夜夜操天天肏| 天天日美女的B| 免费综合亚洲中文| 久久精品99| 国产 日韩,欧美 自拍| 欲香欲色综合天天伊人| 色成人Www精品永久观看| 视频二区美腿丝袜制服人妻欧美 | 人妻大香蕉| 欧色网址| 一本一道vs波多野结衣| 69视频福利导航| 97香蕉网| 日韩紧密久久| 东京热综合久久一区二区 | 波多野42部无码喷潮在线观看| 人妻激情偷乱视频一区二区三区 | 国产Av超碰| 天天日天天插| 91丝袜美腿网站| 99精品九九九九九九| 五月婷网站| 日本蜜桃| 亚洲欧美999| 超碰 97国产熟女| 曰本91情色| 国产无码三级视频在线观看| 强奸乱伦大香蕉网| 自拍亚洲综合| 黄色性爱网网| 久久久免费高清中文视频| 国产精品ww久久| 91丨国产丨白浆| 欧美 亚洲 第一页| 奇米狠999| 久草综合视频| 久久精品六区| 国产精品爽爽v| 熟女AV一区| 人妻少妇被猛烈进入中| 狠狠操狠狠燥| 麻豆蜜桃视频在线观看| 在线αⅴ| 日本好吊色视频| 亚洲午夜福利视频| 日韩超碰97| 天堂日本亚洲欧美| 人妻一区视频| 超碰欧美COM| 九九热免费视频| 亚洲天堂一区| 精品一国2| 欧美强奸乱能| 久久香蕉国产线看观看亚洲女人 | 97久久超碰日韩精品| 丁香六月激情| 天天夜躁日日躁狠狠2002| 97综合国产精品高潮久久| 久久亚州精品成人Av无| 97欧美日韩精品| 久久久久久久强迫| 一级久久性爱视频| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 天堂岛av| 日本一区视频在线观看| 激情另类激情| 久九九九九九九九热| 成人女人国产| 国产熟女免费观看久久| 亚洲熟女人妻中文字幕一区二区 | 久久这里| 一本道综合色图| 成人精品一区二区91毛片不卡| 精品美女少妇一区二区| 禁十八久久| 亚洲国产成人高清在线| 日本免费专区| 97精品国产| AV色五月天| 午夜天天碰综合视频| 国产福利影视| 国产不卡的视频 | 免看60秒涩涩视频| 亚洲国产一区二区三区在线 | 日韩一级成人毛片免费观看| 97这里只有精品| 91美女視頻| 亚洲熟妇图片| 国产三级多多影院2022国产AA一级毛片无码| 久久久久96| 国产a级精品| 99综合视频| 高跟丝袜AV专区国产| 成人精品无码| 岛国黄片网站| 99色热国产视频精品| 亚洲在饯| 一级性爱视频免费在线| 狠狠97| 久久欧洲| 上床不卡网站| 亚射在线| 色狠人在线99| 97视频在线免费看| 江都AV在线| 久久久婷婷婷| www.色婷婷色综合| 91粉嫩萝控精品福利网站_精品影音先锋国 | 91超级碰| 天美精品av| 无码又爽又硬又激情免费视频| 日韩乱伦影音先锋| 人妻一区视频| 亚洲激情综合| 亚州宗合另类| 久久大香蕉手机高清| 亚洲综合另类| 久久欧美按摩999| 飘花国产午夜精品不卡| 亚洲国产成人精品999| 草草草视频| 97在线免费| 啪啪视频免费在线观看| 金莲网址| 亚洲精品无码少妇久久| 激情五月天婷婷| 丝袜美腿欧美| 操b网站亚洲无码| 亚洲精品天天影视综合网| 青青草视频在线观看一区二区| 日韩熟女精品无码专区一区二区| 九九拍拍精品视频在线播放| 久久精品视| 懂色av中文字幕| 无马一区二区| 日韩熟女操逼| 亚欧国产无码精品在线| 日夜久久久九九九久| 91/欧美| 高清孕妇孕交 交孕妇| 91模特在线观看| 91少妇人妻| 日本熟女不卡视频| 黑人嘿嘿嘿超爽免费视频| HEYZO高无码国产精品227| 久久婷婷伊人| 欧美国产操逼| 亚洲日韩精品久久久久一区壹牛 | 日韩精品人妻系列无码天堂| 日本 情色 1区2区3区| 三及片网站| 伊人网青青| 精品视频免费在线一区| 一本久道久久综合狠狠爱| 欧美日韩国产中文精品字幕自在自线,| 色盈盈影院| 一区二区播放| 370p日韩欧美亚洲精品| 无码99| 国产不卡中文字幕免费avi| 九九视品黄色| 久久久久国产| 起碰97| 黄色片大香蕉| 亚洲自拍青操视频| 天天视频黄| 日韩欧美国产高清视频| 99操| 午夜国产成人精品视频| 人、人、摸,人、人、草| 人妻天天操天天爽视频免费| 偷拍亚洲情色| 岛国色情视频在线观看| 欧美在线官网| 久久久久久久| 中文字幕av亚洲在线| 日韩/97| 玖玖久久久| 乱论91| 日韩国产十八禁| 春色91| 操逼视频免费日韩无码| 91处女视频在线观看| 中国少妇啪啪视频| 欧美日韩性爱视屏免费看了| 青久久| 波多野结衣被操50分钟免费视频| 日韩二级| A级片一区| 嗯啊免费视频| A 天堂| 精品国产乱码久久久久久影片| Julia Annxxxxx| 人人摸.人人色| 欧美精品丝袜久久久中文字幕| 97伊人超碰| 日韩激情中文字幕有码| 中文字幕乱妇免费视频| www久久99| 9 1超碰九色| 超碰人人超在线观看| 亚洲高清在线se| 欧美日韩国产高清在线一二三区| 国产久久一区二区| 欧美日韩色综合网| 久久AV色| 婷婷色色网| 国产精品 午夜福利| 色悠久| 久久天天摸| 探花精品 一区二区| av无线看| 麻豆色99999| 99精品久久久久久久婷婷蜜桃| 色香综合天天影视综合 | 永久免费观看的毛片的网站| 宅男午夜在线视频| 精品人妻中文字幕4399| 欧亚揄拍偷拍精品视频| 午夜免费福利视频一区| 亚洲性天堂| 成人AV素股で擦久久| 国产精品又黄又猛又粗| 亚洲综合九| 亚洲黄色a级片| 久操国产在线| 97这里都是精品| 欧美aa一级片| 国内一级精品| www.高清无码诱惑一区.com| 无码国产精品久久久久| 蜜臀99久久国产| 天天操天天射青青草| 人人做天天爱| 啪啪啪综合| 色眯眯射| 99热思思| 曰本人妻人人澡人人夹| 三久久久四久久久久| 10000部十八禁看电影| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 久久ww| 日韩 国产 欧美自拍| 91网站18+| 91色碰| 十八禁成人网站在线观看| 超碰色图| 99热国产| 金典av| 91久热这里只有精品| 在线国产福利网址导航| 九九九色| 一区二区三区一亚洲中文字幕、综合区灬 | 女同亚洲欧美一二三区久久电影| 国产懂色精品国产av| 精品欧美不卡在线播放| 97超碰欧美精品| 日韩人妻精品中文字幕| 91撸色网 玖玖网 欧美| 99免费视频| 久久香蕉国产线看观看猫咪av| 人人操人人摸人人骑| 久久禁| 伊人991| 久久25| 能看的AV| 日韩成人电影AV| 免费在线黄片视频| 超清福利精品视频在线| 久久精品视频一区三区小泽玛利亚| 99在线精品观看99| 性色av婷婷久久一区二区点复制| 奇米四色影视777久久久| 在线午夜成人无码视频| 熟女人妻一区二区三区| 999色欧美中文字幕| 2019午夜福利视频| 久草在| 天天天乱色综合全| sss视频华人在线| 国产伦精品一区二区三区视频女| 狠狠色婷婷7777久| 亚洲天堂 视频你懂的| 国产第25页在线观看| 国产第12页| 色综合一本| 国产精品黑人一区二区三区| 精品免费视频国产一区| 国产偷人伦激情在线观看| 国产精品乱码久久| 狠狠91| 成人一二| 波多野42部无码喷潮在线观看 | www.色婷婷.com| 色播丁香| 啊啊啊 在线观看| 东北夫妻性偷拍| 射 色综合| 国产91美女高潮| 啪啪视频mP4| 久久精品一区| 天天舔天天日天天射| 91久久久老司机| 9精品久久| 破处bbq| 精精品人妻一区二区三区| 欧美色视| 岛国在线国产| 日韩精品黄片免费观看| 天天操综合网| 日本999精品视频| 久久久专区| 欧美另类天堂| 91丝袜在线观看| 欧美日韩另类在线| 日本护士高潮| 中文字幕日产av人| 97视频900| 99色热| 尤物av网站免费在线播放| 黑人精品XXX一区一二区| 99久久久久久久久| 天天狠| 亚洲诱惑| 78超碰| 精品人妻av在线播放| 国产精品久久久久av| 深夜操逼网| 伊人久久大香线综合无码| 天天大干大香蕉| 97在线观看| 日韩精品1区2区中文字幕| 精品一区二区三区蜜桃臀赵总| 亚洲精品一二三四区| 亚洲AV人人澡人人爱| 国产福利合集| 欧美视频在线视频免费va| 激情图片伦理国产一区二区日韩| 天天热精品| 中国操逼无码| 99re9在线| 人妻激情在线视频| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 日韩一级片在线看| 麻豆国产成人精品| 五月丁香激情四射| 中文字幕啊啊啊在线观看视频| 欧美 熟女 日韩| 日本影视久久免费| 成人日韩欧美| 加勒比无码毛片| 成人小说视频在线精品欧美| 久久的网站啊啊啊啊啊| 亚洲欲色| 26uuu国产| 白丝在线一区| 一级特级aaaa毛片免费观看| 欧美亚州综合图片| 操逼视频色| 最新AVzaixian| 久久久啊啊啊| 综合色色婷婷| 全国男人天堂网| 国产福利小视频高清在线观看| 精品久久久久黄少妇| 超碰97人妻在线| 99精品网| 久久超碰网| 99综合网| 欧美色图20p| 人妻天天夜夜爽一区二区| 亚洲情色 自拍| 动漫爆乳3D奶水一区在线观看 | 91free福利| 国产精品久久久久久久久久二区三区| 日本一级婬片试看三分钟| 欧美一区二区传媒| 亚洲性爱乱操x| 加勒比海成人视频网| 亚洲国产成人精品无码专区| 亚洲 欧美 制服 另类 自拍| 欧美不卡在线美女| 91东北熟女| 男人天堂久久精品| 天天草天天日| 国产免费大片| 牛牛操视频逼| 日韩综合97P| 黄色小视频日本txt| WWW美腿丝袜香蕉中文| 91人妻尻屄视频| 久久精品无码熟妇一区二区三区视频导航 | 欧亚韩国999| 深夜激情无码| 青青草公开在线免费不卡视频| 久久亚洲av成人无码国产| 久久久久女教师免费一区| 丁香六月婷婷久久综合| 懂色Av| 十八禁黄色成人网站观看| 黄色在线网站| 9 1果冻精品视频| 国产av白丝| 青娱乐欧美激情一区二区| 呦女网站| 狠狠躁AV| 探花一区在线| 尤物视频视频官网| 日韩欧美中文字| 五月激情综合网| 亚洲春色欧美激情自拍| 另类图片五月天| 中文字幕啊啊啊在线观看视频| 97超碰人人操人人操| 欧美激情久久久久| 日韩在线76| h无码动漫在线观看| 97碰碰色| 久偷拍欧美日韩三区| 天天拍天天操| 黄色AAAAA欧美| 亚洲美女AV无码| 中亚黄色三级大片| 日韩精品人妻系列无码天堂| 午夜国产成人福利视频| 中文?日韩?免费?精品| 九九九九免费视频| 夜夜操av亚洲一区二区| 欧美啪啪女女| 日韩欧美成人午夜福利| 久热一区二区| 狠久久| 国产欧美成人精品| 蜜桃精品一区二区三区ww| 国产强奸超碰AV| 欧美成人A√在线一区二区| 少妇色欲综合网2| 国产乱码精品久久久久久| 亚州色图第三区| 亚洲蜜桃V妇女| 国产福利电影| 日本性感人妻91| juliaann丝袜| 欧美人妻一区二区| 日韩久草| 精品久久九| 五月婷婷hd| 99青草| 色五月婷婷网| 久久久婷婷| 婷婷深爱五月| 全免费a敌肛交毛片免费| 日韩人妻有码免费视频| yaouchengrenav| 69一区二区三区| 成人性交午夜免费片| 91国产伊人大香蕉| 亚洲精品国产熟女久久久| 素颜老阿姨乱情色| 午夜福利在线视频1000| 九九九九九九成人| 大肉棒导航| 超碰综合色| 日日橹狠狠爱欧美超碰| 亚洲 欧美 小说| 91l欧美在线| 日韩成人午夜精品久久高潮| 日本一片一区| 久久久久久波多野吉衣高潮| 神马午夜久久久| 亚洲欧洲色情高清| 婷婷15月天青娱乐| 日韩中文字幕精品一二三事国产精品| 色哟哟AV| 欧美姓爱综合网| 啊啊啊啊啊啊在线观看| 免费无码婬片AAAA片直播色戒| 亚洲天天综合| 欧洲亚洲国产综合在线| 夜夜天天噜狠狠爱2021| 亚洲AV永久无码一区仙野| 337p大胆噜噜噜噜噜91Av| 120分钟婬片免费看| 久操综合在线| 人人摸人人干| 肉丝中文无码高清| 97欧美日韩| 日韩熟女操逼| 一级啊性爱在线视频| 亚洲第一在线视频| 亚洲情色婷婷五月天| 国产传媒日本欧美专区| 日韩欧美天堂| 97在线观看| 欧美精品成人在线播放| 高清在线偷拍自拍视频| 亚洲精品久久久久久久久豆丁网| 欧美久久婷婷| julia国产在线| 久久久久久99AV无码免费网站| 琪琪精品免费一区二区三区 | 久久鲁夜| 超碰在线免费一区二区三区| 青青操网| 91九色精品熟女内射| 午夜久久一区二区无码中出| 欧美日韩亚洲国产中文永久天天看| 亚洲综合网91| 中国少妇XXXX做受| 免费夜夜爱黄色视频毛片| 久久97资源 网| 亚洲精品国产拍免费91在线| 亚洲国产av中文字幕久久| 九九色精品| 嗯嗯啊好大| 久久啊啊| 人人操人人摸人| 欧美综合色站| 欧美性夜| 天天精品| 精品无码久久久久| 亚洲爽图| 国产精品色色| 午夜福利一区二区三区四区五区色婷婷| 超碰九区| 久久五月婷| 福利大香蕉| 自拍偷拍国产欧美日韩韩| 五月丁香激情综合| 中文字幕av一区二区三区人妻少妇| 可以免费看黄片的视频| 国产后入精品| 国产97av| 新版天堂中文资源8在线| juliaann丝袜大战黑鬼| 最新日本中文字幕| 啊啊啊啊啊啊啊国| 亚洲美女精品九九视频| 国产又色又爽又舒服的三级视频| 色偷综合| 人人妻人射| 欧美国产有色电影| 免费福利视频中文字幕| 亚洲精品欧美专业| 91久久九九精品国产综合| 欧美1727免费观看视频| 男人的天堂1024| 丁香五月激情婷婷| 超碰97伊人| 久热伊人| 青草精品视频-日本久久久久网站| 日本亚洲熟女视频| 后入合集| 国产毛片精品一区二区色欲黄A片| 夜夜无码| 色色热| 中文字幕在线观| 97中文天堂| 男人天堂网站| 国产一区二区三区不卡手机在线| 色欲天天综合久久久无码网中文| 国产成人资源| 久久草草亚洲蜜桃臀| 九九成人精品| 欧美黑人精品在线播放| 97免费视频在线观看视频| 色黄色美女大长腿午夜视频| 欧美91久久久久| 亚洲最大网站av| 亚洲三级。日韩三级| 久久黄黄| 蜜乳成人AV| 在线情色电影 91大| 精品国产久热在线观看| 日夜精品| 天天综合香 ld视频| 性爱乱伦视频免费| 国内外毛片在线观看| 久热伊人| 欧美在线永久天堂| 精人妻无码一区二区三区伊人直播| 国产1769在线| 国产剧情在线| se,,,亚洲欧美| 亚洲精品成人| AVE乱伦| 啊啊啊啊啊啊啊在线| 丁香婷婷啪啪| 69XX一中文字幕人妻91| 啊啊啊好疼| 亚洲天堂中文字幕无码男同| 日本性爱欧美性爱| 天天欧美97| 欧美无圣光在线| 国产超碰| 日本1区2区不卡视频| 欧美日韩系列| 四虎免费看黄| 99色在线| av网页一区二区三区| 91丝袜| 91成人久久| 神马视频久久久久久| 日韩av在线免费网站| 91亚洲网| 大香交| 欧美熟女妇同| 久久久九97| 91操人| A一区片| 男人的天堂1024| 97精选久久| 人妻美腿丝袜制服诱惑综合天堂-| 欧洲一级性爱视频在线观看| 在线亚洲 欧美 日本专区| 一卡二卡三卡| 91国产在线精品| 91在线限制级| 超碰三级秋霞| 丁香五月性爱| 天堂中文资源在线bt| a片偷拍视频| 久久久久久久久久9| 中文字幕二区| 嗯嗯啊啊好大好爽| 日本 免费 一区二区三区 久久香蕉| 91|九色|国产熟女| 爱av免费| 久久无码电影| 人人操人人搞人人草| 久久国产熟女影院| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 久9久9久9久9久9久9| 久久同城AV| 欧美情色贴图| 久久久久久中文版| 岛国人妻少妇av在线观看| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 人妻 制服 日韩 中文 在线| 欧美一区二区情色| 久久精品视频久久久| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国模少妇一区二区三区| 一本一道vs波多野结衣| 乳欲人妻办公室奶水| 亚洲伊人a线观看视频| 国产多人在线观看视频| 久操操AV电影| 精品久久久久久中文字幕三区| 成人小说另类在线| 亚洲AV麻豆Aⅴ无码电影一| 97在线视频观看| 91欧洲国产成人久久精品网站| 中文字幕99999| 大香蕉78| 亚洲国产精品成人综合| 伊人久久在线视频观看| 黑人狂躁日本妞一区二区三区| 国产女同视频在线播放| 无码天天操| 国产女人操逼视频| 国产精品老师| 91亚州日韩高清| a男人的天堂| 久久久久ab| 欧美精品,四区。五区| 天堂亚洲精品| 91中文字幕| 国产高清视频无码在线| 天天躁日日躁xxxxx| 破苞ⅩXXX性无码动漫无码| 色色色欧美| 国内精品不卡无毒99999| 青青草在线视频欧美| 天天草AV| 78超碰| 亚洲AV成人无码一二三久久| 成人三一级一片aaa| 日本福利二区视频| 在线啊啊啊啊| 日本顶级天天操狠狠操夜夜操中文字幕| 骚货 中文字幕 av| 蜜臀久久99精品久久久| 成人乱人伦一区二区| 蜜桃无码AV一区二区| 久久久工口| 懂色av中文字幕一区二区三区天美| 大逼色网站| 五十路六十路七十路熟婆| 曰韩成人免费视频| 99999无码| 97jingpin| 久久精品国产亚洲5555| 无码免费精品高清| 中文一区二区婷婷视频| 粉嫩久久久极品| 国产资源中文字幕在线| 日韩AV熟女乱伦| 色好看av| 蜜臀AV一区二区三区| 91av一区二区在线观看| 99热综合| 91无摭挡| 亚洲人体视频在线观看| 色九区| 99在线啪| 国产一区免费午夜视频| 亚洲老熟妇xxx| 天天影视之亚洲综合网| 永久免费av无码网站国产app| 国模精品娜娜一二三区| 国产精品高潮久久AV| 欧美AB在线| 欧美日韩操逼嗦吊| 欲香欲色天天天综合和网| 亚洲在线欧美| 99色天堂| 欧美一区二区三熟女剧情| 中字幕人妻一区二区三区| 水野优香在线观看| 一区超碰一区| 欧美人妻精品一区二区| 婷婷五月天久久精品视频一区二区三区 | 日本不卡一区二区三区| 国产黄色在线播放观看| 久久久久无码| 国产精品乱码久久| 99综合视频一体| 久久精品国产97欧美精品亚洲| 国内毛片无遮挡国产| 小草精彩毛片| 中文字幕制服诱惑| 天天弄天天操| 亚洲图片小说欧洲| 日本免费亚洲欧美| 好爽要喷了| 最新中文字幕精品在线| 久久女同性恋一二区| 亚洲色欲天天天堂色欲网女| 国产女上位好爽在线| 日日摸日日碰夜夜爽视频| 亚洲综合九九| 日本三级精品| 99这里都是精品| 妇女一区二区三区| 嗯嗯啊在线视频| 偷拍亚洲| 久久仑合| 欧美日韩不卡a片| 裸体1区| 日韩人妻免费精品| 玖玖无码超碰| 精品久久久久久亚洲| 神马久久久久久| 宅男91视频在线播放| 高清有码一区二区| 伊人久久久日韩一区| 乱伦1色页| 亚洲中文字幕一区| 99久久婷婷| 色汉综合| 69视频福利导航| 熟女乱伦A| 亚洲AV不卡在线观看| 五月婷婷久久综合| 欧美色亚洲| 伊人精品视频| 无码视频黄色网战| 97色综合中文网| 熟妇人妻一区二区 | 久草男人天堂| 亚洲四虎熟女精品| 夫妻天天操岛国视频| 97天天综合网| 懂色AV蜜臀无码精品APP| 老熟乱一区二区三区四区| 欧美日韩性感| 性影在线视频| 亚洲欧美在线丝袜| 加勒比AV网| **一级毛片国产| 亚洲一区日韩精品中文字幕| 传媒免费一区二区三区| 99久久9| 在线观看不卡一区二区三区| 亚洲精品黑丝| 久久最新免费视频23| 日韩性爱毛片操骚逼| 青青草公开在线免费不卡视频| 欧洲Au麻豆| 静品嫩模一区二区| 久久久久久99AV无码免费网站| 精品一二三区女同| 欧美色三级片91| 国产偷拍自拍在线视频| 亚州男人天堂| 欧美国产操逼| 日韩精品高清资源在线| 国产在线视视频有精品| 老子午夜伦不卡影院| 精品国产乱码久久久影院| AV高清一区| 天天干天天干天天干| 青青操综合网| 污色区网站| 国产美女高潮视频| 动漫av中文| 嗯阿好爽好紧| 五月丁香久久| 欧美东京热精品A∨| 精品亚洲一区在线观看| 超碰97 线线 在现| 天天综合站| 亚洲人妖网| 熟妇人妻一区二区三区| 中文字幕黄色片| 色噜噜精品一区二区三| 欧美性生活男人的天堂| 亚洲色图一区二区三区| 日韩精品资源| 91N综合网在线| 蜜臀久久久| 亚洲蜜臀懂色| 中文字幕一区二区三区人妻少妇在线| 欧美黄色大香蕉一区二区| 欧美极品性爱天天射| 久久透逼视频| se吧提供91精品国产91久久久久久 | 91美女精品| 九色 蝌蚪 熟女自| 伦理日韩国产久久| 操逼999| 丝袜美腿校园春色| 麻豆天美制片厂网站视频| 夜夜夜久久| 99国产精品人妻人伦| 亚洲欧美精品一区天堂久久 | 超碰在线在公开超碰在线在公开| 久久久久网站-538在线视频-欧美永久乱码 | 久久精品中文| 精品人妻一区二区三区夜夜| 99xav| 天天天天天超碰| 欧美影音在线| 内射卯月麻衣| 男人的天堂日韩| 骚货 中文字幕 av| 男人的天堂kva| 精品国产乱码久久久影院| 色欧美在线| 欧美日韩亚洲天堂| 久久狠狠色噜噜狠狠狠狠97| 久久久新亚洲AV| 亚洲学生妹高清av| 日韩黄片影院| 国产精品干干干| 韩国三级理论在线| 99欧美| 97二区四区| 成人在线永久| 97在线欧| 国产精品国产精品国产| 女沟厕偷窥piss小便| 伊人专区一区二区三区| 性色av蜜臀av色欲aV| 俺去俺来也在线www| 日本九九九九| 人妻插插人妻人| 色娱乐色呦呦夜夜夜夜av| 蜜桃臀一区二区三区久久| 四虎在线视频| 日产操逼| 国产精品自在自拍视频| 一本道综合色图| 91天堂视频| 国产欧美日产一区二区三区 - 国产欧美日 | 精品成人亚洲午夜电影| 亚洲成?V人片在线观看福利| 亚洲有码 视频一区| 96免费视频在线| 美女天天干| 久久国产在线一区二区| 夜间福利片1000无码| 亚洲无码99| 丝袜视频一区二区在线播放国产中文| 亚洲影视第一页| 亚洲欧美首页| 人人妻人射| 精品少妇后入一区二区三区四区人妻巨乳| 夜夜操天天肏| av橘色网站| 国产欧美日本亚洲精品| 久久9视频| 精品176精品2| 久久人| 天天色综亚洲91污| 色鬼在线综合| 欧美高清91| 精品国产丝袜一区二区三区乱码| 激情五月婷婷| 国产乱码久久久久久| 久久大黄片| 极品极品色影院| 亚洲自拍一区夜夜操| 欧美色乱| 九九色婷婷| 少妇色综合| 日韩字幕一区| 超碰久久中文| 欧美图片校园春色| 手机在线视频国内精品| 久久婷婷色综合一区二区三区| 日本高清一本二本免费不卡| 強姦亂倫a| 欧美熟爽综合| 亚洲色图欧美色18直播在线| 国产精品无码av| 久久视网78| 欧美第一页| 啊啊啊不要好疼视频| 中日992视频| 日韩色| 伊人国产视频| A片A5445444| 91女人的网站| 日本精品五区| 国产欧美第五页| 久久久亚洲精品中文字幕人妻| 亚洲一本色道中文无码aV天美| 成人热久久精品| yaouchengrenav| 亚洲国产综合久久天堂| 校园春色 欧美| 夜夜爽33333| 天天干18禁| 9 9精品一区二区三区| 青女偷拍网| 婷婷久月| 精品久久97| 天天天天操| 亚洲一二三四区| 日韩在线视频1234| 啊啊啊啊网站| 亚洲精品97在线| 26uuu久久| 久久免费看高潮毛片韩国| 欧美18老人禁| 超碰97玖玖爱| 国产精品永久免费10000| 久久 亚洲 日韩 人妻| 操日韩第| 夜夜夜夜爽| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 夜夜中出国产| 综合网91| 中文字幕88av在线| 最新三级网址| 熟妇女伦乱视频视频| 91丨九色丨大屁股| 精品久| 干b在线性社区| 亚洲国产婷婷在线播放| 激情情色五月天| 九九av| 精品国模无码| 综合91网| 色情五月丁香| 免费操逼91| 超碰碰激情97+久| 亚洲一区二区精品福利| 91色欧美| 国产嫩草精品A88AV在线| 国产高清精品一区二区三区毛片| 日韩丝袜高跟制服在线观看| 91精品国产高清久久久久久,亚洲成人| 99rre在线精品99re8| 久操视频免费在线观看| 又粗又长又爽在线观看| 色天天野狼综合社区| 亚洲日本加勒比在线| 成 人片 黄色大片| 丰满熟女人妻一区二区三五十一路| AA丁香综合激情| 玖玖爱在线视频免费观看| 久久久九精品| 久操大香蕉手机视频在线看 | 91最新综合| hd成人一区二区在线| 亚洲在线a| 久久久久久久久久久久久久久久9 亚洲成人妻日韩在线 | 国产成人资源| 性开放中文AV高清无码免费看| 蜜臀久久99精品久久久久久成人小说| 天天干一区二区| JIZZJIZZ国产精品喷水| 一区二区三区国产在线播放| 日韩中文字幕宗合在线| 蜜桃色色网站视频三区| 国产高清26uuu| 亚洲一区二区三区婷婷| 欧洲自拍色图gif在线| 爽爽歪在线视频| 综合免费无码中文| 日韩在线国产字幕| 九九九国产精品| 国产综合久久久鬼色| 99免费在线视频| 亚洲天堂人妻熟妇视频| 人人搞人人插人人操| 色九色久| 久久色一区二区| 大稥蕉免费视频这里只有精品| 亚洲黄色a级片| 亚洲成人在线高清| 校园春色五月天| 国产视频97| 99色骚| oumeisetupian| 日韩一级二级| 黄片在线免费在线观看| 免费观看国产小粉嫩喷水精品午| 亚洲欧美黄| 久久久999国产精品| 91精品免费| 精品久久久久久久久久久久| 青青草九九九九九| 婷婷九月色| 人人摸人人叼| 丰满人妻无码一区二区三区| 69av一区二区三区| 男人午夜天堂| 亚洲男人天堂手机版| 黑人精品欧美一区二区蜜桃| 精品一二三区四视频| 欧美页片| 欧美亚洲20p| 北京专精特新企业招聘信息| 综合影院亚洲| 中文字幕在线24| 综合熟女| 日本91白丝| 亚州伊人色综台| 国产按摩一区二区三区| www.夜夜| 狠狠干狠狠干| 五月婷婷激情网| 久久乐| 男人的天堂2010| 一区二区三区精品黑丝白丝酒店对鸡| 国产精品成人无码av| 久久久久9| 99热亚洲| 天天综合在线4| 按摩中文字幕| 欧美日韩222| 亚洲自拍欧美国产首页网曝| 欧美精品91| 啊啊啊要高潮了| 亚洲文学偷乱拍啪啪啪啪 | 强奸乱伦av电影| 深夜激情无码| 97精品综合| 中文字幕在线24| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 亚洲AO在线| 成人青青草原伊人| 啊啊啊啊啊舒服| 国产青青综合伊人|