在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 經(jīng)典_STM32_ADC多通道采樣的例子

            經(jīng)典_STM32_ADC多通道采樣的例子

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



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

            ADC_ResetCalibration(ADC1); //復(fù)位指定的ADC1的校準寄存器

            while(ADC_GetResetCalibrationStatus(ADC1)); //獲取ADC1復(fù)位校準寄存器的狀態(tài),設(shè)置狀態(tài)則等待


            ADC_StartCalibration(ADC1); //開始指定ADC1的校準狀態(tài)

            while(ADC_GetCalibrationStatus(ADC1)); //獲取指定ADC1的校準程序,設(shè)置狀態(tài)則等待


            }


            void DMA_Configuration(void)
            {

            DMA_InitTypeDef DMA_InitStructure;
            DMA_DeInit(DMA1_Channel1); //將DMA的通道1寄存器重設(shè)為缺省值
            DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR; //DMA外設(shè)ADC基地址
            DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; //DMA內(nèi)存基地址
            DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //內(nèi)存作為數(shù)據(jù)傳輸?shù)哪康牡?br />DMA_InitStructure.DMA_BufferSize = N*M; //DMA通道的DMA緩存的大小
            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ù)據(jù)寬度為16位
            DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //數(shù)據(jù)寬度為16位
            DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循環(huán)緩存模式
            DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMA通道 x擁有高優(yōu)先級
            DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x沒有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?br />DMA_Init(DMA1_Channel1, &DMA_InitStructure); //根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道

            }


            //配置所有外設(shè)
            void Init_All_Periph(void)
            {

            RCC_Configuration();

            GPIO_Configuration();

            ADC1_Configuration();

            DMA_Configuration();

            //USART1_Configuration();
            USART_Configuration(9600);


            }



            u16 GetVolt(u16 advalue)

            {

            return (u16)(advalue * 330 / 4096); //求的結(jié)果擴大了100倍,方便下面求出小數(shù)

            }




            void filter(void)
            {
            int sum = 0;
            u8 count;
            for(i=0;i<12;i++)

            {

            for ( count=0;count
            {

            sum += AD_Value[count][i];

            }

            After_filter[i]=sum/N;

            sum=0;
            }

            }




            int main(void)
            {

            u16 value[M];

            init_All_Periph();
            SysTick_Initaize();


            ADC_SoftwareStartConvCmd(ADC1, ENABLE);
            DMA_Cmd(DMA1_Channel1, ENABLE); //啟動DMA通道
            while(1)
            {
            while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//等待傳輸完成否則第一位數(shù)據(jù)容易丟失

            filter();
            for(i=0;i<12;i++)
            {
            value[i]= GetVolt(After_filter[i]);

            printf("value[%d]:t%d.%dvn",i,value[i]/100,value[i]0) ;
            delay_ms(100);
            }
            }

            }
            總結(jié)
            該程序中的兩個宏定義,M和N,分別代表有多少個通道,每個通道轉(zhuǎn)換多少次,可以修改其值。
            曾出現(xiàn)的問題:配置時鐘時要知道外部晶振是多少,以便準確配置時鐘。將轉(zhuǎn)換值由二進制轉(zhuǎn)換為十進制時,要先擴大100倍,方便顯示小數(shù)。最后串口輸出時在 printf語句之前加這句代碼,防止輸出的第一位數(shù)據(jù)丟失:while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

            上一頁 1 2 下一頁

            關(guān)鍵詞: STM32ADC多通道采

            評論


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

            關(guān)閉