wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6426|回復: 7
收起左側

我的ModBus主機-UART篇

  [復制鏈接]
ID:446156 發表于 2021-11-15 09:46 | 顯示全部樓層 |閱讀模式
眾所周知,ModBus從機很好實現,而主機就稍微麻煩一點。下面我將介紹這幾年來我用到的ModBus主機方案,既作為分享又作為一個記錄與總結。
談到ModBus就不得不說UART,UART作為ModBus協議的承載是整個ModBus通信的基礎。
UART的基本收發功能通過文件“UartDebug.c”和“UartDebug.h”來實現,首先來看“UartDebug.h”文件的內容。
  1. #ifndef __UartDebug_H
  2. #define __UartDebug_H

  3. #include "Header.h"
  4. #include "usart.h"

  5. #define BUFMAX 32
  6. #define SLIENTTIME 5

  7. #define RE_DE1 PCout(1)
  8. #define RE_DE2 PFout(8)

  9. struct UartDebugMember
  10. {
  11.     void (*REDE)(uint8_t a);
  12.     UART_HandleTypeDef *Uart;
  13.     uint16_t *UartData;
  14.     uint8_t TransmitBuf[BUFMAX+1];
  15.     uint8_t ReceiveBuf[BUFMAX+1];
  16.     uint8_t RecPointClearEn;
  17.     uint8_t ReceivePoint;
  18.     uint8_t DataTimeCount;
  19.     uint8_t DataTimeCountEn;
  20.     uint8_t ReceiveFinish;
  21. };

  22. extern struct UartDebugMember U_D_Uart2,U_D_Uart3,U_D_Uart4,U_D_Uart7;

  23. void UartDebugInit(void);
  24. void DataReceive(struct UartDebugMember *UDM);
  25. void TimeCountReceive(struct UartDebugMember *UDM);
  26. void ClearRxData(struct UartDebugMember *UDM);
  27. void TransmitData(struct UartDebugMember *UDM,unsigned char *Buf,unsigned char Length);
  28. void SendString(struct UartDebugMember *UDM,char *String);
  29. void RS485_REDE_1(uint8_t a);
  30. void RS485_REDE_2(uint8_t a);
  31. void Null(uint8_t a);

  32. #endif
復制代碼

"Header.h"文件包含了基本的單片機信息,移植代碼的時候只需要將相應的頭文件替換掉就可以了,本章最后會貼出"Header.h"的具體內容。

“#define BUFMAX 32” 設置收發緩沖區的大小;
“#define SLIENTTIME 5” 總線靜默時間閾值,用于判斷該幀數據是否接收完畢;
“#define RE_DE1 PCout(1)”和“#define RE_DE2 PFout(8)”為RS485芯片收發控制IO;

下面將介紹“struct UartDebugMember”結構體成員
“void (*REDE)(uint8_t a);” 該函數指針為RS485芯片收發控制函數;
“UART_HandleTypeDef *Uart;” 使用的UART端口,該成員涉及到底層若更換其他MCU或者使用其他庫函數需要作出相應修改;
“uint16_t *UartData;” 串口接收到的一個字節;
“uint8_t TransmitBuf[BUFMAX+1];” 發送緩沖區;
“uint8_t ReceiveBuf[BUFMAX+1];” 接收緩沖區;
“uint8_t RecPointClearEn;” 接收字節數清零使能;
“uint8_t ReceivePoint;” 接收字節數;
“uint8_t DataTimeCount;” 當前的總線靜默時間
“uint8_t DataTimeCountEn;” 當前的總線靜默時間計時使能
“uint8_t ReceiveFinish;” 幀數據接收完成標志

關于函數我們將在下面的"UartDebug.c"中進行介紹。
  1. #include "UartDebug.h"

  2. struct UartDebugMember U_D_Uart2,U_D_Uart3,U_D_Uart4,U_D_Uart7;

  3. void UartDebugInit(void)
  4. {
  5.         U_D_Uart2.Uart = &huart2;
  6.         U_D_Uart2.UartData = &Rdata_UART2;
  7.         U_D_Uart2.REDE = Null;
  8.         HAL_UART_Receive_IT(U_D_Uart2.Uart,(uint8_t *)U_D_Uart2.UartData,1);
  9.         
  10.         U_D_Uart3.Uart = &huart3;
  11.         U_D_Uart3.UartData = &Rdata_UART3;
  12.         U_D_Uart3.REDE = Null;
  13.         HAL_UART_Receive_IT(U_D_Uart3.Uart,(uint8_t *)U_D_Uart3.UartData,1);
  14.         
  15.         U_D_Uart4.Uart = &huart4;
  16.         U_D_Uart4.UartData = &Rdata_UART4;
  17.         U_D_Uart4.REDE = RS485_REDE_1;
  18.         HAL_UART_Receive_IT(U_D_Uart4.Uart,(uint8_t *)U_D_Uart4.UartData,1);
  19.         
  20.         U_D_Uart7.Uart = &huart7;
  21.         U_D_Uart7.UartData = &Rdata_UART7;
  22.         U_D_Uart7.REDE = RS485_REDE_2;
  23.         HAL_UART_Receive_IT(U_D_Uart7.Uart,(uint8_t *)U_D_Uart7.UartData,1);
  24. }
  25. /*******************************************************************************
  26. *Function Name    : DataReceive
  27. *Input            :
  28. *Return           :
  29. *Description      : 串口接收數據
  30. *******************************************************************************/
  31. void DataReceive(struct UartDebugMember *UDM)
  32. {
  33.         if(UDM->RecPointClearEn)
  34.         {
  35.                 UDM->ReceivePoint=0;
  36.                 UDM->RecPointClearEn=0;
  37.         }
  38.         if(UDM->ReceivePoint<=BUFMAX)
  39.         {
  40.                 UDM->ReceiveBuf[UDM->ReceivePoint]=*(uint8_t *)UDM->UartData;
  41.                 UDM->ReceivePoint++;
  42.         }
  43.         UDM->DataTimeCount=0;
  44.         UDM->DataTimeCountEn=1;
  45.         HAL_UART_Receive_IT(UDM->Uart,(uint8_t *)UDM->UartData,1);
  46. }
  47. /*******************************************************************************
  48. *Function Name    : TimeCountReceive
  49. *Input            :
  50. *Return           :
  51. *Description      : 接收計時
  52. *******************************************************************************/
  53. void TimeCountReceive(struct UartDebugMember *UDM)
  54. {
  55.         if(!UDM->DataTimeCountEn)
  56.         {
  57.                 UDM->DataTimeCount=0;
  58.         }
  59.         /*需要根據波特率以及幀與幀之間的間隔時間調整觸發時間*/
  60.         else if(UDM->DataTimeCount > SLIENTTIME)
  61.         {
  62.                 UDM->ReceiveFinish=1;
  63.                 UDM->DataTimeCountEn=0;
  64.         }
  65.         else
  66.         {
  67.                 UDM->DataTimeCount++;
  68.         }
  69. }
  70. /*******************************************************************************
  71. *Function Name    : UartClearBuffer
  72. *Input            :
  73. *Return           :
  74. *Description      : 清除接收緩沖區
  75. *******************************************************************************/
  76. void ClearRxData(struct UartDebugMember *UDM)
  77. {
  78.         UDM->ReceivePoint=0;
  79.         UDM->RecPointClearEn=1;
  80.         UDM->ReceiveFinish=0;
  81. }
  82. /*******************************************************************************
  83. *Function Name    : TransmitData
  84. *Input            :
  85. *Return           :
  86. *Description      : 串口發送一幀數據
  87. *******************************************************************************/
  88. void TransmitData(struct UartDebugMember *UDM,unsigned char *Buf,unsigned char Length)
  89. {
  90.         unsigned char i;
  91.         UDM->REDE(1);
  92.         for(i=0;i<Length;i++)
  93.         {
  94.                 HAL_UART_Transmit(UDM->Uart,&Buf[i],1,1);
  95.         }
  96.         UDM->REDE(0);
  97.         HAL_UART_Receive_IT(UDM->Uart,(uint8_t *)UDM->UartData,1);
  98. }
  99. /*******************************************************************************
  100. *Function Name    : SendString
  101. *Input            :
  102. *Return           :
  103. *Description      : 串口發送字符串
  104. *******************************************************************************/
  105. void SendString(struct UartDebugMember *UDM,char *String)
  106. {
  107.         UDM->REDE(1);
  108.         while(*String!='\0')
  109.         {
  110.                 HAL_UART_Transmit(UDM->Uart,(uint8_t *)String,1,1);
  111.                 String++;
  112.         }
  113.         UDM->REDE(0);
  114.         HAL_UART_Receive_IT(UDM->Uart,(uint8_t *)UDM->UartData,1);
  115. }
  116. /**/
  117. void RS485_REDE_1(uint8_t a)
  118. {
  119.         if(a)
  120.         {
  121.                 RE_DE1 = 1;
  122.         }
  123.         else
  124.         {
  125.                 RE_DE1 = 0;
  126.         }
  127. }
  128. void RS485_REDE_2(uint8_t a)
  129. {
  130.         if(a)
  131.         {
  132.                 RE_DE2 = 1;
  133.         }
  134.         else
  135.         {
  136.                 RE_DE2 = 0;
  137.         }
  138. }
  139. void Null(uint8_t a)
  140. {

  141. }
復制代碼
“struct UartDebugMember U_D_Uart2,U_D_Uart3,U_D_Uart4,U_D_Uart7;” 因為電路板上使用了usart2、usart3、usart4、usart7,所以需要定義4個相應的UartDebugMember 結構體實體。
“void UartDebugInit(void)” 串口初始化,該函數涉及底層,若使用其他型號單片機或者使用其他庫函數需要作出相應修改。這里使用的是HAL庫。
“void DataReceive(struct UartDebugMember *UDM)” 串口接收函數,該函數需要在串口接收中斷里調用如下所示。
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3.   /* NOTE: This function should not be modified, when the callback is needed,
  4.            the HAL_UART_RxCpltCallback can be implemented in the user file
  5.    */
  6.         if(huart == U_D_Uart2.Uart)
  7.         {
  8.                 DataReceive(&U_D_Uart2);
  9.         }
  10.         if(huart == U_D_Uart3.Uart)
  11.         {
  12.                 DataReceive(&U_D_Uart3);
  13.         }
  14.         if(huart == U_D_Uart4.Uart)
  15.         {
  16.                 DataReceive(&U_D_Uart4);
  17.         }
  18.         if(huart == U_D_Uart7.Uart)
  19.         {
  20.                 DataReceive(&U_D_Uart7);
  21.         }
  22. }
復制代碼


該函數的功能一是將接收到的數據存進接收緩沖區;二是將DataTimeCount清零以及將DataTimeCountEn置1,這點很重要。
“void TimeCountReceive(struct UartDebugMember *UDM)”該函數用來計算總線靜默時間和判斷幀數據接收是否完成,該函數需要每隔1ms執行一次,如下所示。
  1. static void Task_1ms(void)
  2. {
  3.     TimeCountReceive(&U_D_Uart2);
  4.     TimeCountReceive(&U_D_Uart3);
  5.     TimeCountReceive(&U_D_Uart4);
  6.     TimeCountReceive(&U_D_Uart7);
  7. }
復制代碼

“void ClearRxData(struct UartDebugMember *UDM)”該函數用來清除接收緩沖區(其實僅清除的接收個數)和接收完成標志,需要在數據處理完成后調用,具體用法會在后續章節中介紹。
“void TransmitData(struct UartDebugMember *UDM,unsigned char *Buf,unsigned char Length)”和“void SendString(struct UartDebugMember *UDM,char *String)”都是發送函數沒什么特別注意的地方。
“void RS485_REDE_1(uint8_t a)”、“void RS485_REDE_2(uint8_t a)”和“void Null(uint8_t a)”都是RS485芯片收發控制的函數,可以在“void UartDebugInit(void)”中看到“U_D_Uart2”和“U_D_Uart3”使用的是函數“Null”而“U_D_Uart4”和“U_D_Uart7”分別使用了函數“void RS485_REDE_1(uint8_t a)”和“void RS485_REDE_2(uint8_t a)”這是因為usart2和usart3連接的是RS232芯片而usart4和usart7連接的是RS485芯片。
至此UART篇就介紹完了,下面是"Header.h"的具體內容。
  1. #ifndef __HEADER_H
  2. #define __HEADER_H

  3. #include "stm32f4xx_hal.h"
  4. #include "gpio_bool-M4.h"

  5. #endif
復制代碼
  1. #ifndef __GPIO_BOOL_H
  2. #define __GPIO_BOOL_H

  3. #include "stm32f4xx_hal.h"


  4. //位帶操作,實現51類似的GPIO控制功能
  5. //具體實現思想,參考<<CM3權威指南>>第五章(87頁~92頁).M4同M3類似,只是寄存器地址變了.
  6. //IO口操作宏定義
  7. #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
  8. #define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
  9. #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
  10. //IO口地址映射
  11. #define GPIOA_ODR_Addr (GPIOA_BASE+20) //0x40020014
  12. #define GPIOB_ODR_Addr (GPIOB_BASE+20) //0x40020414
  13. #define GPIOC_ODR_Addr (GPIOC_BASE+20) //0x40020814
  14. #define GPIOD_ODR_Addr (GPIOD_BASE+20) //0x40020C14
  15. #define GPIOE_ODR_Addr (GPIOE_BASE+20) //0x40021014
  16. #define GPIOF_ODR_Addr (GPIOF_BASE+20) //0x40021414
  17. #define GPIOG_ODR_Addr (GPIOG_BASE+20) //0x40021814
  18. #define GPIOH_ODR_Addr (GPIOH_BASE+20) //0x40021C14
  19. #define GPIOI_ODR_Addr (GPIOI_BASE+20) //0x40022014
  20. #define GPIOJ_ODR_ADDr (GPIOJ_BASE+20) //0x40022414
  21. #define GPIOK_ODR_ADDr (GPIOK_BASE+20) //0x40022814

  22. #define GPIOA_IDR_Addr (GPIOA_BASE+16) //0x40020010
  23. #define GPIOB_IDR_Addr (GPIOB_BASE+16) //0x40020410
  24. #define GPIOC_IDR_Addr (GPIOC_BASE+16) //0x40020810
  25. #define GPIOD_IDR_Addr (GPIOD_BASE+16) //0x40020C10
  26. #define GPIOE_IDR_Addr (GPIOE_BASE+16) //0x40021010
  27. #define GPIOF_IDR_Addr (GPIOF_BASE+16) //0x40021410
  28. #define GPIOG_IDR_Addr (GPIOG_BASE+16) //0x40021810
  29. #define GPIOH_IDR_Addr (GPIOH_BASE+16) //0x40021C10
  30. #define GPIOI_IDR_Addr (GPIOI_BASE+16) //0x40022010
  31. #define GPIOJ_IDR_Addr (GPIOJ_BASE+16) //0x40022410
  32. #define GPIOK_IDR_Addr (GPIOK_BASE+16) //0x40022810

  33. //IO口操作,只對單一的IO口!
  34. //確保n的值小于16!
  35. #define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //輸出
  36. #define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //輸入

  37. #define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //輸出
  38. #define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //輸入

  39. #define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //輸出
  40. #define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //輸入

  41. #define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //輸出
  42. #define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //輸入

  43. #define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //輸出
  44. #define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //輸入

  45. #define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //輸出
  46. #define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //輸入

  47. #define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //輸出
  48. #define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //輸入

  49. #define PHout(n) BIT_ADDR(GPIOH_ODR_Addr,n) //輸出
  50. #define PHin(n) BIT_ADDR(GPIOH_IDR_Addr,n) //輸入

  51. #define PIout(n) BIT_ADDR(GPIOI_ODR_Addr,n) //輸出
  52. #define PIin(n) BIT_ADDR(GPIOI_IDR_Addr,n) //輸入

  53. #define PJout(n) BIT_ADDR(GPIOJ_ODR_Addr,n) //輸出
  54. #define PJin(n) BIT_ADDR(GPIOJ_IDR_Addr,n) //輸入

  55. #define PKout(n) BIT_ADDR(GPIOK_ODR_Addr,n) //輸出
  56. #define PKin(n) BIT_ADDR(GPIOK_IDR_Addr,n) //輸入

  57. #endif
復制代碼

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:88060 發表于 2022-1-4 14:14 | 顯示全部樓層
留個腳印
回復

使用道具 舉報

ID:467334 發表于 2022-1-15 11:26 | 顯示全部樓層
努力學習一下,雖然對初學的我有點難
回復

使用道具 舉報

ID:476652 發表于 2022-1-31 13:34 | 顯示全部樓層
樓主講了這么多,辛苦了!!
若能完美制作一個Modbus RTU主從站,配合著主從站例程講解,大家就能夠更好的理解樓主的Modbus了。
是對大家都科普,也是對樓主知識的驗證和提高!!
畢竟Modbus RTU在單片機里不容易做好的,能把這個做好,還是有2把刷子的,
回復

使用道具 舉報

ID:27536 發表于 2023-5-12 16:45 | 顯示全部樓層
對初學的我有點難,工作需要啊
1
回復

使用道具 舉報

ID:1109866 發表于 2024-1-23 16:31 | 顯示全部樓層
樓主太有心了,寫的這么詳細,對學習很有用
回復

使用道具 舉報

ID:50577 發表于 2024-7-10 15:34 | 顯示全部樓層
對初學的我有點難,請問這是哪個那個型號單片機呢
回復

使用道具 舉報

ID:446156 發表于 2024-11-11 14:30 | 顯示全部樓層
linlin1 發表于 2024-7-10 15:34
對初學的我有點難,請問這是哪個那個型號單片機呢

驅動是不分單片機的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
日韩在线视频一区| 欧美a v在线播放| 欧美不卡123| 久久亚区不卡日本| 午夜日韩av| 清纯唯美激情亚洲| 精品欧美色视频网站在线观看| 久热在线视频精品网站| 影音先锋在线国产| 熟妇高潮精品一区二区三区 | 国产又黄又粗又猛又爽的| 欧美日韩性生活片| 精品久久久久久乱码天堂| 欧美老肥婆性猛交视频| 欧美伦理视频网站| 国产欧美精品一区二区色综合 | 亚洲精品v亚洲精品v日韩精品| 你懂的视频在线| 免费黄色小视频| 五月婷婷六月色| 国产乱国产乱老熟| 亚洲精品国产91| 九九九九九九九九| 美女av免费观看| 精品国产中文字幕| 国产成人中文字幕| 久久久黄色av| 日韩av影视综合网| 欧美三级视频在线播放| 亚洲伦理在线精品| 91天堂素人约啪| 精品一区二区三区免费| 黑人一区二区| 97精品视频| 另类春色校园亚洲| 精品视频91| 日本另类视频| 91在线三级| 国产黄色小视频在线| 日韩av资源站| 男女羞羞网站| jizz在线播放| 免费vip影院| 国产在线第一页| 私人高清影院 强乱中文字| 夜夜躁狠狠躁日日躁av| 中文字幕亚洲高清| 久久国产美女视频| 青青草自拍偷拍| 日本成人午夜影院| 偷拍女澡堂一区二区三区| 超碰中文字幕在线观看| 国产免费又粗又猛又爽| 亚洲精品国产精品乱码不99按摩 | 午夜精品一区二区在线观看| 成人午夜一级二级三级| 欧美在线免费观看| 午夜美女久久久久爽久久| 欧美精品在线观看91| 中文字幕久久久av一区| 在线观看日韩专区| 伊人久久精品视频| 中文字幕日韩精品在线| 中文字幕日韩欧美在线视频| 国产亚洲福利一区| 这里只有视频精品| 久久精品国产成人精品| 久久精品福利视频| 欧美黑人xxx| 午夜精品三级视频福利| 欧美在线亚洲一区| 国产精品一区二区三区成人| 成人激情视频在线播放| 福利视频一区二区三区| 洋洋av久久久久久久一区| 亚洲日本一区二区| 一区二区欧美国产| 黄色91在线观看| 岛国av一区二区| 在线日韩av片| 69精品人人人人| 精品日韩一区二区三区| 亚洲激情免费观看| 亚洲香蕉成视频在线观看| 中文字幕在线看视频国产欧美| 一本大道久久加勒比香蕉| 视频在线观看一区二区| 欧美成人中文字幕在线| 91国产精品视频在线| 国产精品久久国产精品99gif| 国产有码一区二区| 国严精品久久久久久亚洲影视| 欧美一区二区三区四区夜夜大片| 一区中文字幕在线观看| 欧洲黄色一级视频| 亚洲热在线视频| 欧美多人猛交狂配| 国产精品白浆一区二小说| www.国产毛片| 午夜影院免费视频| 在线播放黄色网址| 中文字幕日产av一二三区| 成年人在线视频| 538视频在线| 国产一区二区在线观| 国产成人影院| 国产精品主播| 国产乱码精品一区二区三区av| 337p粉嫩大胆色噜噜噜噜亚洲| 中文字幕一区二区三区在线播放 | 国精产品99永久一区一区| 天天久久人人| 欧美性猛交久久久乱大交小说| 午夜福利三级理论电影| 亚洲ⅴ国产v天堂a无码二区| 日韩人妻无码一区二区三区99 | 在线看三级电影| 日韩国产一二三区| 日韩极品一区| 久久国产生活片100| 久久精品人人做人人综合| 亚洲国产成人91porn| 日韩精品一区二区三区中文不卡| 色婷婷综合久久久久| 国产日本欧美一区二区三区在线| 色99中文字幕| www.国产福利| 久久精品国产av一区二区三区| 国产精品亚洲lv粉色| 第四色播日韩| 可以在线观看的av| 日本综合视频| 希岛爱理av一区二区三区| 精品在线视频一区| 欧美男gay| 亚洲青色在线| 亚洲国产经典视频| 欧美一区二区三区白人| 欧美大片免费看| 久久精品成人一区二区三区蜜臀| 无码精品国产一区二区三区免费| 亚洲av成人无码久久精品| 亚洲一区 中文字幕| 日本一二三视频| 黄色免费在线网站| 伊人春色精品| 国产成人av电影| 在线这里只有精品| 欧美激情在线播放| 日韩中文一区二区三区| 不卡的一区二区| 亚洲第一网站在线观看| 91短视频推广| 牛牛精品视频在线| 色狮一区二区三区四区视频| 国产精品一区二区在线观看网站| 日韩欧美一区二区三区| 九色精品美女在线| 亚洲在线播放电影| 国产成人精品无码免费看夜聊软件| 在线观看免费中文字幕| 天天射天天爱天天射干| 日韩伦理在线一区| 午夜精品久久| 亚洲视频在线观看一区| 一本一道久久a久久精品逆3p | 青青草原国产视频| 欧美性受xxxx免费视频| 97超碰国产一区二区三区| 精品精品国产毛片在线看| 久99久精品视频免费观看| 欧美性猛交xxxx久久久| 亚洲最新中文字幕| 蜜桃视频日韩| 黄色激情在线观看| 国产黄色大片网站| 真不卡电影网| 久久超级碰碰| 久久国产精品区| 色先锋资源久久综合| 欧美日韩不卡合集视频| 日本在线视频一区| 美女100%露胸无遮挡| 午夜男人天堂| 成人77777| 精品一区毛片| 国产三级欧美三级日产三级99| 欧美一二区视频| 亚洲淫片在线视频| 波多结衣在线观看| 亚洲中文一区二区三区| jizzjizzji欧美| 国产激情一区| 成人一区在线看| 亚洲欧美第一页| 97国产在线视频| 欧美自拍小视频| 中文精品久久久久人妻不卡| 桃乃木香奈av在线| 香蕉久久精品日日躁夜夜躁| 国产999精品久久久久久| 日韩欧美成人一区二区| 国产一区二区三区四区五区在线| 一本之道在线视频| 视频1区2区3区| 26uuu亚洲电影在线观看| 亚洲精品在线二区| 91九色最新地址| 国产精品一区电影| 色哟哟免费视频| 中文先锋资源| 国产乱码在线| 激情综合网激情| 在线播放/欧美激情| 国产免费一区二区三区| 中文字幕免费高清| 91高清国产| 天堂精品在线视频| 久久这里都是精品| 日韩中文字幕在线看| 国产在线视频综合| 91资源在线视频| 国产鲁鲁视频在线观看免费| 欧美激情1区2区3区| 久久久成人网| 亚洲激情在线观看视频免费| 亚洲一区二区三区涩| 成年人av电影| 国产九色porn网址| 久久婷婷蜜乳一本欲蜜臀| 亚洲丝袜美腿综合| 国产精品久久中文| 久久久久亚洲AV成人无码国产| 国产伊人网av.| 欧美成人免费全部网站| www.视频一区| 91精品国产精品| 中文字幕55页| 国产叼嘿网站免费观看不用充会员| 主播大秀视频在线观看一区二区| www.66久久| 97精品国产97久久久久久免费 | 欧洲永久精品大片ww免费漫画| 欧美激情国内自拍| 在线成人综合色一区| 欧美性aaa| 国产精品色在线| 国产成人a亚洲精品| 国产精品久久AV无码| h网在线观看| 精品一区在线| 欧美系列日韩一区| 亚洲国产高清国产精品| 波多野结衣一二区| 欧美人与禽猛交乱配| 国产一区二区福利| 欧美激情xxxx| 精品国产av色一区二区深夜久久| 成人综合网址| 国产精品97| 日韩精品在线视频美女| 男人天堂网视频| 国产高清av| 成人黄色视屏网站| 亚洲六月丁香色婷婷综合久久 | 久久视频免费观看| av免费观看不卡| 羞羞网站在线观看入口免费| 午夜亚洲福利| 一区二区日韩精品| 800av在线播放| 四虎永久在线| 国产成人三级在线观看| 国产精品国产三级国产aⅴ9色| 欧美成人精品欧美一| 成人a在线视频免费观看| 久久午夜羞羞影院免费观看| 99视频免费观看| 91午夜交换视频| japansex久久高清精品| 在线观看成人小视频| 亚洲精品短视频| 久久综合伊人77777麻豆最新章节| 五月天婷婷基地| 伊人久久亚洲影院| 久久九九全国免费精品观看| 女尊高h男高潮呻吟| 国产日本在线观看| 久久综合给合久久狠狠狠97色69| 国产精品我不卡| 精品人妻一区二区三区日产乱码 | 在线香蕉视频| 99久久久久免费精品国产| 成人区精品一区二区| 亚洲AV无码精品自拍| 亚洲丝袜啪啪| 亚洲精品在线看| 99久久人妻无码精品系列| 欧美jizz18性欧美| 国产精品色婷婷久久58| 亚洲午夜精品一区二区| 免费国产高清| 50度灰在线| 国产精品日日摸夜夜摸av| 久久精品五月婷婷| 四虎影院影音| 国产精品av久久久久久麻豆网| 欧美日韩xxx| www.com国产| 伊人久久亚洲| 亚洲男人av电影| 精品人体无码一区二区三区| 毛片网站在线看| 日韩人在线观看| www.久久av.com| 国产黄色片在线播放| 亚洲欧洲精品成人久久奇米网| 超级碰在线观看| free亚洲| av成人老司机| 亚洲一区bb| eeuss性xxxxxx电影| 国产传媒一区在线| 青青影院一区二区三区四区| 国产剧情在线一区| 美女mm1313爽爽久久久蜜臀| 97影院在线午夜| 欧美最猛性xxxxxhd| 国产视频亚洲| 国产一区二区在线免费视频| 肥臀熟女一区二区三区| 天天插综合网| 国产精品91久久久久久| 国产成人av免费看| 欧美jizzhd精品欧美巨大免费| 欧洲精品在线视频| 亚洲精品人妻无码| 亚洲精品精选| 亚洲精品日产aⅴ| 亚洲精品精品一区| 免费观看30秒视频久久| 美女被啪啪一区二区| 黄色影院在线观看| 26uuu精品一区二区在线观看| 亚洲性69xxxbbb| 九九九国产视频| 久久av中文| 国产精品久久久久av免费| 久草免费资源| 国产一二三精品| 国产精品jizz在线观看老狼| 黄色录像1级片| 一区二区三区欧美在线观看| 亚洲三级视频网站| 污污的视频在线观看| 欧美一级精品在线| 国产一级生活片| 日韩成人精品一区| 国产在线视频91| 日日夜夜网站| 国产精品久久久久久一区二区三区 | 国产中文字幕久久| 国产成人av毛片| 欧美亚洲第一页| 亲爱的老师6电影韩剧| 国产精品影视网| 亚洲熟妇无码另类久久久| 91激情在线| 日韩一级高清毛片| 日本一级黄色录像| 97久久夜色精品国产| 99国产超薄丝袜足j在线观看| 影音先锋5566资源站| 久久精品这里都是精品| av中文字幕网址| 久久91导航| 欧美国产在线视频| 天堂tv亚洲tv日本tv欧美人tv | 欧美a级在线| 久久国产一区二区| 成人免费淫片| 三年片观看免费观看大全视频下载| 青春草国产成人精品久久| 亚洲人的天堂男人爽爽爽| 97人妻精品一区二区三区动漫| 国产小视频在线看| 中文字幕在线视频播放| 久久久久久久9| 亚洲字幕在线观看| 国产一区二区丝袜| 国产精品天天狠天天看| 日韩有码视频在线| 中文在线不卡视频| www.99久久热国产日韩欧美.com| 欧美高清一级大片| 久久久久久高清| 免费不卡av在线| 国产在线观看免费播放| 中文字幕第69页| 国产极品久久久|