你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F0 ADC多通道单次转换,最后一个通道的EOC不置位

[复制链接]
shaodong-350471 提问时间:2019-12-31 13:48 /
STM32F030 ADC采样序列中包括IN0,IN1,IN2三个通道,采用单次转换模式,软件触发启动,但是发现采样转换到最后一个通道IN2时,EOC不会置位,程序进入超时状态。有哪位朋友碰到过此问题?主要代码如下:

uint16_t  ADCValue[3;
void MX_ADC_Init(void)
{  
  ADC_ChannelConfTypeDef sConfig;  
  hadc.Instance = ADC1;  
  hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;  
  hadc.Init.Resolution = ADC_RESOLUTION_12B;  
  hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;  
  hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;  
  hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;  
  hadc.Init.LowPowerAutoWait = DISABLE;  
  hadc.Init.LowPowerAutoPowerOff = DISABLE;  
  hadc.Init.ContinuousConvMode = DISABLE;  
  hadc.Init.DiscontinuousConvMode = DISABLE;  
  hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;  
  hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;  
  hadc.Init.DMAContinuousRequests = DISABLE;  
  hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;  
  if (HAL_ADC_Init(&hadc) != HAL_OK)  
  {   
    _Error_Handler(__FILE__, __LINE__);  
  }  

  sConfig.Channel = ADC_CHANNEL_0;  
  sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;  
  sConfig.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;  
  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)  
  {
    _Error_Handler(__FILE__, __LINE__);  
  }  

  sConfig.Channel = ADC_CHANNEL_1;  
  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)  
  {
    _Error_Handler(__FILE__, __LINE__);  
  }  

  sConfig.Channel = ADC_CHANNEL_2;  
  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)  
  {
    _Error_Handler(__FILE__, __LINE__);  
  }
}

void Get_ADCVal(void)
{  
  uint8_t  i;

  if (HAL_ADC_Start(&hadc) != HAL_OK)  
  {   
    _Error_Handler(__FILE__, __LINE__);  
  }  

  for ( i=0;  i<3;  i++ )   
  {   
    if (HAL_ADC_PollForConversion(&hadc, 20) != HAL_OK)   
       _Error_Handler(__FILE__, __LINE__);   // ********** 当 i 递增到2时,程序执行死在这里!!!!!!!!!!   
    else   
      ADCValue[i = HAL_ADC_GetValue(&hadc);   
  }
    // HAL_ADC_Stop(&hadc);
}







收藏 评论1 发布时间:2019-12-31 13:48

举报

1个回答
butterflyspring 回答时间:2020-2-24 12:09:03
看起来ADC的转换模式是单次的,所以第二次的转换是没有启动,也就没有EOC。 把ADC的启动放到FOR 循环里就正确了
STM32030 TEST EOC.PNG
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版