日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32f407igh6学习笔记

發布時間:2024/3/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32f407igh6学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?本文將記錄我的學習歷程,基于rm機甲大師實驗室,主要包括各種函數的應用及相應硬件模塊的介紹。閱讀需要有51單片機和基本的寄存器基礎。

前言:

stm32cubemx時鐘樹配置

12 HSE /6 x168 /2 PLLCLK /4 /2

c語言基礎

一 定義結構體 struct Books {char title[50];char author[50];char subject[100];int book_id; } book;//此聲明聲明了擁有四個變量的結構體,同時聲明了結構體變量book,它的類型(標簽)是struct Booksstruct Books book2,book3[20],*book4;//用struct Books標簽又聲明了三個結構體變量//也可以用typedef創建新類型 typedef struct {char title[50];char author[50];char subject[100];int book_id; } Books2; //現在可以用Books2作為類型聲明新的結構體變量 Books2 book5,book6[20],*book7;結構體的成員可以包含其他結構體,也可以包含指向自己結構體類型的指針(在代碼中常見) //此結構體的聲明包含了其他的結構體 struct COMPLEX {char string[100];struct Books book; };//此結構體的聲明包含了指向自己類型的指針 struct NODE {char string[100];struct NODE *next_node; };二 結構體變量的初始化 #include <stdio.h>struct Books {char title[50];char author[50];char subject[100];int book_id; } book = {"C 語言", "RUNOOB", "編程語言", 123456};int main() {printf("title : %s\nauthor: %s\nsubject: %s\nbook_id: %d\n", book.title, book.author, book.subject, book.book_id); }三 訪問結構成員 非指針用“.”,指針用“->” 如struct Books {char title[50];char author[50];char subject[100];int book_id; } book book.title book.author ...... 如struct Books {char title[50];char author[50];char subject[100];int book_id; } *book2 book2->title book2->author ....... book2=&book

一 點亮LED

1 原理:三個 LED 燈的引腳為 PH10,PH11,PH12。在user label 填寫命名LED_B LED_G LED_R 對應引腳輸出高電平點亮。

2 代碼:

點亮LED HAL_GPIO_WritePin(LED_R_GPIO_Port, LED_R_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED_G_GPIO_Port, LED_G_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED_B_GPIO_Port, LED_B_Pin, GPIO_PIN_SET); 或 HAL_GPIO_WritePin(GPIOH, GPIO_PIN_12, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOH, GPIO_PIN_11, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOH, GPIO_PIN_10, GPIO_PIN_SET); LED閃爍 HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_10); HAL_Delay(500); HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_11); HAL_Delay(500); HAL_GPIO_TogglePin(GPIOH,GPIO_PIN_12); HAL_Delay(500); 參數:端口、引腳 功能:對應端口的引腳電平翻轉 藍色-青色(藍色和綠色混合)-白色(紅藍綠混合)-重灰色(紅綠混合)-紅色-滅 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) //讀取對應引腳的電平并返回

二 flash LED

三 定時器閃爍LED

1 原理:

定時器:分配+計數+重載

(1)預分頻寄存器TIMx_PSC:時鐘源的信號經過TIMx_PSC按其中的分頻比Prescaler進行分頻(頻率除以Prescaler)

(2)自動重裝載寄存器 TIMx_ARR :計數器寄存器TIMx_CNT 根據時鐘的頻率向上計數,直到 等于TIMx_ARR的自動重裝載值Counter Period,產生一個定時中斷觸發信號,TIMx_CNT 被清空, 并重新從 0 開始向上計數。

定時器周期=[(分頻值+1)(重載值+1)]/時鐘源頻率

中斷:當多個中斷發生時,先根據搶占優先級判斷哪個中斷分組能夠優先響應再到這個中斷分組 中根據各個中斷的響應優先級判斷哪個中斷優先響應

it.c文件中有我們配置好使能的中斷類型,找到這個中斷服務函數。 里面有中斷回調函數,我們在主文件中對此進行重新編寫。1 HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)? 參數:*htim 定時器的句柄指針,如定時器 1 就輸 入&htim1,定時器 2 就輸入&htim2 作用:中斷服務函數2 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)? 參數:&htim1... 作用:中斷回調函數。 我們可以在別處重寫中斷回調函數,一般我們需要在中斷回調函數中判斷中斷來源并執行相應的用戶操作。 (如定時器1啊等等 if(htim == &htim1))3?HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) 參數:略 HAL_StatusTypeDef是HAL 庫定義的幾種狀態, 如果成功使定時器開始工作,則返回 HAL_OK 作用:使定時器開始工作4?HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) 參數:略 作用:使對應的定時器開始工作,并使能其定時中斷定時器配置-使能定時器中斷-定時器計數值滿進入中斷-中斷內部先進入中斷服務函數再進入中斷回調函數

2 代碼

main.c文件中: 主函數: 各種初始化(包含定時器的初始化)//此部分內容配置好了,不用自己寫 HAL_TIM_Base_Start_IT(&htim1);//開啟定時器1的中斷模式,開始工作中斷回調函數: void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {if(htim == &htim1){//500ms triggerbsp_led_toggle();} }/*主函數開啟定時器1以后,每到達時間就會進入中斷服務函數中的中斷回調函數。 中斷回調函數在hal庫的別的文件下有虛定義__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim),我們需要在主文件下重寫它。 進入主文件下的中斷回調函數以后,首先判斷是不是定時器1,再實現LED燈的翻轉。*/

四. PWM 控制 LED 的亮度

1 原理:

脈沖調制有兩個重要的參數:

1 輸出頻率,頻率越高,數字信號代替模擬信號的效果越好。

2 占空比。占空比就是改變輸出模擬效果的電壓大小。占空比越大則模擬出的電壓越大。

算法原理:

1 顏色:16進制對應4位。32位的aRGB變量每8位分別代表了 alpha(透明度)Red(紅色)Green(綠色)和 Blue(藍色)四個要素。

如純紅色表示為 0xFFFF0000(透明度位置FF,紅色位置FF,其他位置0),純綠色表示為 0xFF00FF00,純藍色表示為 0xFF0000FF。黃色由藍色和綠色合成,所以可以表示為 0xFF00FFFF。

通過移位操作獲得每個顏色表示的八位變量,如red = ((RGB_flow_color[i] & 0x00FF0000) >> 16)。然后將這個值作為定時器通道的比較值控制LED燈的亮度調節。

//以上這段非人話,個人認為例程的這段代碼寫復雜了,沒必要。

2 定時器:定時器設置為PWM模式。配置定時器中的比較寄存器TIMx_CCRx,計數寄存器的值不斷增加,小于比較值的時候PWM輸出高電平,大于比較值的時候PWM輸出低電平。

占空比 𝑃 =( 𝑇𝐼𝑀_𝐶𝐶𝑅𝑥 ? 1 )/𝑇𝐼𝑀_𝐴𝑅𝑅 ? 100%。

3 定時器的pwm模式:

每一個定時器的pwm模式有4個通道,每一個通道都有對應標號的比較寄存器,比如定時器5的 1 號通道對應的比較寄存器為 TIM5_CCR1。

可以注意到5號定時器三個通道對應的引腳正是之前的實驗中使用的 LED 引腳,所以如果對5號定時器的通道的比較值進行配置,就能夠控制每一個LED引腳的電壓大小,從而改變燈的亮度。

__HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_1, blue); 參數:哪個定時器,哪個通道,比較的值。blue為變量,可變。 作用:通過這個函數將比較值賦值給對應定時器通道的比較寄存器? ? 比較寄存器的值一直在變,輸出電壓一直在變,燈亮度改變。

2 代碼:

main.c文件中: 主函數: //開啟定時器 HAL_TIM_Base_Start(&htim5); //開啟PWM通道,分別對應三個LED燈的引腳。LED和定時器硬件都連在這一個引腳上,定時器控制的電壓變化那么燈亮度就變化。 HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_2); HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_3); 其他略 __HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_1, blue); __HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_2, green); __HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_3, red);

五. 蜂鳴器&舵機

1 原理:

蜂鳴器: 輸入方波頻率的不同產生不同的音調。蜂鳴器使用的引腳為 PD14,為定時器 4 的通道 3。Pulse可以設置比較寄存器的初始值。

時鐘的頻率是72MHZ,可以理解為一秒鐘STM32會自己數72M次;分頻系數是72,則該時鐘的頻率會變成72MHZ/72=1MHZ,一秒鐘STM32會自己數1M次,但是在設置的時候要注意,數值應該是72-1;需要定時1ms,由于1ms=1us*1000,那么預裝載值就是1000-1。在波形圖上分頻系數決定了多久來一個點(太快了所以連點成線),重載值決定了波形周期,比較值決定了高電平的時間。

__HAL_TIM_PRESCALER(&htim4, psc)//設置定時器4的分屏系數,HAL庫中重載值也可以設置 __HAL_TIM_SetCompare(&htim4, TIM_CHANNEL_3, pwm);//設置定時器4的通道3的比較值 //psc和pwm都是一個變化的值,所以蜂鳴器連接引腳的電壓一直在變化,發出音調變化

舵機:舵機的引腳為定時器1的通道1、2、3、4和定時器8的通道1、2、3。

時鐘源/(分頻+1)/(重載值+1)=50

舵機使用的 PWM 信號一般為頻率 50Hz,舵機的控制一般需要一個20ms的時基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms范圍內的角度控制脈沖部分,以180度電機為例:0.5ms————–0度;1.0ms————45度;1.5ms————90度;2.0ms———–135度;2.5ms———–180度。

MG995舵機,根據輸入pwm占空比的不同調節轉動的角度。如果我們想要用遙控器操縱舵機,那么首先遙控器初始化(包含DMA初始化),對遙控器遙感變動時候相應變動的寄存器進行編寫(當遙控器寄存器大于小于xx值的時候,pwm咋樣咋樣),實現控制舵機的效果。具體見例程PWM_SNALL。

2 代碼:設置占空比就行,略。

六. 按鍵的外部中斷

1 原理:

外部中斷通常是 GPIO 的電平跳變引起的中斷。在 stm32 中,每一個 GPIO 都可以作為外 部中斷的觸發源,外部中斷一共有 16 條線,對應著 GPIO 的 0-15 引腳,每一條外部中斷 都可以與任意一組的對應引腳相連。上升沿中斷、下降沿中斷、上升沿和下降沿中斷。

配置:將相應引腳設置為外部中斷模式,然后記得使能外部中斷。

外部中斷回調函數HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin),在主文件中重寫,首先判斷是哪個引腳產生的外部中斷看看對不對。每當產生一次外部中斷就進入中斷服務函數先對中斷寄存器進行處理然后進入中斷回調函數。

注意消抖。

2 代碼:

過幾天自己寫一個

七 ADC采樣

1 原理:

(1)概念:分辨率=量程/2的n次方,代表一格數字量所反映的電壓等模擬輸入量。

(2)過程:先采樣,再保持,再量化(變成能編碼的量。如輸入電壓量程為4v,位數為3位,那么分辨率是0.5,若采樣到的信號大小是3.6v無法編碼,所以需要量化為3.5v,這樣才能表示為111),最后編碼成數字量給單片機。

(3)怎么測我們需要的地方的電壓:ADC3的通道8連接電源,可以測電源的輸出電壓;其他通道連接其他地方,可以測其他內部元件的輸出電壓。通過ADC,可以將電機、各種傳感器等的模擬量轉換為單片機處理的數字量。

(4)程序思路:從程序角度阻塞式先開啟ADC,然后判斷是否轉化完成,最后讀取通道中ADC的值;非阻塞式的話開啟ADC,然后去中斷函數里面讀取ADC的值。

非中斷: HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc)?開啟ADC的采樣,如果是adc1就輸入&hadc1,adc2就輸入&adc2,adc3就輸入&hadc3 HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout)?等待 ADC轉換結束 uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc)?獲取ADC值中斷: HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc) 開啟ADC的采樣 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) ADC的中斷回調函數,我們在此之中寫代碼

2 代碼:

過幾天自己寫一個

八 串口接收與發送

1 原理:

串口通訊,收發雙方要遵從同樣的協議才能完成數據傳輸,同時波特率也要相等,波特率可以設置為115200,38400,9600 等。

//使能接收中斷和空閑中斷 __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE); //receive interrupt __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE); //idle interrupt __HAL_UART_ENABLE_IT(&huart6, UART_IT_RXNE); //receive interrupt __HAL_UART_ENABLE_IT(&huart6, UART_IT_IDLE); //idle interrupt發送函數 HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); //如串口1就輸入&huart1;發送的數據的首地址,比如要發送buf[]=”Helloword”則輸入buf;要發送的數據大小,可以用sizeof;等待的時間接收函數 HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);發送中斷函數 HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); 接收中斷函數 HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

串口接收中斷即每當串口完成一次接收之后觸發一次中斷;串口空閑中斷即每當串口接收完一幀數據后又過了一個字節的時間沒有接收到任何數據則觸發一次中斷。

當串口發生接收中斷或者空閑中斷時,都會進入 USARTx_IRQHandler 中斷處理函數。在中 斷處理函數中通過串口的狀態寄存器來判斷產生中斷的是接收中斷還是空閑中斷,然后進入相應的回調函數處理。

即在HAL中有中斷服務函數void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);

這個庫函數幫我們完成了中斷類型判斷和清除標志位,我們只需要在具體的函數中寫邏輯即可。上面這個庫函數判斷出不同的類型,然后調用不同的回調函數,我們處理接收中斷回調函數HAL_UART_TxCpltCallback即可。?

回調函數如下: 1 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); 2 void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); 3 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); 4 void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart); 5 void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart); 6 void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart); 7 void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart); 8 void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);

2 代碼:

九 遙控器&串口的DMA模式

1 原理:

DMA:DMA 是在使用串口進行通訊時常用的一個功能,使用該功能能夠完成串口和內存之間直接的數據傳送,而不需要 CPU 進行控制,從而節約 CPU 的處理時間。

緩沖區的作用是:數據通過DMA串口傳進來以后我們要先在緩沖區中保存,然后進行一系列操作處理判斷檢驗接收到的數據是否為我們需要的那個數據(判斷對不對,通過比較位數是否相等的方式),若正確再放在內存中。緩沖區是DMA模式下內存中的一片區域,我們理解為數據進入內存存儲前的一片區域即可。

注意:串口DMA的初始化代碼是要自己寫的,可以從例程中復制。

代碼思路:RC_init(內含USART3的DMA的初始化:使能DMA串口接收-使能空閑中斷(空閑中斷要信號觸發后過一個字節的時間才能空閑中斷標志位置1,所以時間足夠底下我們的初始化程序全部完成以后才會進中斷服務函數對應的空閑中斷觸發部分)-失效DMA-配置緩沖區(緩沖區的位置在哪,能容納的數據長度多少)-使能緩沖區-使能DMA)

遙控器寄存器的值是從-660到660(在代碼里已經減去相應的量了)。


右遙控器前后是通道1,前正后負;左右是通道0,左負右正
左遙控器左右是通道3,前正后負;左遙控器左右是通道2,左負右正

左邊開關上中下對應s1 1,3,2
右邊開關上中下對應s0 1,3,2

HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff)); //串口發送Senbuff數組 HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size); //串口通過DMA接受指定長度的數據

?串口1的DMA用于發送數據,即單片機向電腦發送數據(顯示一些信息);串口3的DMA用于接收數據,即遙控器外設發送數據單片機的存儲區域接收。

??2 代碼:?

const RC_ctrl_t *local_rc_ctrl;//local_rc_ctrl是RC_ctrl_t變量類型的指針結構體變量名 remote_control_init();//紅外遙控的初始化,內含接收串口3的DMA初始化 usart1_tx_dma_init();//發送串口1的DMA初始化 //以上這些初始化代碼都要自己寫,紅外遙控初始化拷貝相應文件,發送串口1初始化見后。 local_rc_ctrl = get_remote_control_point();//獲取紅外遙控器的指針,它就可以指向紅外遙控器的各種寄存器。 //local_rc_ctrl->rc.ch[0], local_rc_ctrl->rc.ch[1], local_rc_ctrl->rc.ch[2]等//發送串口1初始化 void usart1_tx_dma_init(void) {//enable the DMA transfer for the receiver request//使能DMA串口接收SET_BIT(huart1.Instance->CR3, USART_CR3_DMAT); } void usart1_tx_dma_enable(uint8_t *data, uint16_t len) {//disable DMA//失效DMA__HAL_DMA_DISABLE(&hdma_usart1_tx);while(hdma_usart1_tx.Instance->CR & DMA_SxCR_EN){__HAL_DMA_DISABLE(&hdma_usart1_tx);}//clear flag//清除標志位__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_HISR_TCIF7);__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_HISR_HTIF7);//set data address//設置數據地址hdma_usart1_tx.Instance->M0AR = (uint32_t)(data);//set data length//設置數據長度hdma_usart1_tx.Instance->NDTR = len;//enable DMA//使能DMA__HAL_DMA_ENABLE(&hdma_usart1_tx); }

關于通信協議:

主從通信:主機輪(流)詢(問),從機應答。發送指令給從機,讓它執行什么操作;向從機要數據。

每一次通信都必須由主機發起,從機不可以主動向主機發送數據。系統上電以后所有的設備都處于接收狀態,所以應當先將主機調成發送模式,發送數據包;?主機轉成接收模式,接收從機發送的應答;

地址碼就是從機的地址,我們需要和哪一臺設備建立聯系(即ID)

功能碼就是我們需要對從機執行什么操作(讀/寫,單個位/多個寄存器等等)

數據碼就是我們往寄存器/位里面塞這樣一個數,它本身就代表了某種信息(控制指令)

?

?

?

十 flash讀寫

個人計算機都均有內存和硬盤(外存),開發板芯片 stm32 同樣具有內存 192Kbytes 的 SRAM 和 1Mbytes 的外存 flash。flash是閃存外設,可以把數據寫進去存儲,也可以從里面讀取數據。

flash的優點是容量較大,掉電不會丟失數據;缺點是寫入需要先擦除,讀取寫入速度較慢。

注意:1. 為了保護數據的安全性,flash 有專門的鎖寄存器,每次要對 flash 頁面進行修改時首先 要通過鎖寄存器對頁面進行解鎖,修改完成后要進行加鎖。2. flash 是不支持在保存原有數據的情況下進行修改的,因此要改變 flash 頁面數據時,需 要對這個頁面進行擦除,擦除之后再寫入新的數據。

HAL_StatusTypeDef HAL_FLASHEx_Erase(FLASH_EraseInitTypeDef *pEraseInit, uint32_t *SectorError //flash擦除函數,擦除指定的flash頁面。 //參數:擦除 flash 時使用的結構體指針,需要創建一個 FLASH_EraseInitTypeDef 類型的結構體 flash_erase, 需要賦予這個結構體以下參數:Sector(要擦除的頁面的首地址),TypeErase(擦除方式),VoltageRange(電壓范圍),NbSectors(待擦除頁面數),最后我們將&flash_erase 作為參數輸入函數; 如果本次 flash 擦除產生了錯誤,則發生擦除錯誤的頁面號存儲在 SectorError 中HAL_StatusTypeDef HAL_FLASH_Program(uint32_t TypeProgram, uint32_t Address, uint64_t Data) //flash寫入函數,以指定的方式,向 flash 中的一頁寫入數據 參數:uint32_t TypeProgram 選擇寫入的數據格式,可以選擇8位字節FLASH_TYPEPROGRAM_BYTE , 16 位半字FLASH_TYPEPROGRAM_HALFWORD , 32 位 字FLASH_TYPEPROGRAM_WORD ,或者 64 位雙字FLASH_TYPEPROGRAM_DOUBLEWORD 需要寫入數據的地址;需要寫入的數據void flash_read(uint32_t address, uint32_t *buf, uint32_t len) {memcpy(buf, (void*)address, len *4); } //從 flash 讀取數據 //參數:Flash 地址;讀取后的存儲變量地址;字節長度 #define USER_FLASH_ADDRESS ADDR_FLASH_SECTOR_11 #define FLASH_DATA_LENGHT 12 //ADDR_FLASH_SECTOR_11即0x080E0000,是12個flash葉分區的第一個 uint8_t after_erase_data[FLASH_DATA_LENGHT]; uint8_t write_data[FLASH_DATA_LENGHT] = "RoboMaster\r\n"; uint8_t after_write_data[FLASH_DATA_LENGHT];//擦除flash頁 flash_erase_address(USER_FLASH_ADDRESS, 1); //read data from flash, before writing data //在寫數據之前,從flash讀取數據 flash_read(USER_FLASH_ADDRESS, (uint32_t *)after_erase_data, (FLASH_DATA_LENGHT + 3) / 4); //write data to flash //往flash寫數據 flash_write_single_address(USER_FLASH_ADDRESS, (uint32_t *)write_data, (FLASH_DATA_LENGHT + 3) / 4); //read data from flash, after writing data //在寫數據之后,從flash讀取數據 flash_read(USER_FLASH_ADDRESS, (uint32_t *)after_write_data, (FLASH_DATA_LENGHT + 3) / 4);

十一 I2C?

串行同步通訊總線協議--I2C,使用 I2C可以配置和讀取 IST8310 磁力計的數據,還可以用于溫度傳感器,氣壓傳感器,多路 ADC 模塊等多種傳感器。

IST8310 磁力計:測量地球磁場強度,用于計算機器人的朝向。

SCL、SDA分別為I2C的時鐘線和數據線,RSTN為IST8310 的 RESET,低電平重啟 IST8310,DRDY為IST8310 的數據準備(data ready)。

程序開始先進行 HAL 庫自帶的初始化,包括時鐘,GPIO,I2C3 的初始化;之后完成配置 IST8310,IST8310 的 DRDY 引腳會產生 200Hz 的周期信號;當 DRDY 下降沿,會引起單 片機的下降沿外部中斷;在外部中斷回調函數中,調用 ist8310 的讀取函數,便可以讀取磁 場數據。

I2C通信協議

I2C 有兩根信號線,一根數據線 SDA,另一根是時鐘線 SCL。I2C 總線允許掛載多個主設備,但總線時鐘同一時刻只能由一個主設備產生,并且要求每個 連接到總線上的器件都有唯一的 I2C 地址,從設備可以被主設備尋址。

整個過程便是如同到學校的快遞柜(從機 I2C 地址),對第幾號柜箱(寄存器地址), 進行寄出或者簽收快遞(數據)的過程。具體時序略。?

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) //從 I2C 設備的寄存器讀取數據 //參數: I2C句柄;I2C從機地址;寄存器地址;寄存器地址增加大小-I2C_MEMADD_SIZE_8BIT:增加八位,I2C_MEMADD_SIZE_16BIT:增加十六位;數據指針;數據長度;超時時間HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) //往 I2C 設備的寄存器寫入數據

?十二 OLED

發送 I2C 地址后,發送數據類型再發送數據,其中 數據類型為 0x00 表示控制指令,0x40 表示數據指令。

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) //向某個 I2C 設備傳輸數據 //參數:I2C 句柄;I2C 從機地址;數據指針;數據長度;超時時間根據 OLED 的通信方式,發送從機地址后需要在第一個字節中指明之后的數據類型,如果是控制指令 則需要發送 0x00,如果是數據指令則需要發送 0x40。函數原型如下:/*** @brief 寫數據或者指令到 OLED, 如果使用的是 SPI,請重寫這個函數* @param[in] dat: 要寫入的字節* @param[in] cmd: OLED_CMD 代表寫入的字節是指令; OLED_DATA 代表寫入的字節是數據* @retval none*/ oid oled_write_byte(uint8_t dat, uint8_t cmd) {static uint8_t cmd_data[2];if(cmd == OLED_CMD){cmd_data[0] = 0x00;}else{cmd_data[0] = 0x40;}cmd_data[1] = dat;HAL_I2C_Master_Transmit(&hi2c2, OLED_I2C_ADDRESS, cmd_data, 2, 10); }OLED_init 函數,該函數主要配置 OLED 參數,通過調用 oled_write_byte 傳入 OLED_CMD,傳輸控制指令完成配置OLED_display_on和OLED_display_off 函數分別是用來關閉OLED 顯示和開啟OLED 顯示OLED_draw_point 對(x,y)坐標的一個像素點進操作 OLED_draw_line 從(x1,y1)到(x2,y2)的直線經過的像素點進行操作 OLED_show_char 顯示一個字符 OLED_show_string 顯示一個字符串 OLED_printf Printf 函數功能 OLED_LOGO 顯示 Robomaster LOGOOLED_operate_gram(pen_typedef pen) 函數是操作 OLED_GRAM[128][8]數組的,我們對整個數組進行 操作,操作完成后再通過 OLED_refresh_gram 函數整體刷新 OLED 內部的 GRAM。作用是打開OLED顯示. 參數:PEN_WRITE 是將數組都設置為 0xff,對于 OLED 屏幕即為全亮;PEN_CLEAR 是將數組都設置為 0x00,對于 OLED 屏幕即為全滅;PEN_INVERSION 是將數組的值全部反轉,通過與 0xff 相減來實現。OLED_refresh_gram 函數功能是將內部的GRAM[8][128]傳輸到OLED模塊的GRAM, 這樣 OLED 就會顯示圖像。

1. OLED 模塊的初始化,調用 OLED_init

2. 通過畫圖函數,對 stm32 內的 GRAM 數組進行操作

3. 調用 OLED_refresh_gram 函數將 GRAM 數據傳輸到 OLED 模塊的 GRAM 進行顯示。

其中2、3步都是OLED_LOGO 函數完成的,內集成畫圖函數將 GRAM 刷新成 LOGO 的數據,以及最后調用了 OLED_refresh_gram 函數顯示。

十三 SPI?BMI088 傳感器

BMI088 是一種高性能慣性測量單元 (IMU),集成了 16 位 ADC 精度的三軸?螺儀和三軸加速度計。

陀螺儀能測量在三個正交方向上旋轉的角速度,也可以用于估算在三個方向上的旋轉角度,原理是將旋轉的角速度轉化為電容的變化即轉變為電信號。

加速度計能夠測量三個正交方向上的加速度,原理是加速度改變力改變電容改變轉化為電信號。

?我們實際上是對BMI088中的各種寄存器進行操作。

oid BMI088_read(fp32 gyro[3], fp32 accel[3], fp32 *temperate) BMI088_read(gyro, accel, &temp) //讀取角速度、加速度、溫度值

SPI通信協議:

SPI 的通信過程如下:

1. 主設備將要進行通訊的從設備的 SS/CS 片選拉低,

2. 主設備通過 SCK 向從設備提供同步通訊所需要的時鐘信號?

3. 主設備通過 MOSI 向從設備發送 8 位數據,同時通過 MISO 接收從設備發來的 8 位數 據。

4. 通信結束,主設備拉高 SS/CS 片選。

HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout) //通過 SPI 進行主機和從機的通信 //參數1:SPI_HandleTypeDef *hspi 即 SPI 的句柄指針,如果是 SPI1 就輸入&hspi1,SPI2 就輸入&hspi2 參數 2 uint8_t *pTxData 待發送數據的首地址指針 參數 3 uint8_t *pRxData 接收數據的區域的首地址 參數 4 uint16_t Size 待發送的數據長度 參數 5 uint32_t Timeout 最大發送時長

十四?can總線

電機?

can發送:

?具體在CAN_cmd_chassis 函 數 和 CAN_cmd_gimbal 函數中,先將ID、數據位等信息賦值到我們定義的結構體變量中,再在內部調用基于HAL 庫的CAN 發送函數 HAL_CAN_AddTXMessag將這些結構體變量的值發送到內部寄存器,就獲取了主機要發送給電機的信息。時序啊這些都是HAL庫內部的東西,已經封裝好了。

CAN_cmd_chassis(int16_t motor1, int16_t motor2, int16_t motor3, int16_t motor4) //CAN_cmd_chassis 函數的輸入為電機 1 到電機 4 的驅動電流期望值 motor1 到 motor4, 函數會將期望值拆分成高八位和第八位,放入 8Byte 的 CAN 的數據域中,然后添加 ID (CAN_CHASSIS_ALL_ID 0x200),幀格式,數據長度等信息,形成一個完整的 CAN 數據幀,發送給各個電調。CAN_cmd_gimbal(int16_t yaw, int16_t pitch, int16_t shoot, int16_t rev) //CAN_cmd_gimbal 函數的的功能為向云臺電機和發射機構電機發送控制信號, 輸入參數為 yaw 軸電機,pitch 軸電機,發射機構電機的驅動電流期望值 yaw,pitch,shoot(rev 為保留值), 函數會將期望值拆分成高八位和第八位,放入 8Byte 的 CAN 的數據域中,然后添 加 ID(CAN_GIMBAL_ALL_ID 0x1FF),幀格式,數據長度等信息,形成一個完整的 CAN 數據幀,發送給各個電調。//HAL 庫提供了實現 CAN 發送的函數 HAL_CAN_AddTXMessag。CAN_cmd_chassis 函數和AN_cmd_gimbal 函數內部封裝了發送函數。 HAL_StatusTypeDef HAL_CAN_AddTxMessage(CAN_HandleTypeDef *hcan, CAN_TxHeaderTypeDef *pHeader, uint8_t aData[], uint32_t *pTxMailbox) //將一段數據通過 CAN 總線發送 參數:&hcan1;待發送的 CAN 數據幀信息的結構體指針,包含了 CAN 的 ID,格式等重要信息; 裝載了待發送的數據的數組名稱;用于存儲 CAN 發送所使用的郵箱號

?can接收:

?CAN 的接收中斷函數HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)每當 CAN 完成一幀數據的接收時,就會觸發一次 CAN 接收中斷處理函數,接收中斷函數完成一些寄存器的處理之后會調用 CAN 接收中斷回調函數。在中斷回調函數中首先判斷接收對象的 ID,是否是需要的接收的電調發來的數據。完成判斷之后,進行解碼,將對應的電機的數據裝入電機信息數組 motor_chassiss各個對應的位中。接收中斷函數里接收時調用了 HAL 庫提供的接收函數 HAL_CAN_GetRxMessage。

HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo, CAN_RxHeaderTypeDef *pHeader, uint8_t aData[]) 接收 CAN 總線上發送來的數據 參數:&hcan1;接收時使用的 CAN 接收 FIFO 號,一般為 CAN_RX_FIFO0; 存儲接收到的 CAN 數據幀信息的結構體指針,包含了 CAN 的 ID,格式等重要信息; 存儲接收到的數據的數組名稱

?can總線協議:主機發送信息給can總線上掛的設備(從機),每一個從機有一個對應的ID(地址),每當一個設備發送一幀數據時,總線其他設備會檢查這 個 ID 是否是自己需要接收數據的對象,如果是則接收本幀數據,如果不是則忽略。若判斷可以接收以后,則發送控制位,規定了本幀數據的長度;再數據位,即 8 個 8 位數據,CAN總線的一個數據幀中所要傳輸的有效數 據實際上就是這 8Byte......

?數據位:如果要發送數據給 1 號到 4 號電調,控制電機的輸出電流,從而控制電機轉速時,則置標識符(ID)為0x200,則8位數據位分別是4個電調的電流值高八位低八位(4x(1+1)),幀格式和 DLC 也按手冊規定置,完成數據發送。

而當要接收電調發送來的數據時,首先根據接收到的 ID 判斷究竟接收到的是哪個電調發送來的數據(0x200+電調ID,如電調1則為0x201),再對電調發送來的數據進行解碼(數據位的8位分別代表:轉子機械角度高低八位,轉子轉速高低八位,實際轉矩電流高低八位,電機溫度,null)獲取相關信息。

變量聲明應寫在.c文件里,結構體變量寫在.h文件里,.h文件里想用.c聲明的變量得加extern

如.h文件里:

typedef struct
{
? ? uint16_t ecd;
? ? int16_t speed_rpm;
? ? int16_t given_current;
? ? uint8_t temperate;
? ? int16_t last_ecd;
} motor_measure_t;//電機數據結構體

.c文件里:

motor_measure_t motor_chassis[7];

那么.h文件里:

extern motor_measure_t motor_chassis[7];

舵機

開啟定時器 開啟定時器的pwm模式 獲取遙控器數據指針 設置舵機對應引腳的初電平值(剛開始轉過的角度) 當遙控器對應的寄存器值為多少時設置不同的電平,即舵機轉過的角度。

PID

//位置式pid float pidUpdate(PidObject* pid, const float error) {float output;pid->error = error;if(abs(pid->error)<pid->Limit){pid->integ += pid->error; //誤差累加,積分項,iif (pid->integ > pid->iLimit){pid->integ = pid->iLimit;//限幅}else if (pid->integ < pid->iLimitLow){pid->integ = pid->iLimitLow;//限幅}}pid->deriv = pid->error - pid->prevError;//此次誤差減去上次誤差,微分項,dpid->outP = pid->kp * pid->error;pid->outI = pid->ki * pid->integ;pid->outD = pid->kd * pid->deriv;output = pid->outP + pid->outI + pid->outD;pid->prevError = pid->error;return output; }void chassis_pid(void) {motor.Set_motor_speed[0] = 200;//(rc_ctrl.rc.ch[3]+rc_ctrl.rc.ch[2]+rc_ctrl.rc.ch[0])*3*rc_ctrl.rc.s[0]-spin*98; motor.Actual_motor_speed[0] = motor_chassis[0].speed_rpm; motor.Out_motor_speed[0] = pidUpdate(&motor.pid_motor_speed[0] , motor.Set_motor_speed[0] - motor.Actual_motor_speed[0]);motor.Out_motor_speed[0] = limit_ab(motor.Out_motor_speed[0],-20000,20000);CAN_cmd_chassis(motor.Out_motor_speed[0],motor.Out_motor_speed[1],motor.Out_motor_speed[2],motor.Out_motor_speed[3]); }主函數中 : init_pid_all();//pid初始化 while(1) {chassis_pid();//不斷更新pid并給電機發送數據HAL_Delay(10); } //pid結構體 typedef struct {float error;float integ;float iLimit;float iLimitLow;float Limit;float deriv;float outP;float outI;float outD;float kp;float ki;float kd;float prevError; } PidObject;//電機結構體 typedef struct {s16 Out_Car_turn;s16 Set_motor_speed[8];s16 Actual_motor_speed[8]; s16 Out_motor_speed[8];s16 Out_Claw_Round[2];s16 Actual_Claw_round[2];PidObject pid_motor_speed[8];//電機轉速的結構體變量PidObject pid_car_turn;PidObject pid_claw_round[2];PidObject pid_x_speed;PidObject pid_z_speed;PidObject pid_motor[4];} Motor;

十六. IMU 溫度控制

使用 PID 控制算法對 IMU 進行溫度控制

零漂現象是指當物理量輸入為零,傳感器測量的輸出量不為零的現象。即 IMU 沒有任何運動,陀螺儀和加速度計(這倆都是傳感器)也會讀取到一定大小的數據,并將其當作是由 IMU 運動產生的。

PID:𝑈(𝑡) = 𝐾𝑝 ? 𝑒𝑟𝑟(𝑡) + 𝐾𝑖 ? ∫ 𝑒𝑟𝑟(𝑡)𝑑𝑡 + 𝐾𝑑 ? 𝑑𝑒𝑟𝑟(𝑡)/?𝑑𝑡

err(t)即誤差值,Kp,Ki,Kd 分別為比例,積分,微分三項的系數。

單片機系統是離散的,所以位置式pid公式:𝑢(𝑘) = 𝐾𝑝 ? 𝑒(𝑘) + 𝐾𝑖 ? ∑(i=0到k)𝑒(𝑖) ?+ 𝐾𝑑 ? [𝑒(𝑘) ? 𝑒(𝑘 ? 1)];

增量式pid公式:𝛥𝑢(𝑘) = 𝐾𝑝 ? [𝑒(𝑘) ? 𝑒(𝑘 ? 1)] + 𝐾𝑖 ? 𝑒(𝑘) + 𝐾𝑑 ? [𝑒(𝑘) ? 2 ? 𝑒(𝑘 ? 1) + 𝑒(𝑘 ? 2)]

實際上也可以理解為我們在t0、t1、t2...每隔相等的時間(如1s)進行一次采樣,計算這一次輸出量的值和上一次的值作為誤差。

pid算法中,以比例環節為例,控制器=k*eu,而非最終得到的輸出量=k*eu。例如我們給水壺加熱,那么最終需要的量是溫度,但是pid控制的是加熱功率:如我們要加熱到80度,現在75度,則eu=5,加熱功率就是5k,然后溫度上升;當加熱功率小于散熱的時候溫度下降,通過這種改變加熱功率的方式才是pid調節。

以我們的車子追蹤一個會動的物體為例:error為車子和物體之間的距離。比例算法中,由于物體在動,距離增大,那么error增大,控制車子速度的量增大,某一瞬間to車速等于物體速度,設此時距離為x0;此后車子和物體速度相同,error不變,那么它們將會永遠間隔這樣一個距離,稱為穩態誤差。

引入積分算法后,控制車子速度的量不僅是error乘上比例系數k,還有error對時間的積分(乘以積分系數)。t0時刻車速等于物體速度,由于時間永遠在增加,所以積分項一直增加,車子速度肯定會增加,那么車子將繼續追趕物體;此后車子與物體的距離減小,那么比例項的作用減弱,而積分項的作用一直增加,直到某一刻它們的作用扯平使得車子速度又等于物體速度(所以車子速度在第一次相等后經歷了增加再減小的過程);然后發現由于時間增加積分項又增加,比例項又減小,無線逼近。

若振蕩(車子超過物體了),采用微分控制。控制變化曲線的斜率。

十七 底盤控制任務

主文件: can_filter_init(); init_pid_all();//pid的ki、kp、kd等參數初始化 remote_control_init(); RC_ctrl_t * local_rc_ctrl = get_remote_control_point(); while(1) {chassis_pid();//pid參數更新,并將更新的數據(電流值、轉速等)發送HAL_Delay(10); }pid.c文件: float pidUpdate(PidObject* pid, const float error) //pid參數更新函數,輸入變量為pid結構體和error {error賦值到pid結構體內部的error中去誤差累加得到積分項對積分項進行限幅德塔誤差=上次誤差-這次誤差,得到微分項pid->outP = pid->kp * pid->error;pid->outI = pid->ki * pid->integ;pid->outD = pid->kd * pid->deriv;output = pid->outP + pid->outI + pid->outD;//更新pid參數并返回輸出值上次誤差=這次誤差返回輸出值 } void chassis_pid(void) //調用更新的pid參數輸出值,并發送到電機 {vx=local_rc_ctrl->rc.ch[0]/6.6*50;//車速與遙控器成正比vy=-local_rc_ctrl->rc.ch[1]/6.6*50;wz=-local_rc_ctrl->rc.ch[2]/6.6*50;v1=-vx-vy-wz;v2=vx-vy+wz;v3=vx+vy-wz;v4=-vx+vy+wz;/* 底盤四個電機的PID計算并輸出 *///電機1:motor.Set_motor_speed[0] = v1; motor.Actual_motor_speed[0] = motor_chassis[0].speed_rpm; motor.Out_motor_speed[0] = pidUpdate(&motor.pid_motor_speed[0] , motor.Set_motor_speed[0] - motor.Actual_motor_speed[0]);//更新后的電流值賦值給motor.Out_motor_speed變量,輸入是轉速,輸出motor.Out_motor_speed變量是電流值。motor.Out_motor_speed[0] = limit_ab(motor.Out_motor_speed[num],-10000,10000); //對電流值進行限幅CAN_cmd_chassis(motor.Out_motor_speed[0],motor.Out_motor_speed[1],motor.Out_motor_speed[2],motor.Out_motor_speed[3]); //將得到的電流值發送給各個電機 }

總結

以上是生活随笔為你收集整理的stm32f407igh6学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

免费美女av| 久日视频| 中文字幕在线免费 | 国产成人久久久77777 | 6080yy精品一区二区三区 | 91av在线免费视频 | 日韩视频免费 | 在线观看岛国片 | 在线影院中文字幕 | 狠狠色丁香婷婷综合欧美 | 日韩欧美视频在线观看免费 | 最近高清中文字幕 | 国产精品一区二区在线观看免费 | 天天射成人 | 久久五月婷婷丁香社区 | 99精品久久只有精品 | av一区在线 | 射射色| 97手机电影网 | 久久九九免费 | 99这里精品 | 欧美日韩国产在线精品 | 国产第一页福利影院 | 中日韩免费视频 | 国产成人av免费在线观看 | 日韩欧美电影在线 | 亚洲精品免费观看视频 | 亚洲涩涩网 | 亚洲综合色网站 | 午夜精品久久久久久99热明星 | 伊人五月 | 欧美aaa一级| 成片免费 | 国产人成免费视频 | 欧美日韩不卡一区二区 | 91九色pron| 在线91播放 | 91久久在线观看 | 精品欧美一区二区精品久久 | 免费在线观看亚洲视频 | 国产日韩精品在线观看 | 综合精品在线 | 99视频国产精品 | 久久手机在线视频 | 波多野结衣日韩 | 黄色精品久久久 | 久久天天躁夜夜躁狠狠躁2022 | 亚洲精品乱码白浆高清久久久久久 | 国产精品 日韩精品 | www.神马久久 | 亚洲国产中文字幕 | 中文国产在线观看 | 国产视频1 | 99r在线 | 午夜视频日本 | 久久久免费精品国产一区二区 | 日韩在线观看三区 | 超碰久热 | 99精品欧美一区二区三区黑人哦 | 国产亚洲aⅴaaaaaa毛片 | 中文字幕在线一二 | 午夜视频在线观看一区二区三区 | 波多野结衣理论片 | 久久99国产精品久久 | 日本黄色黄网站 | 色av婷婷 | 人人看看人人 | 91插插视频 | 激情欧美日韩一区二区 | 国产一二三四在线视频 | 在线视频黄 | 狠狠色狠狠色合久久伊人 | 911香蕉视频 | 久久久久女教师免费一区 | 7777精品伊人久久久大香线蕉 | a级片韩国| 天堂网av在线 | 激情欧美一区二区免费视频 | 精品二区久久 | 成人免费看片网址 | www178ccom视频在线 | 手机看片久久 | 五月开心网 | 摸阴视频 | 久久中文网 | 久久精品国产免费看久久精品 | 亚洲一区日韩精品 | 久久国内精品 | 亚洲伦理一区二区 | 超碰免费97| 最新久久久 | 91专区在线观看 | 911久久| 蜜桃av观看 | 成人h动漫在线看 | 黄色美女免费网站 | 国产香蕉97碰碰碰视频在线观看 | 日韩精品欧美一区 | 色永久免费视频 | 国产视频在| 热久久免费国产视频 | 久草精品电影 | 亚洲1区 在线 | 欧美另类xxx| 玖玖爱国产在线 | 久久久久久久99精品免费观看 | 亚洲精品资源 | 亚洲激情小视频 | 草久中文字幕 | 日韩av手机在线观看 | 欧美精品在线观看免费 | 国产综合视频在线观看 | 一级做a爱片性色毛片www | 久久国产精品色av免费看 | 久久这里有 | 亚洲综合婷婷 | 国产小视频你懂的在线 | 欧美精品亚洲精品日韩精品 | 婷婷资源站 | 2018好看的中文在线观看 | 97超碰伊人| 亚洲国产大片 | 免费进去里的视频 | 国产在线美女 | 中文字幕在线免费观看视频 | 久久香蕉国产精品麻豆粉嫩av | 国产精品日韩欧美 | www欧美xxxx | av直接看 | 成人av地址 | 欧美最爽乱淫视频播放 | 久久美女电影 | 国产视频二 | 国产视频二区三区 | v片在线播放| 亚洲爱爱视频 | 日韩免费福利 | 亚洲精品国偷拍自产在线观看 | 在线免费视频你懂的 | 午夜一级免费电影 | 国产一区二区在线免费播放 | 激情av网| 国产日韩欧美在线影视 | 狠狠色丁香久久综合网 | 天堂av免费看| 五月天婷亚洲天综合网鲁鲁鲁 | av一级片在线观看 | 天天操天天操天天操天天操天天操天天操 | 亚洲 欧洲av| 综合国产在线观看 | 国产精品毛片网 | 天天爱av导航 | 中文字幕免费观看视频 | 热久久电影| 国产黄在线免费观看 | 日本一区二区三区免费看 | 91大神电影 | 国产五月| 国产一区二区精品久久91 | 色婷婷免费视频 | 欧美日韩亚洲第一 | 福利精品在线 | 精品视频久久久久久 | 婷婷综合视频 | 欧美超碰在线 | 激情久久伊人 | 99久久精品国产免费看不卡 | 999国产在线 | 久久久亚洲精华液 | 欧美肥妇free | 成人作爱视频 | 一区二区中文字幕在线播放 | 免费在线成人av电影 | 欧美天天射| 久久人视频 | 精品视频国产一区 | 日韩网站免费观看 | 久黄色 | 青草视频在线播放 | 日韩免费一级电影 | 亚洲国产网站 | 天天天天射 | 午夜av激情 | 色a在线观看 | 久久99国产一区二区三区 | 日韩免费久久 | 色免费在线 | 久久综合久色欧美综合狠狠 | 国产视频 久久久 | 国产精品视频一二三 | 婷婷网五月天 | 夜夜躁狠狠躁日日躁视频黑人 | 99精品国产一区二区三区不卡 | 麻豆视传媒官网免费观看 | 黄色av免费 | 热久久电影 | 99精品一区二区 | 亚洲日韩中文字幕 | 国产成人精品综合久久久 | 在线视频福利 | 91精品国产成人观看 | 中文字幕一区二区三区久久 | 热re99久久精品国产99热 | 国产啊v在线 | 欧美极品久久 | 久久精品精品 | 97成人在线免费视频 | 国产二区电影 | 久久人91精品久久久久久不卡 | 久久精品欧美日韩精品 | av免费观看在线 | a在线一区| 久久精品欧美一 | av在线免费播放 | 久草免费资源 | 久久99精品国产91久久来源 | 九九九热| 成年人黄色免费网站 | 欧美精品在线一区二区 | 国产区久久 | 欧美片一区二区三区 | 久久精品成人 | 精品国产一区二区三区男人吃奶 | 国产精品美女999 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 国产馆在线播放 | 婷婷激情五月综合 | 国产精品一二 | 国产高清视频色在线www | 狠狠干激情 | www.久久精品视频 | www.狠狠插.com | av看片在线 | 在线观看 国产 | 在线观看视频亚洲 | 亚洲精品xx| 亚洲综合成人av | 久久国产精品久久久 | 国产一级免费在线观看 | 天天射天天拍 | 欧美精品久久久久久久久老牛影院 | 久久三级视频 | 久久久久久久久久伊人 | 久久久久亚洲国产 | 久久情爱 | 成年人黄色大全 | 97在线免费视频 | 久久人操 | 69av网| 久草爱视频 | 视频在线91 | 亚洲网站在线看 | 在线亚洲人成电影网站色www | 中文字幕日韩伦理 | 国产视频在线观看免费 | 日韩精品在线一区 | 亚洲一区二区精品视频 | 欧美精品久久人人躁人人爽 | 日韩在线精品一区 | 青青河边草观看完整版高清 | av不卡中文字幕 | 美女黄频网站 | 久久露脸国产精品 | 911精品视频 | 天天综合网久久综合网 | 黄色毛片网站在线观看 | 国产精品久久一区二区无卡 | 色婷婷国产 | 欧美一区二区精美视频 | 婷婷综合激情 | 99视频精品全国免费 | 综合久久一本 | 一区二区三区中文字幕在线 | 天天色综合三 | 婷婷综合五月 | 国产在线资源 | 亚洲综合视频在线 | 91女子私密保健养生少妇 | 狠狠躁夜夜躁人人爽超碰91 | 毛片网站免费在线观看 | 在线之家官网 | 五月婷社区 | 日韩视频在线观看视频 | 久久久久久久久久亚洲精品 | 天天操天天干天天综合网 | 91久久精品日日躁夜夜躁国产 | 国产精品永久在线 | 99久e精品热线免费 99国产精品久久久久久久久久 | 精品国产诱惑 | 成人久久精品 | 91亚洲精品视频 | 99热亚洲精品| 97超碰人人澡人人 | 国产黑丝袜在线 | 免费看一级特黄a大片 | 亚洲一片黄 | 国产精品久久久久婷婷二区次 | 国产三级视频 | 天堂久色| 四虎成人免费影院 | 久久久影片 | 天天久久夜夜 | 久久人人干 | 日本激情中文字幕 | www.av中文字幕.com | 操少妇视频 | 欧美日韩国产一区二区三区在线观看 | 在线日本v二区不卡 | 一级黄色av| 91久久在线观看 | 久艹视频免费观看 | 日日夜夜天天综合 | 免费观看91视频大全 | 日韩精品一区二区三区三炮视频 | 久久亚洲成人网 | 97在线播放视频 | 免费福利在线播放 | 国产高清视频免费最新在线 | 久久精美视频 | 狠狠伊人 | 美腿丝袜一区二区三区 | 91精品爽啪蜜夜国产在线播放 | 国产精品九色 | 99国产高清| 色综合综合| 99在线视频观看 | 51久久成人国产精品麻豆 | 麻豆影视在线免费观看 | 手机版av在线 | 日韩av看片| 国产精品欧美久久久久无广告 | 国产一区视频在线 | 色94色欧美 | 久久国产精品小视频 | 中文字幕精品www乱入免费视频 | 久久久久久久久久久久av | 欧美日韩精品在线播放 | 欧美视频18 | 亚洲 综合 国产 精品 | 久久亚洲区 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 在线看国产日韩 | av在线永久免费观看 | 五月天丁香视频 | 四虎永久国产精品 | 成人欧美一区二区三区黑人麻豆 | 天天色综合天天 | www.黄色片网站 | 成人手机在线视频 | 99久久婷婷国产一区二区三区 | 亚州人成在线播放 | 成人免费视频播放 | 日韩免费久久 | 看片的网址 | 久久成人麻豆午夜电影 | 日韩免费高清在线 | 最近中文字幕高清字幕在线视频 | 国产精品一区二区白浆 | av成人免费在线观看 | 久久综合久久综合久久 | 日本三级香港三级人妇99 | 久久视频精品在线 | 黄色片网站av| 一级黄色在线视频 | 91禁在线看| 天天狠狠干 | 91香蕉视频在线下载 | 国产专区视频 | 黄a在线看| 天天色天天综合网 | 久久综合精品一区 | 91在线视频 | 久久97久久97精品免视看 | 麻豆视频大全 | 激情久久五月天 | 国产一级免费播放 | 在线免费观看视频一区二区三区 | 天天干天天搞天天射 | 国产精品福利在线播放 | 97超视频在线观看 | av片免费播放 | 免费在线观看污 | 日韩一区精品 | 欧美久久久久久久久久 | av成人黄色| 天天操天天操天天操天天 | 久久久男人的天堂 | 欧美日韩p片| 超碰免费久久 | 狠狠操狠狠干天天操 | 久久精品一区二区 | 中文字幕在线免费 | 一区二区三区精品在线视频 | 在线a视频免费观看 | 不卡电影免费在线播放一区 | 99日韩精品 | 欧洲视频一区 | 国产一级免费在线观看 | 亚洲精品日韩在线观看 | 视频在线一区 | 久精品视频在线观看 | 黄污视频大全 | 欧美一级在线 | 国产精品一区二区 91 | 蜜臀精品久久久久久蜜臀 | av888av.com| av成人在线播放 | 亚洲人av免费网站 | 综合精品久久久 | 久草在线视频免赞 | 亚洲aⅴ一区二区三区 | 午夜精品电影 | 国产精品久久久一区二区 | 人人射| 国产高清av | 在线亚洲成人 | 亚洲精品乱码久久久久久高潮 | 久久a国产 | 欧美乱熟臀69xxxxxx | 国产精品99免视看9 国产精品毛片一区视频 | 精品福利视频在线观看 | 综合色中文 | av中文字幕网站 | 久久超碰网 | 17videosex性欧美 | 久草精品视频 | 99视频网址 | 最新免费av在线 | 天天射网 | 91麻豆精品国产自产在线游戏 | 日韩av在线小说 | 98涩涩国产露脸精品国产网 | 国产一区二区久久精品 | 激情 一区二区 | 亚洲一区二区精品 | 97超碰在线免费观看 | 五月丁色 | 中文字幕888 | 精品久久久免费视频 | 欧美疯狂性受xxxxx另类 | 国产精品久久久99 | 日本精品视频在线观看 | 婷婷网在线 | 99精品视频在线播放免费 | 精品国产电影 | 久久99精品国产麻豆婷婷 | 日韩v在线91成人自拍 | 亚洲作爱视频 | 亚洲国产欧洲综合997久久, | 欧美性黄网官网 | 久久av高清| 蜜臀一区二区三区精品免费视频 | www黄在线 | 91尤物国产尤物福利在线播放 | 在线观av | 久久综合久色欧美综合狠狠 | 国产美女搞久久 | 日本久久久久久科技有限公司 | 久久久午夜精品福利内容 | 日韩欧美视频在线免费观看 | 久久国产精品免费一区二区三区 | 欧美日韩一区二区免费在线观看 | 深夜福利视频在线观看 | 国产99在线免费 | 九色91在线 | 亚洲最新毛片 | 久久精品看 | 看全黄大色黄大片 | 在线亚洲人成电影网站色www | 亚洲激情六月 | 精品国产aⅴ一区二区三区 在线直播av | 中文字幕国语官网在线视频 | 看黄色91| 国产精品区一区 | 一级黄毛片 | 日韩在线不卡视频 | 久久精品国产精品亚洲 | 不卡视频一区二区三区 | 亚洲国产免费网站 | 天天干天天操天天操 | 亚洲精品乱码久久久久久9色 | 天天射天天干天天 | 一区二区三区在线免费 | 国产精品免费视频网站 | 久久9视频 | 免费一级特黄录像 | 中文字幕在线观看第一区 | 久久久精品在线观看 | 992tv人人草| 99热这里只有精品国产首页 | 国产精品午夜免费福利视频 | 99产精品成人啪免费网站 | 国产3p视频 | 欧美精品在线观看免费 | 欧美怡红院视频 | 免费在线精品视频 | 在线草 | 五月天中文字幕mv在线 | 999久久久久| 国产精品永久免费观看 | 日韩黄色软件 | 日本不卡123区 | 97超碰人人澡人人爱 | 亚洲国产精品资源 | 欧美日韩久久一区 | 天天干天天做天天操 | 日韩欧美高清一区二区 | 国产成人精品免高潮在线观看 | 高清av在线免费观看 | 麻豆国产在线视频 | 视频直播国产精品 | 日本色小说视频 | 日韩精品亚洲专区在线观看 | 国产在线不卡精品 | 成人在线视频观看 | 国产一级免费在线 | 久久精品视频在线免费观看 | 天天艹天天操 | 久久久久久久久久电影 | 国产a国产 | 日韩精品极品视频 | 日韩三级视频在线观看 | 亚洲精品视频在线观看免费视频 | 久久精品韩国 | 日韩精品欧美专区 | 久久国产精品久久国产精品 | 一级黄色a视频 | 日韩在线一二三区 | 欧美 激情在线 | 黄色com | 99中文视频在线 | 毛片无卡免费无播放器 | 亚洲视频99 | 玖草在线观看 | 在线综合 亚洲 欧美在线视频 | 人人干在线 | 免费看成年人 | 久色伊人 | 婷婷色资源 | 国产精品岛国久久久久久久久红粉 | 丁香婷婷色综合亚洲电影 | 久久久久久久久毛片 | 国产精品久久片 | 欧美日韩一区久久 | 国产一区二区日本 | 日韩91av | 日韩精品一区二区三区高清免费 | 日韩视频欧美视频 | 麻豆视频在线观看免费 | 欧美淫视频 | 免费高清在线观看成人 | 久久精品中文字幕免费mv | 国产中文字幕视频在线观看 | 国产一区二区精品 | 天天综合色网 | 夜夜夜草| 欧美性春潮 | 色午夜影院 | 婷婷在线综合 | 久久男人免费视频 | 国产精品专区在线 | 久热av在线| 草免费视频 | 五月天最新网址 | 美女搞黄国产视频网站 | 亚洲一区二区三区精品在线观看 | 国产99精品| 亚洲 欧美 国产 va在线影院 | 久日精品 | 中文超碰字幕 | 亚洲精品欧美专区 | 日韩精品免费在线 | 日韩美女高潮 | 免费av黄色 | 91精品国产一区二区在线观看 | 午夜三级理论 | www婷婷 | 在线视频观看亚洲 | 精品国产乱码久久久久久1区2匹 | 亚洲一区二区三区在线看 | 久草免费福利在线观看 | a级国产乱理论片在线观看 伊人宗合网 | 欧美a免费 | a视频免费| 人人射av| 色久五月| 国产精品在线看 | 国产精选视频 | av导航福利 | 在线亚洲观看 | 国内精品久久久久久久久久久久 | 久久精品日产第一区二区三区乱码 | 91桃色免费视频 | 国产精品高潮呻吟久久久久 | 午夜精品婷婷 | 国产高清在线看 | 精品久久久久国产 | 911国产精品| 欧美成人中文字幕 | 亚洲精品视频一二三 | 久久五月激情 | 中文字幕在线字幕中文 | 亚洲天天在线日亚洲洲精 | 日本最大色倩网站www | 亚洲视频在线观看免费 | 天天操网| 在线 高清 中文字幕 | www五月天com | 成人小视频免费在线观看 | 久久天堂精品视频 | www.神马久久 | 国产精品一区免费在线观看 | 超碰在线官网 | 国色天香永久免费 | 国内视频在线 | 日本中文字幕系列 | 狠狠久久婷婷 | 久久99国产精品久久99 | 不卡视频国产 | av在观看| 99国产视频 | 91看片在线免费观看 | 国产亚洲aⅴaaaaaa毛片 | 一级黄色av| 国产精品99久久久久的智能播放 | 91豆花在线 | 亚洲欧洲久久久 | 欧美小视频在线 | 中文字幕影片免费在线观看 | 91中文字幕在线视频 | av在线播放一区二区三区 | 操操综合| 日韩二区三区在线观看 | 久久久久久激情 | 最近中文字幕免费 | 亚洲最新视频在线播放 | 欧美一区,二区 | 五月天丁香亚洲 | 国产五月 | 日韩精品一区二区在线视频 | 久久久伦理| 在线播放第一页 | 亚洲aⅴ免费在线观看 | 亚洲第一色 | 午夜三级福利 | 色综合久久网 | 激情久久婷婷 | 色综合久久久久综合99 | 亚洲午夜激情网 | 久久在线播放 | 国产xxxx性hd极品 | 丁香视频全集免费观看 | 亚洲天堂网在线播放 | 午夜精品一区二区三区在线 | 四季av综合网站 | 日韩区在线观看 | 狠狠干夜夜操 | 亚洲国产影院av久久久久 | 成人免费观看完整版电影 | 91av在线电影 | 色综合久久久久综合体桃花网 | 婷色在线 | 五月激情五月激情 | 久久精品视频4 | 国内精品视频免费 | 在线欧美日韩 | 五月婷婷一级片 | 国产成人一级 | 久久国产精品久久精品国产演员表 | 精品国产一区二区三区四区在线观看 | 国内外成人免费在线视频 | 中文字幕在线免费97 | 成人在线观看影院 | 久久精品网站免费观看 | 97人人澡人人添人人爽超碰 | 福利视频网站 | 国产精品久久久一区二区三区网站 | 日日操网站| 97超碰在线播放 | 97在线精品国自产拍中文 | 欧美另类重口 | 日韩电影黄色 | 97精产国品一二三产区在线 | 久久成人午夜视频 | 五月天中文字幕mv在线 | 欧美另类交在线观看 | 日本三级国产 | 久久不卡国产精品一区二区 | 日韩色在线 | 香蕉影视在线观看 | a在线观看视频 | 超碰免费97 | 久久久国产一区二区三区四区小说 | 最新av网址在线观看 | 久久久久久美女 | 四虎在线永久免费观看 | 国产自产高清不卡 | 亚洲国产丝袜在线观看 | 精品99久久久久久 | www.久热 | 中文字幕在线观看网址 | 日韩有码中文字幕在线 | 国产精品九九热 | 久久在线观看 | 亚洲最新av在线网站 | 免费看黄在线看 | 久久久久久久久毛片精品 | 一级黄色片在线播放 | 婷婷丁香导航 | 久久久精品网站 | 日韩精品免费专区 | 日本性生活一级片 | 久久视频国产精品免费视频在线 | 亚洲男人天堂a | 国产黄色片在线免费观看 | 天堂av官网 | 波多野结衣日韩 | 在线之家免费在线观看电影 | 日韩欧美电影在线 | 午夜av色| 免费看国产一级片 | 日韩av看片 | 欧美人体xx| 一本—道久久a久久精品蜜桃 | 在线观看黄av | 91成人精品 | 天天色天天综合网 | 国产精品久久久久免费 | 99精品欧美一区二区三区黑人哦 | 日本在线中文在线 | 精品色999 | 色爱区综合激月婷婷 | 中文字幕 国产专区 | 国产在线成人 | 97超碰人人干 | 久久精品高清 | 国产精品18毛片一区二区 | 碰超人人 | 99精品国产视频 | 8x8x在线观看视频 | 99re6热在线精品视频 | 国产小视频免费在线网址 | 国产精品资源在线观看 | 国产精品久久久久久高潮 | 97在线免费视频观看 | 婷婷综合激情 | 国产高清一级 | 国产日韩在线观看一区 | 欧美久久99 | 黄色成年 | 国内精品久久久久影院优 | 亚洲久草网 | 日韩激情视频在线观看 | 久久久人人人 | www.天天成人国产电影 | 精品免费在线视频 | 国产精品美女网站 | 九九热国产视频 | 中文字幕在线视频第一页 | 国产亚洲精品久久久网站好莱 | 东方av在 | 天天摸天天操天天舔 | 一级理论片在线观看 | 日本最新高清不卡中文字幕 | 欧美精品久久久久久久久久久 | 日日爱999 | 久草电影在线观看 | 国产亚洲视频在线观看 | av在线中文 | a成人v在线 | 在线观看福利网站 | 久久久91精品国产一区二区精品 | www.亚洲激情.com | 91免费在线看片 | 9ⅰ精品久久久久久久久中文字幕 | 国产美女在线观看 | 天天操天天怕 | 久久久久久久久久久久电影 | 国产手机在线观看视频 | 久久99久久99精品中文字幕 | 麻豆精品视频在线 | 久久久麻豆视频 | 久久成熟 | 久久国产二区 | 91精品毛片 | 亚洲精品在线免费观看视频 | 久久久久久免费视频 | www黄色com | 天天草天天干 | 成人黄色资源 | 久久天堂亚洲 | 草免费视频| 九九热精品视频在线观看 | 国产中文字幕视频在线 | 日韩国产精品久久久久久亚洲 | 香蕉97视频观看在线观看 | 亚洲国产wwwccc36天堂 | 99色免费视频 | 久久久久99精品国产片 | 欧美日韩午夜爽爽 | 九九涩涩av台湾日本热热 | 99免在线观看免费视频高清 | 中文字幕专区高清在线观看 | 手机av资源| 久久久久久久久久亚洲精品 | 久久无码av一区二区三区电影网 | 亚洲精品18日本一区app | 久久久久综合网 | 91传媒在线播放 | www看片网站 | a在线观看国产 | 亚洲免费不卡 | 欧美一级片播放 | 日韩大片在线免费观看 | 国产视频欧美视频 | 国内精品久久久久久久久久久 | 久久无码av一区二区三区电影网 | 中文字幕国产精品一区二区 | 日本中文不卡 | 9色在线视频 | 激情视频在线观看网址 | 国产大片黄色 | 国产精品一区免费在线观看 | 天天操夜夜做 | 99热最新在线| 国产成人精品一区二区在线 | 免费观看www小视频的软件 | www.久久成人 | 久久久久久久久久久电影 | 国产精品69av | 国产精品日韩在线观看 | 在线看不卡av | av中文天堂| 在线观看第一页 | 国内精品99 | 玖玖在线观看视频 | 国产精品99久久久久久小说 | av专区在线 | 日本久久电影网 | 91精品在线免费观看 | 亚洲美女视频在线 | 色综合久久五月 | 国产女v资源在线观看 | 天天插天天爱 | 国产黄色视| 97在线免费| 久久永久视频 | 久久美女免费视频 | 九九热在线精品视频 | 欧美成人精品在线 | 久久精品国产亚洲精品 | 亚洲小视频在线 | 婷婷婷国产在线视频 | 综合天天网| 国产精品成人久久久久 | www欧美xxxx | 99免费在线视频观看 | 超碰国产在线播放 | 国产中文自拍 | 精品成人国产 | 91av原创 | 国产一性一爱一乱一交 | 91最新中文字幕 | 91九色国产在线 | 日韩在线视频播放 | 国产黄色一级大片 | 久久精品波多野结衣 | 精品国产精品国产偷麻豆 | 亚洲日本激情 | 国产在线视频资源 | 中文字幕成人在线观看 | 免费视频 三区 | 五月婷婷激情综合 | 日本精品中文字幕 | 天天干天天干天天干天天干天天干天天干 | 精品国产乱码 | 高清不卡一区二区在线 | 久久人人爽爽人人爽人人片av | 99视频导航| 国产精品美女免费 | 福利一区在线 | 成人午夜电影久久影院 | 午夜久草 | 色噜噜狠狠狠狠色综合 | 九九热视频在线免费观看 | 精品久久久久久久久中文字幕 | 97电影在线观看 | 在线视频专区 | 欧美福利视频 | 99久久久久国产精品免费 | 久久视频免费在线观看 | 人人玩人人添人人澡97 | 开心婷婷色 | 国产精品久久人 | 精品影院一区二区久久久 | 色综合小说 | 91.精品高清在线观看 | 久草在在线 | 99这里只有精品99 | 91av电影在线观看 | 日韩免费一级电影 | 毛片视频电影 | 日韩中文字幕免费电影 | 日韩免费看的电影 | va视频在线观看 | 日韩欧美视频在线观看免费 | 狠狠综合久久av | 国产精品久久久久久av | 亚洲欧美国产精品久久久久 | 日韩一区二区三区观看 | 国产精品久久久久久妇 | 精品亚洲视频在线观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 日韩高清 一区 | www.伊人色.com | 三级av在线免费观看 | 国产黄色精品 | 二区三区中文字幕 | av黄色在线观看 | 国产精品一区二区中文字幕 | 在线免费观看麻豆视频 | 91成人欧美 | 天天操狠狠操网站 | 97久久精品午夜一区二区 | 国产成人一区二区啪在线观看 | www久久com | 天天天天天天干 | 欧美极品xxx | 丁香视频全集免费观看 | 午夜精品久久久久久久久久久久久久 | 99视频 | 99精品国产免费久久久久久下载 | 最新国产精品亚洲 | 欧美精品三级在线观看 | 欧美一区二区三区在线看 | 99精品免费网 | 午夜精品久久久久久久久久久 | 综合网天天 | 人人爽人人爽 | v片在线看| 超碰97久久| 四虎在线永久免费观看 | 日韩中文字幕免费电影 | 中文字幕在线观看第一区 | 天天操天天舔天天爽 | 色五婷婷| 97人人模人人爽人人少妇 | 日产av在线播放 | 一级a毛片高清视频 | 日韩一级电影网站 | 免费能看的黄色片 | 永久中文字幕 | 五月婷婷在线观看视频 | 亚洲在线a | 国产不卡高清 | 91九色蝌蚪国产 | 永久免费毛片在线观看 | 国产精品男女啪啪 | 日本在线观看一区二区三区 | 在线观看日本高清mv视频 | 亚洲欧美视频在线观看 | 国产亚洲激情视频在线 | 成人国产亚洲 | 91视频中文字幕 | 国产精品久久久久久久久久久久 | 国产精品自产拍 | 97品白浆高清久久久久久 | av天天草| 伊人在线视频 | av免费观看在线 | 少妇bbbb搡bbbb桶 | 在线中文字母电影观看 | 一区二区三区免费在线观看视频 | 国产日韩在线一区 | 九九在线免费视频 | 久久99精品国产麻豆婷婷 | 中文字幕国产在线 | 91丨九色丨国产在线观看 | 在线v片免费观看视频 | 成人免费观看大片 | a在线播放 | 337p日本大胆噜噜噜噜 | 午夜av大片 | 日韩在线高清视频 | 国产1区在线观看 | 亚洲午夜剧场 | 国产精品一区二区 91 | 久久国产精品区 | 黄色大片免费网站 | 国产精品夜夜夜一区二区三区尤 | 日韩深夜在线观看 | 日韩欧美精品在线 | 午夜精品久久久久久久99无限制 | 在线观看av麻豆 | 久久久久久久久久久久久国产精品 | 日韩激情视频在线观看 | 精品视频在线免费观看 | 精品视频久久久久久 |