偷偷碰在线视频天天|性高湖久久久久久久久aaaaa|美女拍拍拍免费视频网站|日韩高清dvd|97夜夜澡人人爽人人喊一欧美

當前位置: 上海銘靜電子科技有限公司 » 單片機

STM32的ADC1+ADC3 16路采集 DMA傳輸 數據不錯位

分類:單片機 發布:2018年05月13日 14:13 瀏覽:974次 Tag:

1) ADC多通道采集:(多通道采集必須用掃描模式,掃描模式時規則組的通道共用一個寄存器,so必須用DMA傳輸;為防止數據錯位,不能用連續模式,而應在查詢或中斷中先關閉ADC轉換,再開啟ADC轉換)so應采用掃描、非連續的方式、DMA正常模式,DMA的EOC中斷或查詢;

上述的配置下,ADC運行流程如下:

每個規則通道采集之后,每個ADC_DR會更新,這個更新會啟動一次DMA,同時會產生EOC,然后DMA會傳輸此數據,DMA的傳輸會清除EOC標志,然后DMA的傳輸量計數器--,so,每一組規則通道轉換完成后也不會產生EOC(詳情看英文版STM32手冊V15版本-Page220,而非V9版本),so利用這個EOC產生ADC中斷或查詢時,標志位已為RESET,so根本就辦不到,但可利用DMA正常模式,DMA_EOC標志被置位在中斷或查詢中ADC轉換先關閉,對應的DMACmd關閉,然后重新寫入DMA的傳輸數據量CNDTR,再打開DMACmd,再清除DMA標志位,再打開ADC轉換,同時,存儲模擬量的變量或數組需要用volatile修飾

DMA查詢的代碼如下

   if(DMA_GetFlagStatus(DMA1_FLAG_TC1)!=RESET)       //?D??í¨μà1′?ê?íê3é

   {

            ADC_SoftwareStartConvCmd(ADC1,DISABLE);

            DMA_Cmd(DMA1_Channel1,DISABLE);

                    DMA_SetCurrDataCounter(ADC1_DMA_CHANNLE,ADC1_DMA_BUFFER_SIZE);    DMA_Cmd(DMA1_Channel1,ENABLE);

                   DMA_ClearFlag(DMA1_FLAG_TC1);//

            ADC_SoftwareStartConvCmd(ADC1,ENABLE);

    }

同時也可以ADC1、ADC3同時使用,ADC3利用PF6-9,可復用為Channel4-7,頁要為掃描模式,非連續模式;代碼如下:

ADC_InitStructure.ADC_NbrOfChannel = 4;

ADC_Init(ADC3, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC3,ADC_Channel_4,1,ADC_SampleTime_239Cycles5);

         ADC_RegularChannelConfig(ADC3,ADC_Channel_5, 2, ADC_SampleTime_239Cycles5 );           ADC_RegularChannelConfig(ADC3,ADC_Channel_6, 3, ADC_SampleTime_239Cycles5 ); 

ADC_RegularChannelConfig(ADC3, ADC_Channel_7, 4,ADC_SampleTime_239Cycles5 ); 

         ADC_DMACmd(ADC3, ENABLE);

         ADC_Cmd(ADC3,ENABLE);    

         ADC_ResetCalibration(ADC3);       

         while(ADC_GetResetCalibrationStatus(ADC3));    

         ADC_StartCalibration(ADC3);

         while(ADC_GetCalibrationStatus(ADC3));     

        

  ADC_SoftwareStartConvCmd(ADC3, ENABLE);  


相關文章
 
資訊欄目
最新資訊
資訊排行
 

收縮
  • 電話咨詢

  • 021-31007558