在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            STM32 AD雙通道DMA模式

            作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏

            //通過腳PA1,PA2采集AD。每路AD采集10次。

            本文引用地址:http://www.biyoush.com/article/201611/315880.htm


            [cpp] view plaincopyprint?
            #include"ad_driver.h"

            //全局變量
            //AD采樣存放空間
            __IOuint16_tADCConvertedValue[20];

            //函數(shù)
            //初始化AD
            voidinit_ad(void)
            {
            ADC_InitTypeDefADC_InitStructure;
            DMA_InitTypeDefDMA_InitStructure;
            GPIO_InitTypeDefGPIO_InitStructure;

            //---------------------充電AD初始化--------------------
            //啟動DMA時(shí)鐘
            RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

            //啟動ADC1時(shí)鐘
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

            //采樣腳設(shè)置
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;
            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
            GPIO_Init(GPIOA,&GPIO_InitStructure);

            //DMA1通道1配置
            DMA_DeInit(DMA1_Channel1);
            //外設(shè)地址
            DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_ADDRESS;
            //內(nèi)存地址
            DMA_InitStructure.DMA_MemoryBaseAddr=(uint32_t)ADCConvertedValue;
            //dma傳輸方向單向
            DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;
            //設(shè)置DMA在傳輸時(shí)緩沖區(qū)的長度
            DMA_InitStructure.DMA_BufferSize=20;
            //設(shè)置DMA的外設(shè)遞增模式,一個(gè)外設(shè)
            DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
            //設(shè)置DMA的內(nèi)存遞增模式
            DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
            //外設(shè)數(shù)據(jù)字長
            DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;
            //內(nèi)存數(shù)據(jù)字長
            DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;
            //設(shè)置DMA的傳輸模式:連續(xù)不斷的循環(huán)模式
            DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
            //設(shè)置DMA的優(yōu)先級別
            DMA_InitStructure.DMA_Priority=DMA_Priority_High;
            //設(shè)置DMA的2個(gè)memory中的變量互相訪問
            DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
            DMA_Init(DMA1_Channel1,&DMA_InitStructure);

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

            //ADC1配置
            //獨(dú)立工作模式
            ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
            //掃描方式
            ADC_InitStructure.ADC_ScanConvMode=ENABLE;
            //連續(xù)轉(zhuǎn)換
            ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;
            //外部觸發(fā)禁止
            ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
            //數(shù)據(jù)右對齊
            ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
            //用于轉(zhuǎn)換的通道數(shù)
            ADC_InitStructure.ADC_NbrOfChannel=2;
            ADC_Init(ADC1,&ADC_InitStructure);

            //規(guī)則模式通道配置
            ADC_RegularChannelConfig(ADC1,ADC_Channel_1,1,ADC_SampleTime_239Cycles5);
            ADC_RegularChannelConfig(ADC1,ADC_Channel_2,2,ADC_SampleTime_239Cycles5);

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

            //使能ADC1
            ADC_Cmd(ADC1,ENABLE);

            //使能ADC1復(fù)位校準(zhǔn)寄存器
            ADC_ResetCalibration(ADC1);
            //檢查校準(zhǔn)寄存器是否復(fù)位完畢
            while(ADC_GetResetCalibrationStatus(ADC1));

            //開始校準(zhǔn)
            ADC_StartCalibration(ADC1);
            //檢測是否校準(zhǔn)完畢
            while(ADC_GetCalibrationStatus(ADC1));

            //開啟ADC1的軟件轉(zhuǎn)換
            ADC_SoftwareStartConvCmd(ADC1,ENABLE);
            }

            //獲得充電電壓
            floatvoltage_charge(void)
            {
            uint8_ti=0;
            uint16_tsum=0;
            floatv=0;

            //取得10次充電電壓平均值
            for(i=0;i<10;i++)
            {
            sum+=ADCConvertedValue[i*2];
            }
            sum/=10;
            //變換成電壓值
            v=0.002991*sum;

            returnv;
            }

            //獲得放電電壓
            floatvoltage_discharge(void)
            {
            uint8_ti=0;
            uint16_tsum=0;
            floatv=0;

            //取得10次充電電壓平均值
            for(i=0;i<10;i++)
            {
            sum+=ADCConvertedValue[i*2+1];
            }
            sum/=10;
            //變換成電壓值
            v=0.002991*sum;

            returnv;
            }



            關(guān)鍵詞: STM32AD雙通道DMA模

            評論


            技術(shù)專區(qū)

            關(guān)閉