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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版