打印
[STM32L0]

STM32L073 AD转换

[复制链接]
1609|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
songxu125400|  楼主 | 2017-5-18 21:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 songxu125400 于 2017-5-18 21:09 编辑

大神们好,我刚接触STM32L0系列芯片,现在搞AD转换,用HAL库,可以正常转换,但是转换时间太长了,效率很低。不知道是我程序有问题还是什么望大神们指点,谢谢。下面是我用库写的
void vInitAdc(void)
{


  AdcHandle.Instance = ADC1;

  AdcHandle.Init.OversamplingMode      = DISABLE;

  AdcHandle.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV1;
  AdcHandle.Init.LowPowerAutoPowerOff  = DISABLE;
  AdcHandle.Init.LowPowerFrequencyMode = ENABLE;
  AdcHandle.Init.LowPowerAutoWait      = DISABLE;

  AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;
  AdcHandle.Init.SamplingTime          = ADC_SAMPLETIME_7CYCLES_5;
  AdcHandle.Init.ScanConvMode          = ADC_SCAN_DIRECTION_FORWARD;
  AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
  AdcHandle.Init.ContinuousConvMode    = DISABLE;//ENABLE;
  AdcHandle.Init.DiscontinuousConvMode = DISABLE;
  AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
  AdcHandle.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;
  AdcHandle.Init.DMAContinuousRequests = DISABLE;

  /* Initialize ADC peripheral according to the passed parameters */
  if (HAL_ADC_Init(&AdcHandle) != HAL_OK)
  {
    ;//Error_Handler();
  }

  /* ### - 2 - Start calibration ############################################ */
  if (HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED) != HAL_OK)
  {
    ;//Error_Handler();
  }
}


unsigned int uiADC_Result(unsigned char ucChannel)
{        
        unsigned char i;
        unsigned int uiMaxResult = 0, uiMinResult = 0xFFFF;
        unsigned int j,uiResult = 0;
      ADC_ChannelConfTypeDef            sConfig;
      ADC1->CHSELR=0;
      ADC1->CHSELR=ucChannel;//sConfig.Channel;
     HAL_ADC_Start(&AdcHandle);

     for (i = 0;i < 6;i++)                  
        {
          HAL_ADC_PollForConversion(&AdcHandle, 10);
          /* Check if the continous conversion of regular channel is finished */
          if ((HAL_ADC_GetState(&AdcHandle) & HAL_ADC_STATE_REG_EOC) == HAL_ADC_STATE_REG_EOC)
          {
                j = HAL_ADC_GetValue(&AdcHandle);        
          }
          if (j > uiMaxResult)
                {
                        uiMaxResult = j;
                }        
                if (j < uiMinResult)
                {
                        uiMinResult = j;
                }        
                uiResult += j;
           }

           uiResult -= uiMaxResult;     
        uiResult -= uiMinResult;              
       uiResult /= 4;   
    return uiResult;
}
沙发
mmuuss586| | 2017-5-18 21:33 | 只看该作者
ADC_SAMPLETIME_7CYCLES_5
这个值这么小,正常应该很快了

使用特权

评论回复
板凳
songxu125400|  楼主 | 2017-5-18 22:03 | 只看该作者
mmuuss586 发表于 2017-5-18 21:33
ADC_SAMPLETIME_7CYCLES_5
这个值这么小,正常应该很快了

就是啊,就是不知道我的其他配置是否是正确的,还有取值函数里是否正确?

使用特权

评论回复
地板
gygp| | 2017-5-19 00:12 | 只看该作者
你的芯片的时钟是多大的

使用特权

评论回复
5
gygp| | 2017-5-19 00:13 | 只看该作者
AdC转换跟你的系统时钟配置有关系。

使用特权

评论回复
6
mmuuss586| | 2017-5-19 08:17 | 只看该作者
songxu125400 发表于 2017-5-18 22:03
就是啊,就是不知道我的其他配置是否是正确的,还有取值函数里是否正确? ...

还有时钟分频函数;

函数是否正确我也不知道,我不用HAL库的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

67

帖子

1

粉丝