STM32F429的AD转换程序有时会死在while

2019-07-14 16:34发布



ADC程序如下:
void ADCInit(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  ADC_CommonInitTypeDef ADC_CommonInitStructure;
  ADC_InitTypeDef       ADC_InitStructure;
        
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
        
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);         
  RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);        

  ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
  ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
  ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
  ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div4;
  ADC_CommonInit(&ADC_CommonInitStructure);
        
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
  ADC_InitStructure.ADC_ScanConvMode = DISABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADC1, &ADC_InitStructure);
        
  ADC_Cmd(ADC1, ENABLE);
}


u16 Get_Adc(u8 ch)   
{
        ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_480Cycles );                    

        ADC_SoftwareStartConv(ADC1);
         
        while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));
        
        return (ADC_GetConversionValue(ADC1));        
}


程序有时会死在while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ))中,大家有没有遇到这个问题。通过仿真ADC_SR值为0x00000030,表示发生溢出。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
TOPCB
1楼-- · 2019-07-14 16:43
这里可以考虑判断完成转换的标志位,转换完成后,进行数据返回。
TOPCB
2楼-- · 2019-07-14 17:24
这个判断是自己写的,还是例程?
fantasyo老时光
3楼-- · 2019-07-14 21:31
唯安an 发表于 2018-10-26 14:34
看惯了寄存器,再看库函数,有点蒙
ADC时钟?
转换采样周期?

人懒了,用库方便。
fantasyo老时光
4楼-- · 2019-07-15 02:34
TOPCB 发表于 2018-10-26 14:51
这个判断是自己写的,还是例程?

抄的原子的。
TOPCB
5楼-- · 2019-07-15 07:42
 精彩回答 2  元偷偷看……
fantasyo老时光
6楼-- · 2019-07-15 08:16
TOPCB 发表于 2018-10-26 15:29
用的是标准库还是HAL?

标准库。还没时间研究HAL。

一周热门 更多>