打印
[STM32L0]

关于STM32L052采样AD中断遇到奇怪问题

[复制链接]
1581|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
自民|  楼主 | 2016-1-30 09:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前天STM32L052采样AD双通道切换问题,解决。
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{
  /* Get the converted value of regular channel */
  
  uwADCxConvertedValue = HAL_ADC_GetValue(AdcHandle);
  
  HAL_ADC_Stop_IT(&hadc);
        if(CH_dp==0)
        {
                CH_dp=1;
                ADC1->CHSELR = ADC_CHANNEL_2;
        }
        else
        {
                CH_dp=0;
                ADC1->CHSELR = ADC_CHANNEL_7;                                
        }
                        
        HAL_ADC_Start_IT(&hadc);
        
UART_Transmit_IT(&huart1, (uint8_t*)uwADCxConvertedValue, 4);
}

但我发现把UART_Transmit_IT(&huart1, (uint8_t*)uwADCxConvertedValue, 4);屏蔽掉就进不了AD中断
我程序,只用到AD、串口、TIM21中断,不可能出现死循环。

沙发
自民|  楼主 | 2016-1-30 09:25 | 只看该作者
/* ADC init function */
void MX_ADC_Init(void)
{
  ADC_ChannelConfTypeDef sConfig;
   
  hadc.Instance = ADC1;

  hadc.Init.OversamplingMode = ENABLE;
  hadc.Init.Oversample.Ratio = ADC_OVERSAMPLING_RATIO_128;
  hadc.Init.Oversample.RightBitShift = ADC_RIGHTBITSHIFT_3;
  hadc.Init.Oversample.TriggeredMode = ADC_TRIGGEREDMODE_SINGLE_TRIGGER;
  
  hadc.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV1;
  hadc.Init.Resolution = ADC_RESOLUTION12b;
  hadc.Init.SamplingTime = ADC_SAMPLETIME_7CYCLES_5;
  hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;
  hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc.Init.ContinuousConvMode = ENABLE;
  hadc.Init.DiscontinuousConvMode = DISABLE;
  hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIG_EDGE_NONE;
  hadc.Init.DMAContinuousRequests = DISABLE;
  hadc.Init.EOCSelection = EOC_SINGLE_CONV;
  hadc.Init.Overrun = OVR_DATA_PRESERVED;
  hadc.Init.LowPowerAutoWait = DISABLE;
  hadc.Init.LowPowerFrequencyMode = ENABLE;
  hadc.Init.LowPowerAutoPowerOff = DISABLE;
  HAL_ADC_Init(&hadc);

    /* USER CODE BEGIN 7 */
  if (HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE END 7 */
    /**Configure for the selected ADC regular channel to be converted.
    */
  sConfig.Channel = ADC_CHANNEL_7;
  sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
  HAL_ADC_ConfigChannel(&hadc, &sConfig);
}

使用特权

评论回复
板凳
Thethree| | 2016-1-30 20:10 | 只看该作者
中断函数是怎么写的啊

使用特权

评论回复
地板
自民|  楼主 | 2016-2-18 08:08 | 只看该作者
问题解决,谢谢
原因不使用volatile修饰

使用特权

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

本版积分规则

47

主题

195

帖子

2

粉丝