OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4700|回复: 1

stm32F0 ADC+DMA通道输出结果不对,三个全部输出0xfff

[复制链接]

1

主题

3

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-6-15
在线时间
17 小时
发表于 2021-7-5 17:10:01 | 显示全部楼层 |阅读模式
3金钱
  u16 i1;

void ADC_Config()
{
   ADC_InitTypeDef     ADC_Initstructure;
         GPIO_InitTypeDef    GPIO_Initstruct;             
       
         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);

   GPIO_Initstruct.GPIO_Mode=GPIO_Mode_AN;
         GPIO_Initstruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
         GPIO_Initstruct.GPIO_Speed=GPIO_Speed_10MHz;
         GPIO_Initstruct.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
         GPIO_Init(GPIOA,&GPIO_Initstruct);

         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);                        // ê±Öóê1Äü                                                                 
   RCC_ADCCLKConfig(RCC_ADCCLK_PCLK_Div4);                                     // ËÄ·ÖÆμ
   ADC_DeInit (ADC1 );         
   ADC_StructInit(&ADC_Initstructure);
         
         ADC_Initstructure.ADC_ContinuousConvMode=ENABLE;
         ADC_Initstructure.ADC_DataAlign=ADC_DataAlign_Right;
         ADC_Initstructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_TRGO;
         ADC_Initstructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_Rising;
   //ADC_Initstructure.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;
         ADC_Initstructure.ADC_Resolution=ADC_Resolution_12b;
         ADC_Initstructure.ADC_ScanDirection=ADC_ScanDirection_Backward;
         ADC_Init(ADC1,&ADC_Initstructure);
       
         ADC_ChannelConfig(ADC1, ADC_Channel_6 , ADC_SampleTime_7_5Cycles);    //IC
         ADC_ChannelConfig(ADC1, ADC_Channel_4 , ADC_SampleTime_7_5Cycles);    //IA
   ADC_ChannelConfig(ADC1, ADC_Channel_5 , ADC_SampleTime_7_5Cycles);    //IB
   ADC_AnalogWatchdogThresholdsConfig(ADC1, 4096, 0);

//  /* Enable the ADC1 single channel  */
  ADC_AnalogWatchdogSingleChannelCmd(ADC1, ENABLE);
//  
  ADC_OverrunModeCmd(ADC1, ENABLE);
//  /* Enable the ADC1 analog watchdog */
  ADC_AnalogWatchdogCmd(ADC1,ENABLE);
//       
        ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_AnalogWatchdog_Channel_11);
   ADC_GetCalibrationFactor(ADC1);
   ADC_Cmd(ADC1, ENABLE);
         
   while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));           
         ADC_StartOfConversion(ADC1);                          //2éÑùÖD¶Ï½áêøê1Äü
         
         while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
                i1=ADC_GetConversionValue(ADC1);
         ADC_DMACmd (ADC1,ENABLE);                                             
         ADC_DMARequestModeConfig(ADC1,ADC_DMAMode_Circular);
}         
         


        static u16  pHASEA=0;
        static u16  pHASEB=0;
        static u16  pHASEC=0;

//#define ADC1_DR_Address    0x40012440
__IO uint16_t RegularConvData_Tab[3];
void DMA_ADC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);

NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
       

  DMA_InitTypeDef   DMA_InitStructure;
  /* DMA1 clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);

  /* DMA1 Channel1 Config */
  DMA_DeInit(DMA1_Channel1);
  DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC1->DR);//  &ADC1->DR;  //DMAíaéèADC»ùμØÖ·
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&RegularConvData_Tab;  //DMAÄú′æ»ùμØÖ·
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  // DMAêy¾Y′«êä·½Ïò£¬Õaàïíaéè×÷Îaêy¾YÔ′
  DMA_InitStructure.DMA_BufferSize = 3;  //DMAí¨μàμÄDMA»o′æ′óD¡
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//íaéèμØÖ·2»±ä
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //Äú′æμØÖ·μYÔö
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //°ë×Ö½ú
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //°ë×Ö½ú
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //1¤×÷ÔúÑ-»·Ä£ê½
  DMA_InitStructure.DMA_Priority = DMA_Priority_High; //DMAí¨μà xóÅÏè¼¶
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //·ÇÄú′æμ½Äú′æ′«êä
  DMA_Init(DMA1_Channel1, &DMA_InitStructure);
  DMA_ClearITPendingBit(DMA1_IT_TC1);
  DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);    //¿aÆôÖD¶Ï       
  DMA_Cmd(DMA1_Channel1, ENABLE);
//       
//  


}

u16 q1,q2,q3;

void DMA1_Channel1_IRQHandler(void)

{
if(DMA_GetITStatus(DMA_IT_TC))
{
         DMA_ClearITPendingBit(DMA_IT_TC);

         pHASEA |=RegularConvData_Tab[0] ;
         pHASEB |=RegularConvData_Tab[1] ;
         pHASEC |=RegularConvData_Tab[2] ;
                q1=pHASEA;
                q2=pHASEB;
                q3=pHASEC;

}


}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2021-6-15
在线时间
17 小时
 楼主| 发表于 2021-7-5 17:12:31 | 显示全部楼层
直接读取结果是对了i1=8ff,用了DMA结果就为q1=q2=q3=0xfff
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 06:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表