在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32速成筆記(8)—DMA

冬至子 ? 來源:二土電子 ? 作者:二土電子 ? 2023-10-24 14:08 ? 次閱讀

一、什么是DMA

DMA全程Direct Memory Access,即直接存儲器訪問。簡單來講,它的功能是把數(shù)據(jù)從一個(gè)地址搬運(yùn)到另一個(gè)地址。通常有三個(gè)傳輸方向,分別是內(nèi)存到內(nèi)存,內(nèi)存到外設(shè)和外設(shè)到內(nèi)存。

圖片

DMA示意圖

二、DMA有什么作用

直接存儲器存取(DMA)用來提供在外設(shè)和存儲器之間或者存儲器和存儲器之間的高速數(shù)據(jù)傳輸。無須CPU干預(yù),數(shù)據(jù)可以通過DMA快速地移動(dòng),這就節(jié)省了CPU的資源來做其他操作。

比如在串口接收或者發(fā)送時(shí)可以直接利用DMA將接收內(nèi)容直接搬運(yùn)到接收數(shù)組。或者利用DMA將準(zhǔn)備發(fā)送的數(shù)據(jù)搬運(yùn)到發(fā)送的緩沖區(qū)。再或者利用DMA把數(shù)據(jù)搬運(yùn)到特定的地址,或者從特定的地址利用DMA搬運(yùn)數(shù)據(jù)出來。總而言之,在平時(shí)的開發(fā)過程中,DMA是非常常用的。

三、STM32的DMA

STM32F103ZET6有兩個(gè)DMA,12個(gè)通道(DMA1有7個(gè)通道,DMA2有5個(gè)通道),每個(gè)通道專門用來管理來自于一個(gè)或多個(gè)外設(shè)對存儲器訪問的請求。還有一個(gè)仲裁器來協(xié)調(diào)各個(gè)DMA請求的優(yōu)先權(quán)。

圖片

STM32F103ZET6的DMA特性

3.1 DMA請求

圖片

DMA請求

如果一個(gè)外設(shè)想要通過DMA傳輸數(shù)據(jù),必須先給DMA控制器發(fā)送DMA請求。DMA控制器收到請求后,會給外設(shè)一個(gè)應(yīng)答信號。當(dāng)外設(shè)收到應(yīng)答信號后,也會給DMA控制器一個(gè)應(yīng)答信號。當(dāng)DMA控制器收到外設(shè)的應(yīng)答信號后,啟動(dòng)DMA傳輸。

前面介紹STM32F103ZET6有兩個(gè)DMA,12個(gè)通道,同的 DMA 控制器的通道對應(yīng)著不同的外設(shè)請求。根據(jù)中文參考手冊,對應(yīng)關(guān)系如下

圖片

DMA1對應(yīng)外設(shè)

圖片

DMA1對應(yīng)外設(shè)

圖片

DMA2對應(yīng)外設(shè)

圖片

DMA2對應(yīng)外設(shè)

3.2 DMA通道

DMA具有12個(gè)獨(dú)立可編程的通道,每個(gè)通道對應(yīng)不同外設(shè)的DMA請求。雖然每個(gè)通道可以接收多個(gè)外設(shè)的DMA請求,但是同一時(shí)間只能接收一個(gè)。

圖片

DMA通道

3.3 仲裁器

當(dāng)有多個(gè)DMA請求時(shí),需要仲裁器來決定響應(yīng)的先后順序。仲裁器決定相應(yīng)順序的方法有兩種

  • ? 軟件判定 軟件中可以通過設(shè)置DMA_CCRx寄存器來設(shè)置DMA通道的優(yōu)先級。共有四個(gè)優(yōu)先級可以設(shè)置,分別是非常高,高,中和低。

  • ? 硬件判定 當(dāng)遇到兩個(gè)或者多個(gè)相同優(yōu)先級的DMA通道請求時(shí),仲裁器根據(jù)DMA通道的編號來決定響應(yīng)順序。DMA通道編號越低,優(yōu)先級越高。另外,DMA1擁有比DMA2更高的優(yōu)先級。
    圖片
    仲裁器

    四、DMA配置

    4.1 DMA配置步驟

  • ? 使能DMA時(shí)鐘

  • ? 初始化DMA通道,包括配置通道,外設(shè)和內(nèi)存地址,傳輸數(shù)據(jù)量等

  • ? 使能外設(shè)DMA功能

  • ? 開啟DMA通道傳輸

  • ? 查詢DMA通道狀態(tài)

    4.2 DMA結(jié)構(gòu)體成員

  • ? DMA_PeripheralBaseAddr :外設(shè)地址,外設(shè)地址,通過DMA_CPAR寄存器設(shè)置,一般設(shè)置為外設(shè)的數(shù)據(jù)寄存器地址,比如要進(jìn)行串口DMA 傳輸,那么外設(shè)基地址為串口接收/發(fā)送數(shù)據(jù)存儲器USART1->DR 的地址,表示方法為&USART1->DR。如果是存儲器到存儲器模式則設(shè)置為其中一個(gè)存儲區(qū)地址。

  • ? DMA_Memory0BaseAddr :存儲器地址,通過DMA_CMAR寄存器設(shè)置,一般設(shè)置為我們自定義存儲區(qū)的首地址,即我們存放DMA傳輸數(shù)據(jù)的內(nèi)存地址。比如我們定義一個(gè)u32類型數(shù)組,直接寫數(shù)組首地址(直接使用數(shù)組名)即可,在DMA傳輸?shù)臅r(shí)候就可以發(fā)送數(shù)組數(shù)據(jù),或者把數(shù)組用來接收其他數(shù)據(jù)。

  • ? DMA_DIR :數(shù)據(jù)傳輸方向選擇,可選擇外設(shè)到存儲器、存儲器到外設(shè)以及存儲器到存儲器。通過設(shè)定DMA_CCR寄存器的DIR[1:0]位的值決定。

  • ? DMA_BufferSize :用來設(shè)置一次傳輸數(shù)據(jù)的大小,通過DMA_CNDTR寄存器設(shè)置。

  • ? DMA_PeripheralInc :用來設(shè)置外設(shè)地址是遞增還是不變,通過DMA_CCR寄存器的PINC位設(shè)置,如果設(shè)置為遞增,那么下一次傳輸?shù)臅r(shí)候地址加1。通常外設(shè)只有一個(gè)數(shù)據(jù)寄存器,所以一般不會使能該位,即配置為DMA_PeripheralInc_Disable。

  • ? DMA_MemoryInc :用來設(shè)置內(nèi)存地址是否遞增,通過DMA_CCR寄存器的MINC位設(shè)置。我們自定義的存儲區(qū)一般都是存放多個(gè)數(shù)據(jù)的,所以需要使能存儲器地址自動(dòng)遞增功能,即配置為DMA_MemoryInc_Enable。

  • ? DMA_PeripheralDataSize :外設(shè)數(shù)據(jù)寬度選擇,可以為字節(jié)(8位)、半字(16位)、字(32位),通過DMA_CCR寄存器的PSIZE[1:0]位設(shè)置。

  • ? DMA_Mode :DMA傳輸模式選擇,可選擇一次傳輸或者循環(huán)傳輸,通過DMA_CCR寄存器的CIRC位來設(shè)定。比如我們要從內(nèi)存(存儲器)中傳輸64個(gè)字節(jié)到串口,如果設(shè)置為循環(huán)傳輸,那么它會在64個(gè)字節(jié)傳輸完成之后繼續(xù)從內(nèi)存的第一個(gè)地址傳輸,如此循環(huán)。這里我們設(shè)置為一次傳輸完成之后不循環(huán)。所以設(shè)置值為DMA_Mode_Normal。

  • ? DMA_Priority :用來設(shè)置DMA通道的優(yōu)先級,有低,中,高,超高四種級別,可通過DMA_CCR寄存器的PL[1:0]位來設(shè)定。DMA優(yōu)先級只有在多個(gè)DMA數(shù)據(jù)流同時(shí)使用時(shí)才有意義。

  • ? DMA_M2M :用來設(shè)置存儲器到存儲器模式,使用存儲器到存儲器時(shí)用到,設(shè)定DMA_CCR 的位 14 MEN2MEN 即可啟動(dòng)存儲器到存儲器模式。

    五、DMA配置程序

    這里以配置DMA,將ADC采集到的數(shù)據(jù)搬運(yùn)到內(nèi)存中的某一個(gè)數(shù)組中為例,講解一下DMA的配置和使用方法。

    5.1 ADC1初始化程序

    ADC使用TIM4的通道4觸發(fā),具體配置可見本系列另一篇文章STM32速成筆記—ADC。這里在之前配置的基礎(chǔ)上需要開啟ADC的DMA傳輸,在初始化ADC時(shí)加上下面的程序

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

ADC初始化程序如下

/*
 *==============================================================================
 *函數(shù)名稱:ADC1_Init
 *函數(shù)功能:初始化ADCx
 *輸入?yún)?shù):無
 *返回值:無
 *備  注:TIM4通道4觸發(fā)AD轉(zhuǎn)換,使能了DMA
 *==============================================================================
 */
void ADC1_Init(void)
{
    // 結(jié)構(gòu)體定義
    GPIO_InitTypeDef GPIO_InitStructure;
    ADC_InitTypeDef ADC_InitStructure;
    
    // 開啟時(shí)鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1,ENABLE);
    
    // 設(shè)置ADC分頻因子6 72M/6=12,ADC最大時(shí)間不能超過14M
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);
    // 規(guī)則通道配置
    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);
    
    // GPIO配置
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;   //ADC1通道1
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;   // 模擬輸入
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    // ADC參數(shù)配置
    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;   // 獨(dú)立模式
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;   // 非掃描模式 
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;   // 關(guān)閉連續(xù)轉(zhuǎn)換
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T4_CC4;   // TIM2通道2觸發(fā)
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;   // 右對齊 
    ADC_InitStructure.ADC_NbrOfChannel = 1;   // 1個(gè)轉(zhuǎn)換在規(guī)則序列中 也就是只轉(zhuǎn)換規(guī)則序列1 
    ADC_Init(ADC1, &ADC_InitStructure);   // ADC初始化
    
    // 使能外部觸發(fā)
    ADC_ExternalTrigConvCmd(ADC1, ENABLE);
    ADC_DMACmd(ADC1,ENABLE);   // 使能ADC的DMA傳輸
    ADC_Cmd(ADC1, ENABLE);   // 開啟AD轉(zhuǎn)換器
    
    // ADC校準(zhǔn)
    ADC_ResetCalibration(ADC1);   // 重置指定的ADC的校準(zhǔn)寄存器
    while(ADC_GetResetCalibrationStatus(ADC1));   // 獲取ADC重置校準(zhǔn)寄存器的狀態(tài)
    
    ADC_StartCalibration(ADC1);   // 開始指定ADC的校準(zhǔn)狀態(tài)
    while(ADC_GetCalibrationStatus(ADC1));   // 獲取指定ADC的校準(zhǔn)程序

    ADC_SoftwareStartConvCmd(ADC1, ENABLE);   // 使能或者失能指定的ADC的軟件轉(zhuǎn)換啟動(dòng)功能
}

5.2 DMA初始化程序

由上面的介紹可知,ADC1是DMA1的通道1,我們配置一下DMA1的通道1,使能傳輸完成中斷。

/*
 *==============================================================================
 *函數(shù)名稱:DMA1_Init
 *函數(shù)功能:DMA1初始化
 *輸入?yún)?shù):souAddr:數(shù)據(jù)源地址;desAddr:數(shù)據(jù)目的地址
 *返回值:無
 *備  注:數(shù)據(jù)傳輸寬度為16位,外設(shè)到內(nèi)存,循環(huán)傳輸,使能了傳輸完成中斷
 *==============================================================================
 */
void DMA1_Init (u32 souAddr,u32 desAddr)
{
    // 結(jié)構(gòu)體定義
    DMA_InitTypeDef DMA_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    // 使能DMA時(shí)鐘
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
    
    //DMA1初始化
    DMA_DeInit(DMA1_Channel1);
    DMA_InitStructure.DMA_PeripheralBaseAddr = souAddr;   // 數(shù)據(jù)源地址
    DMA_InitStructure.DMA_MemoryBaseAddr = desAddr;   // 目的地址
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;   //   傳輸方向(外設(shè)到內(nèi)存)
    DMA_InitStructure.DMA_BufferSize = 128;   // 一次傳輸數(shù)據(jù)大小
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;   // 外設(shè)地址不自增
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;   // 內(nèi)存地址自增
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;   // 外設(shè)數(shù)據(jù)寬度選擇
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;   // 內(nèi)存數(shù)據(jù)寬度選擇
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;   // DMA模式:循環(huán)傳輸
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;   // 優(yōu)先級:高
    DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;   // 禁止內(nèi)存到內(nèi)存的傳輸
    DMA_Init(DMA1_Channel1, &DMA_InitStructure);   // 配置DMA1
    
    // 使能傳輸完成中斷
    DMA_ITConfig(DMA1_Channel1,DMA_IT_TC, ENABLE);
    
    // NVIC配置
    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);
    
    // 使能DMA1通道1
    DMA_Cmd(DMA1_Channel1,ENABLE);
}

// DMA1中斷服務(wù)函數(shù)
void  DMA1_Channel1_IRQHandler(void)
{
    if(DMA_GetITStatus(DMA1_IT_TC1)!=RESET)
    {
        DMA_Cmd(DMA1_Channel1,DISABLE);
        while (1)
        {}
    }
    // 清除中斷標(biāo)志位
    DMA_ClearITPendingBit(DMA1_IT_TC1);
}

定義一個(gè)存儲AD轉(zhuǎn)換結(jié)果的數(shù)組,初始化時(shí),程序如下

u16 gAdcAdValue[128];   // 存儲AD值

DMA1_Init((u32)(&ADC1- >DR),(u32)&gAdcAdValue);   // DMA1初始化

中斷服務(wù)函數(shù)中將存儲標(biāo)志位置1表示存儲完成

u8 gDmaAdcSaveFlag = 0;   // ADC數(shù)據(jù)存儲標(biāo)志位

// DMA1中斷服務(wù)函數(shù)
void  DMA1_Channel1_IRQHandler(void)
{
    if(DMA_GetITStatus(DMA1_IT_TC1)!=RESET)
    {
        gDmaAdcSaveFlag = 1;   // 存儲標(biāo)志位置1,表示存儲完成
    }
    // 清除中斷標(biāo)志位
    DMA_ClearITPendingBit(DMA1_IT_TC1);
}

上面的配置就可以實(shí)現(xiàn)ADC采集,DMA將采集結(jié)果搬運(yùn)到內(nèi)存中的一個(gè)數(shù)組里面。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7637

    瀏覽量

    166462
  • STM32
    +關(guān)注

    關(guān)注

    2290

    文章

    11017

    瀏覽量

    362492
  • ADC采樣
    +關(guān)注

    關(guān)注

    0

    文章

    134

    瀏覽量

    13126
  • DMA控制器
    +關(guān)注

    關(guān)注

    1

    文章

    43

    瀏覽量

    12571
  • USART串口
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    7030
收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32實(shí)例教程-DMA實(shí)驗(yàn)

    在前面我們提到過 DMA,這一章我們就來學(xué)習(xí) STM32F1 的DMA 使用。要實(shí)現(xiàn)的功能是:通過 K_UP 按鍵控制 DMA 串口 1 數(shù)據(jù)的傳送,在傳送過程中讓 D2 指示燈不斷閃
    發(fā)表于 05-24 09:20 ?1533次閱讀
    <b class='flag-5'>STM32</b>實(shí)例教程-<b class='flag-5'>DMA</b>實(shí)驗(yàn)

    STM32 DMA筆記總結(jié)

    參考了網(wǎng)上一些教程總結(jié)的STM32 DMA筆記,從原理到實(shí)例運(yùn)用,希望對你有幫助!
    發(fā)表于 08-12 06:24

    STM32F2直接存儲器訪問DMA應(yīng)用筆記

    stm32f2 技術(shù)培訓(xùn)_直接存儲器訪問_dma 應(yīng)用筆記:使用 STM32F2 和 STM32F4 D
    發(fā)表于 01-06 06:43

    STM32F103ZE_DMA筆記

    STM32F103ZE_DMA筆記直接存儲器訪問(DMA)用于在外設(shè)與存儲器之間以及存儲器與存儲器之間提供高速數(shù)據(jù)傳輸。可以在無需任何CPU操作的情況下通過DMA快速移動(dòng)數(shù)據(jù)。這樣節(jié)省
    發(fā)表于 01-20 08:30

    MCU學(xué)習(xí)筆記_DMA原理

    MCU學(xué)習(xí)筆記DMA原理1. DMA原理2. DMA相關(guān)概念3. DMA數(shù)據(jù)流配置過程4. HAL庫配置
    發(fā)表于 10-28 15:06 ?8次下載
    MCU學(xué)習(xí)<b class='flag-5'>筆記</b>_<b class='flag-5'>DMA</b>原理

    STM32學(xué)習(xí)筆記(7)——DMA直接存儲器訪問

    STM32學(xué)習(xí)筆記(7)——DMA直接存儲器訪問一、DMA簡介二、DMA功能框圖1. DMA請求
    發(fā)表于 12-02 14:06 ?3次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)<b class='flag-5'>筆記</b>(7)——<b class='flag-5'>DMA</b>直接存儲器訪問

    STM32F1開發(fā)指南筆記32----DMA

    本章介紹STM32F1的DMA。在本章中,我們將利用STM32F1的DMA來實(shí)現(xiàn)串口數(shù)據(jù)傳送,并在TFTLCD模塊上顯示當(dāng)前的傳送進(jìn)度。當(dāng)CPU初始化這個(gè)傳輸動(dòng)作,傳輸動(dòng)作本身是由
    發(fā)表于 12-04 19:21 ?20次下載
    <b class='flag-5'>STM32</b>F1開發(fā)指南<b class='flag-5'>筆記</b>32----<b class='flag-5'>DMA</b>

    STM32基礎(chǔ)-----DMA

    STM32基礎(chǔ)-------DMA
    發(fā)表于 12-20 19:35 ?11次下載
    <b class='flag-5'>STM32</b>基礎(chǔ)-----<b class='flag-5'>DMA</b>

    STM32CubeMX-串口開啟DMA進(jìn)行數(shù)據(jù)傳輸

    STM32CubeMX筆記-串口開啟DMA進(jìn)行數(shù)據(jù)傳輸
    發(fā)表于 12-27 18:40 ?7次下載
    <b class='flag-5'>STM32</b>CubeMX-串口開啟<b class='flag-5'>DMA</b>進(jìn)行數(shù)據(jù)傳輸

    STM32學(xué)習(xí)筆記(串口+DMA)

    小焦的STM32學(xué)習(xí)日志(一)2020.4.20數(shù)據(jù)位大小與大端小端:實(shí)際應(yīng)用:`assert_param();`函數(shù)的理解:串口配合DMA的使用方法回顧:實(shí)現(xiàn)平臺說明:重要的初始化內(nèi)容:需要額外
    發(fā)表于 12-27 19:22 ?23次下載
    <b class='flag-5'>STM32</b>學(xué)習(xí)<b class='flag-5'>筆記</b>(串口+<b class='flag-5'>DMA</b>)

    stm32的串口DMA空閑中斷接收不等長數(shù)據(jù),stm32F1的usart1-DMA-IDLE收發(fā)

    stm32DMA收發(fā)原理,見另一篇:https://blog.csdn.net/Mark_md/article/details/107243054stm32F1的串口DMA
    發(fā)表于 12-28 19:35 ?6次下載
    <b class='flag-5'>stm32</b>的串口<b class='flag-5'>DMA</b>空閑中斷接收不等長數(shù)據(jù),<b class='flag-5'>stm32</b>F1的usart1-<b class='flag-5'>DMA</b>-IDLE收發(fā)

    stm32學(xué)習(xí)筆記 DMA

    DMA簡單來說就是可以減輕CPU工作量通道的選擇與你要用的外設(shè)有關(guān)例子:dma初始化void DMA_ConfigurAction(void) { RCC_AHB1PeriphClockCmd
    發(fā)表于 01-18 08:39 ?11次下載
    <b class='flag-5'>stm32</b>學(xué)習(xí)<b class='flag-5'>筆記</b> <b class='flag-5'>DMA</b>

    MM32F0140 DMA學(xué)習(xí)筆記

    MM32F0140 DMA 學(xué)習(xí)筆記
    的頭像 發(fā)表于 09-18 16:57 ?934次閱讀
    MM32F0140 <b class='flag-5'>DMA</b>學(xué)習(xí)<b class='flag-5'>筆記</b>

    stm32 LL庫開發(fā)-DMA使用方法

    本文以stm32 F303K8為例,不同型號的DMA配置方法略有不同。
    的頭像 發(fā)表于 10-26 14:58 ?2035次閱讀
    <b class='flag-5'>stm32</b> LL庫開發(fā)-<b class='flag-5'>DMA</b>使用方法

    STM32 DMA傳輸?shù)膯栴}分析

    用戶使用STM32G473RET6芯片,開發(fā)環(huán)境STM32CubeMX+Keil(LL庫)。使用DMA1通道1,在半傳輸中斷和完全傳輸中斷里,拷貝ADC采集的數(shù)據(jù)。在應(yīng)用過程中發(fā)現(xiàn)DMA
    的頭像 發(fā)表于 12-01 09:19 ?3951次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DMA</b>傳輸?shù)膯栴}分析
    主站蜘蛛池模板: 日剧天堂 | 一级黄色毛片免费看 | 国产呦精品系列在线 | 天天干天天操天天透 | 国产午夜精品理论片 | 中国一级做a爰片久久毛片 中韩日欧美电影免费看 | 中文一级黄色片 | 亚洲三级免费观看 | 18岁禁黄色 | 午夜精品久久久 | 夜夜艹 | 日韩一区二区三区免费 | 久久久久琪琪免费影院 | 澳门久久 | 精品午夜久久福利大片免费 | a一级日本特黄aaa大片 | 午夜在线亚洲男人午在线 | 91福利视频网站 | 亚洲色图图片 | 美女和帅哥在床上玩的不可描述 | 欧美精品色精品一区二区三区 | 人与性www | 男男浪荡性受高hnp肉 | 日本高清视频在线www色 | 亚洲色四在线视频观看 | 苦瓜se影院在线视频网站 | 亚洲一区小说区中文字幕 | 国产精品美女久久久久网 | 在线视频观看你懂的 | 激情综合婷婷丁香六月花 | 免费观看四虎精品成人 | 欧美性视频一区二区三区 | 国产丝袜va丝袜老师 | 香蕉黄色网| 国产日韩三级 | 天堂在线视频网站 | 天天做天天爱夜夜爽毛片毛片 | 99pao在线视频精品免费 | 欧美影院一区二区 | 在线免费视频手机版 | 亚洲国产成人久久 |