色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32的開源簡易示波器項目

嵌入式開發愛好者 ? 來源:嵌入式開發愛好者 ? 2023-05-08 09:35 ? 次閱讀

一、前言

該項目是基于正點原子精英板制作的一個簡易示波器,可以讀取信號的頻率和幅值,并可以通過按鍵改變采樣頻率和控制屏幕的更新暫停。

34629186-ecca-11ed-90ce-dac502259ad0.png

二、硬件接線

將PA6與PA4相連,可觀察到正弦波。

將PA6與PA5相連,可觀察到三角波/噪聲(默認三角波)。

KEY_UP控制波形的更新和暫停。

KEY_1降低采樣率。

KEY_0提高采樣率。

三、信號的采集

信號的采集主要是依靠ADC(通過定時器觸發采樣,與在定時器中斷中開啟一次采樣的效果類似,以此來控制采樣的間隔時間相同),然后通過DMA將所采集的數據從ADC的DR寄存器轉移到一個變量中,此時完成一次采樣。

由于設定采集一次完整的波形需要1024個點,即需要連續采集1024次才算一次完整的波形采樣(需要采集1024個點的原因在后面會提到)。

因此我們還需創建一個數組用于存儲這些數據,并在DMA中斷中,將成功轉移到變量中的數據依次存儲進數組(注意此數組中存入的數據是12位的數字量,還未做回歸處理),完成1024個數據的采樣和儲存,用于后續在LCD上進行波形的顯示和相關參數的處理。

此案例用到的是ADC1的通道6(即PA6口)進行數據的采樣,主要需注意將ADC轉換的觸發方式改為定時器觸發(我用的是定時器2的通道2進行觸發,由于STM32手冊提示只有在上升沿時可以觸發ADC,因此我們需要讓定時器2的通道2每隔固定的時間產生一個上升沿)。

將定時器2設置成PWM模式,即可令ADC1在定時器2的通道2每產生一次上升沿時觸發采樣,后續即可通過改變PWM的頻率(即定時器的溢出頻率),便可控制采樣的頻率。

四、代碼配置

ADC的配置:

/**********************************************************
簡介:ADC1-CH6初始化函數
***********************************************************/
voidAdc_Init(void)
{
ADC_InitTypeDefADC_InitStructure;
GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);//使能ADC1通道時鐘


RCC_ADCCLKConfig(RCC_PCLK2_Div6);//設置ADC分頻因子672M/6=12,ADC最大時間不能超過14M

//PA6作為模擬通道輸入引腳
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

ADC_DeInit(ADC1);//復位ADC1,將外設ADC1的全部寄存器重設為缺省值

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC工作模式:ADC1工作在獨立模式
ADC_InitStructure.ADC_ScanConvMode=DISABLE;//模數轉換工作在單通道模式
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//模數轉換工作在非連續轉換模式
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T2_CC2;//轉換由定時器2的通道2觸發(只有在上升沿時可以觸發)
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC數據右對齊
ADC_InitStructure.ADC_NbrOfChannel=1;//順序進行規則轉換的ADC通道的數目
ADC_Init(ADC1,&ADC_InitStructure);//根據ADC_InitStruct中指定的參數初始化外設ADCx的寄存器

ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1

ADC_DMACmd(ADC1,ENABLE);//ADC的DMA功能使能

ADC_ResetCalibration(ADC1);//使能復位校準

ADC_RegularChannelConfig(ADC1,ADC_Channel_6,1,ADC_SampleTime_1Cycles5);//ADC1通道6,采樣時間為239.5周期

ADC_ResetCalibration(ADC1);//復位較準寄存器

while(ADC_GetResetCalibrationStatus(ADC1));//等待復位校準結束

ADC_StartCalibration(ADC1);//開啟AD校準

while(ADC_GetCalibrationStatus(ADC1));//等待校準結束

ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC1的軟件轉換啟動功能

}

定時器的配置:

/******************************************************************
函數名稱:TIM2_PWM_Init(u16arr,u16psc)
函數功能:定時器3,PWM輸出模式初始化函數
參數說明:arr:重裝載值
 psc:預分頻值
備注:通過TIM2-CH2的PWM輸出觸發ADC采樣
*******************************************************************/
voidTIM2_PWM_Init(u16arr,u16psc)
{
GPIO_InitTypeDefGPIO_InitStructure;
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
TIM_OCInitTypeDefTIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能定時器2時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能GPIO外設和AFIO復用功能模塊時鐘

//設置該引腳為復用輸出功能,輸出TIM2CH2的PWM脈沖波形GPIOA.1
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//TIM_CH2
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIO

//初始化TIM3
TIM_TimeBaseStructure.TIM_Period=arr;//設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=psc;//設置用來作為TIMx時鐘頻率除數的預分頻值
TIM_TimeBaseStructure.TIM_ClockDivision=0;//設置時鐘分割:TDTS=Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向上計數模式
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位

//初始化TIM2Channel2PWM模式
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//選擇定時器模式:TIM脈沖寬度調制模式2
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比較輸出使能
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//輸出極性:TIM輸出比較極性高
TIM_OCInitStructure.TIM_Pulse=1000;//發生反轉時的計數器數值,用于改變占空比
TIM_OC2Init(TIM2,&TIM_OCInitStructure);//根據T指定的參數初始化外設TIM2

TIM_CtrlPWMOutputs(TIM2,ENABLE);//使能PWM輸出

TIM_Cmd(TIM2,ENABLE);//使能TIM2
}

DMA配置:

/******************************************************************
函數名稱:MYDMA1_Config()
函數功能:DMA1初始化配置
參數說明:DMA_CHx:DMA通道選擇
 cpar:DMA外設ADC基地址
 cmar:DMA內存基地址
cndtrDMA通道的DMA緩存的大小
備注:
*******************************************************************/
voidMYDMA1_Config(DMA_Channel_TypeDef*DMA_CHx,u32cpar,u32cmar,u16cndtr)
{
DMA_InitTypeDefDMA_InitStructure;
NVIC_InitTypeDefNVIC_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//使能DMA傳輸

DMA_DeInit(DMA_CHx);//將DMA的通道1寄存器重設為缺省值
DMA_InitStructure.DMA_PeripheralBaseAddr=cpar;//DMA外設ADC基地址
DMA_InitStructure.DMA_MemoryBaseAddr=cmar;//DMA內存基地址
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//數據傳輸方向,從外設讀取發送到內存//
DMA_InitStructure.DMA_BufferSize=cndtr;//DMA通道的DMA緩存的大小
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外設地址寄存器不變
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//內存地址寄存器遞增
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//數據寬度為16位
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;//數據寬度為16位
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//工作在循環模式
DMA_InitStructure.DMA_Priority=DMA_Priority_High;//DMA通道x擁有高優先級
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//DMA通道x沒有設置為內存到內存傳輸
DMA_Init(DMA_CHx,&DMA_InitStructure);//ADC1匹配DMA通道1

DMA_ITConfig(DMA1_Channel1,DMA1_IT_TC1,ENABLE);//使能DMA傳輸中斷

//配置中斷優先級
NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);

DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA通道
}

注意:

由于在設置PWM時將TIM_Pulse默認設置為1000,因此在初始化定時器2時,TIM_Period的值不能小于該值,可自行修改。TIM_Pulse的值并不會影響采樣頻率。

采樣頻率= 定時器2溢出頻率=SYSCLK/預分頻值/溢出值因此如果將TIM_Pulse設為1,TIM_Period設為2,TIM_Prescaler設為1,理論上采樣頻率最高可達36Mhz。

五、數據的處理

數據的處理主要是要求出信號的頻率和幅值等相關參數。幅值可以通過找出之前存儲1024個點的數組中最大最小值,回歸處理過后算出差值。

難點主要在于頻率的求取。一個信號中可能包含多種頻率成分,而我顯示的是幅值最大的頻率分量(當然其他頻率也可獲得)。這里便用到了STM32提供的DSP庫中的FFT(快速傅里葉變換),DSP庫在最后的源碼中有。

需要采樣1024個點的原因:FFT算法要求樣本數為2的n次方,而DSP庫中提供了64,256和1024樣本數對應的庫函數,因此選用1024最大樣本數可以使頻率分辨率最小,更加精確。(定義頻率分辨率f0=fs/N,其中fs等于采樣率,N為采樣點數)

需注意:FFT后的輸出不是實際的信號頻率,需要經過轉換。f(k)=k*(fs/N),其中f(k)是實際頻率,k是實際信號的最大幅度頻率所對應的數。(詳見下面代碼,分享的源代碼中公式有誤,未重新上傳)

獲取頻率的函數:

#defineNPT1024//一次完整采集的采樣點數

/******************************************************************
函數名稱:GetPowerMag()
函數功能:計算各次諧波幅值
參數說明:
備注:先將lBufOutArray分解成實部(X)和虛部(Y),然后計算幅值(sqrt(X*X+Y*Y)
*******************************************************************/
voidGetPowerMag(void)
{
floatX,Y,Mag,magmax;//實部,虛部,各頻率幅值,最大幅值
u16i;

//調用自cr4_fft_1024_stm32
cr4_fft_1024_stm32(fftout,fftin,NPT);
//fftin為傅里葉輸入序列數組,ffout為傅里葉輸出序列數組

for(i=1;i>16;
Y=(fftout[i]>>16);

Mag=sqrt(X*X+Y*Y);
FFT_Mag[i]=Mag;//存入緩存,用于輸出查驗
//獲取最大頻率分量及其幅值
if(Mag>magmax)
{
magmax=Mag;
temp=i;
}
}
F=(u16)(temp*(fre*1.0/NPT));//源代碼中此公式有誤,將此復制進去

LCD_ShowNum(280,180,F,5,16);
}

六、模擬正弦波輸出

此正弦波輸出是用于調試示波器,觀察顯示和實際是否相同。主要利用DAC輸出,在定時器3的中斷中不斷改變DAC的輸出值,產生一個正弦波。因此改變正弦波的頻率可以通過更改定時器3的溢出頻率。(采用的PA4口進行輸出)

在初始化時,我將定時器3的重裝載值設置為40,預分頻值設置為72,正弦波輸出頻率為72Mhz/40/72/1024≈24.5Hz(1024是因為將一個周期正弦波均分成1024個輸出點,詳見下面函數InitBufInArray())。

經采樣處理后顯示為24-25Hz,與實際值接近。(但是當采樣頻率提高到最大3.6kHz時,頻率顯示為32Hz左右,原因未知)

下面是相關代碼:

u16magout[NPT];
/******************************************************************
函數名稱:InitBufInArray()
函數功能:正弦波值初始化,將正弦波各點的值存入magout[]數組中
參數說明:
備注:
*******************************************************************/
voidInitBufInArray(void)
{
u16i;
floatfx;
for(i=0;i=NPT)
i=0;
}

七、模擬噪聲或三角波輸出

模擬噪聲或三角波輸出可直接通過配置DAC,利用芯片內部的發生器產生。DAC2的轉換由定時器4的TRGO觸發(事件觸發)。同時需要注意設置TRGO由更新事件產生。

若為三角波輸出,頻率=72Mhz/定時器重裝載值/預分頻系數/幅值/2;

例如:初始化定時器的重裝載值為2,預分頻系數為36,幅值為最大(4096),即Freq=72Mhz/2/36/4096/2≈122Hz;

具體代碼如下所示:

voidDac2_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
DAC_InitTypeDefDAC_InitType;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA通道時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);//使能DAC通道時鐘

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//端口配置
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

DAC_InitType.DAC_Trigger=DAC_Trigger_T4_TRGO;//定時器4觸發
DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_Noise;//產生噪聲
//DAC_WaveGeneration_Triangle產生三角波
DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_TriangleAmplitude_4095;//幅值設置為最大,即3.3V
DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable;//DAC1輸出緩存關閉BOFF1=1
DAC_Init(DAC_Channel_2,&DAC_InitType);//初始化DAC通道2

DAC_Cmd(DAC_Channel_2,ENABLE);//使能DAC-CH2

DAC_SetChannel1Data(DAC_Align_12b_R,0);//12位右對齊數據格式設置DAC值
}
voidTIM4_Int_Init(u16arr,u16psc)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//時鐘使能

TIM_TimeBaseStructure.TIM_Period=arr;//設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值計數到5000為500ms
TIM_TimeBaseStructure.TIM_Prescaler=psc;//設置用來作為TIMx時鐘頻率除數的預分頻值10Khz的計數頻率
TIM_TimeBaseStructure.TIM_ClockDivision=0;//設置時鐘分割:TDTS=Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向上計數模式
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位

TIM_SelectOutputTrigger(TIM4,TIM_TRGOSource_Update);//觸發外設方式為更新觸發

TIM_Cmd(TIM4,ENABLE);//使能TIMx外設

}

八、顯示函數與按鍵控制

顯示波形只需將所獲得的1024個采樣數據選擇一部分進行顯示大致思路如下:

u16pre_vol;//當前電壓值對應點的縱坐標
u16past_vol;//前一個電壓值對應點的縱坐標
//adcx[]數組及通過DMA存入的1024個原始數據
pre_vol=50+adcx[x]/4096.0*100;
LCD_DrawLine(x,past_vol,x+1,pre_vol);//根據實際,打點位置可進行相應更改
past_vol=pre_vol;

按鍵的控制是在外部中斷中進行(正點原子資料中提供相應參考代碼)比較重要的是改變采樣頻率。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 示波器
    +關注

    關注

    113

    文章

    6266

    瀏覽量

    185338
  • adc
    adc
    +關注

    關注

    98

    文章

    6513

    瀏覽量

    545029
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356582
  • 定時器
    +關注

    關注

    23

    文章

    3251

    瀏覽量

    115009
  • 開源
    +關注

    關注

    3

    文章

    3370

    瀏覽量

    42574

原文標題:基于STM32的開源簡易示波器項目

文章出處:【微信號:嵌入式開發愛好者,微信公眾號:嵌入式開發愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用STM32做一個簡易示波器(工程已開源

    項目是基于正點原子精英板制作的一個簡易示波器,可以讀取信號的頻率和幅值,并可以通過按鍵改變采樣頻率和控制屏幕的更新暫停。
    發表于 11-25 14:08 ?4728次閱讀

    Proteus:簡易示波器

    Proteus:簡易示波器
    的頭像 發表于 06-14 11:35 ?2468次閱讀
    Proteus:<b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>

    基于STM32制作的500KHz示波器項目

    今天小編給大家帶來國外的Maker Mirko Pavleskid的基于STM32制作的500KHz示波器項目
    的頭像 發表于 12-03 10:07 ?1971次閱讀
    基于<b class='flag-5'>STM32</b>制作的500KHz<b class='flag-5'>示波器</b><b class='flag-5'>項目</b>

    基于stm32簡易示波器

    基于stm32簡易示波器,筆記目錄一.設計要求二.整體思路三.硬件設計1.功能部分2.電源部分3.stm32f407核心板及3.2寸的TFT顯示屏四.軟件設計1.主函數的設計2.測試
    發表于 08-09 09:14

    如何去制作一個基于STM32簡易示波器

    如何去制作一個基于STM32簡易示波器呢?基于STM32簡易示波器有何功能呢?
    發表于 11-12 07:07

    基于STM32簡易示波器設備驅動的研究

    基于STM32簡易示波器設備驅動的研究
    發表于 11-06 17:04 ?68次下載

    簡易數字存儲示波器設計

    設計一簡易數字存儲示波器簡易DSO)。
    發表于 03-18 15:20 ?412次下載
    <b class='flag-5'>簡易</b>數字存儲<b class='flag-5'>示波器</b>設計

    STM32G0簡易示波器與信號發生器項目

    寫在前面 今年寒假我完成了硬禾學堂的STM32G0簡易示波器與信號發生器項目(網址:https://www.eetree.cn/project/detail/167),暑假這次活動的開
    的頭像 發表于 09-14 09:47 ?3303次閱讀
    <b class='flag-5'>STM32</b>G0<b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>與信號發生器<b class='flag-5'>項目</b>

    stm32簡易示波器(標準庫)

    簡介此項案例是基于正點原子精英板制作的一個簡易示波器,可以讀取信號的頻率和幅值,并可以通過按鍵改變采樣頻率和控制屏幕的更新暫停。也是通過學習網上大佬的經驗加以改編。下面將介紹所用到的基本原理以及相關
    發表于 11-23 18:21 ?36次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>(標準庫)

    基于stm32mini開發板的簡易函數發生器和簡易示波器

    基于stm32 mini開發板的簡易示波器
    發表于 01-17 10:01 ?35次下載
    基于<b class='flag-5'>stm32</b>mini開發板的<b class='flag-5'>簡易</b>函數發生器和<b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>

    基于LabVIEW的簡易虛擬示波器設計

    基于LabVIEW的簡易虛擬示波器設計方法。
    發表于 04-06 15:33 ?126次下載

    ERCF簡易BRD開源項目

    電子發燒友網站提供《ERCF簡易BRD開源項目.zip》資料免費下載
    發表于 07-18 15:42 ?2次下載
    ERCF<b class='flag-5'>簡易</b>BRD<b class='flag-5'>開源</b><b class='flag-5'>項目</b>

    示波器Murzik開源項目

    電子發燒友網站提供《示波器Murzik開源項目.zip》資料免費下載
    發表于 07-18 11:37 ?9次下載
    <b class='flag-5'>示波器</b>Murzik<b class='flag-5'>開源</b><b class='flag-5'>項目</b>

    手持式示波器開源項目

    電子發燒友網站提供《手持式示波器開源項目.zip》資料免費下載
    發表于 12-01 14:12 ?2次下載
    手持式<b class='flag-5'>示波器</b><b class='flag-5'>開源</b><b class='flag-5'>項目</b>

    基于單片機的簡易示波器設計

    學習單片機,通過做簡單的小項目,是成長最快的一種方法。今天就給大家分享一個制作簡易示波器的小項目,代碼開源,希望對初學者有幫助。
    的頭像 發表于 08-30 09:22 ?1667次閱讀
    基于單片機的<b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>設計
    主站蜘蛛池模板: 国产全部视频列表支持手机| 99国产在线精品观看二区| 自慰弄湿白丝袜| 国产午夜人做人免费视频中文| 欧美fxxx| 92午夜免费福利757| 久久两性视频| 伊人久久大香线蕉综合电影| 国产午夜在线观看视频| 学生无码AV一区二区三区| 国产毛片女人18水多| 无人区日本电影在线观看高清| 国产成人精品免费视频大全可播放的| 青青草 久久久| 99久久国产极品蜜臀AV酒店| 欧美成 人 网 站 免费| av淘宝 在线观看| 女教师二十三岁| 99久久国产宗和精品1上映| 欧美xxxx83d| 成人动漫bt种子| 特级毛片全部免费播放免下载| 国产爱豆果冻传媒在线观看视频| 少女亚洲free| 国产偷抇久久精品A片蜜臀AV| 无码一区二区三区| 国产亚洲精品久久久999无毒 | 夜夜精品视频一区二区| 果冻传媒9CM在线观看| 亚洲精品国产自在在线观看| 花蝴蝶高清观看免费| 一级毛片全部免| 免费女性裸身照无遮挡网站| 扒开美女嫩bbb| 午夜伦理电影在线观免费| 国产精品久AAAAA片| 小向美奈子厨房magnet| 久久久久久亚洲精品影院| avv天堂| 少妇久久久久久被弄高潮| 久久成人免费大片|