STM32F030 ADC

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

STM32F030 ADC

Сообщение servmv »

Народ помогите разобраться с АЦП, я с этой проблемой сталкиваюсь регулярно в разных проектах.

Проблема в сканирование нескольких каналов, не могу разобраться как реализовать.
Проблема в том что ацп сканирует только с одного входа.

Проект в кубе:
СпойлерИзображение
пишу в Keil
в 103 использовал пере инициализацию

Код: Выделить всё

static void MX_ADC1_ReInit(uint32_t ADC_CHANNEL){
  ADC_ChannelConfTypeDef sConfig;
  sConfig.Channel = ADC_CHANNEL;
  sConfig.Rank = 1;
  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
	if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
}
в 030 не работает
юзал так:

Код: Выделить всё

    MX_ADC1_ReInit(ADC_CHANNEL_0);
    HAL_ADC_Start(&hadc);
    HAL_ADC_PollForConversion(&hadc,100);
    ADC_Data0 = (uint32_t) HAL_ADC_GetValue(&hadc);
    HAL_ADC_Stop(&hadc);
		
    MX_ADC1_ReInit(ADC_CHANNEL_1);
    HAL_ADC_Start(&hadc);
    HAL_ADC_PollForConversion(&hadc,100);
    ADC_Data1 = (uint32_t) HAL_ADC_GetValue(&hadc);
    HAL_ADC_Stop(&hadc);
		
   MX_ADC1_ReInit(ADC_CHANNEL_2);
   HAL_ADC_Start(&hadc);
   HAL_ADC_PollForConversion(&hadc,100);
   ADC_Data2 = (uint32_t) HAL_ADC_GetValue(&hadc);
   HAL_ADC_Stop(&hadc);
Код инициализации ADC
Спойлер

Код: Выделить всё

static void MX_ADC_Init(void)
{

  /* USER CODE BEGIN ADC_Init 0 */

  /* USER CODE END ADC_Init 0 */

  ADC_ChannelConfTypeDef sConfig = {0};

  /* USER CODE BEGIN ADC_Init 1 */

  /* USER CODE END ADC_Init 1 */
  /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  */
  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();
  }
  /** Configure for the selected ADC regular channel to be converted.
  */
  sConfig.Channel = ADC_CHANNEL_0;
  sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;
  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure for the selected ADC regular channel to be converted.
  */
  sConfig.Channel = ADC_CHANNEL_1;
  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /** Configure for the selected ADC regular channel to be converted.
  */
  sConfig.Channel = ADC_CHANNEL_2;
  if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN ADC_Init 2 */

  /* USER CODE END ADC_Init 2 */

}


Где использую
СпойлерИзображение
Изображение
Реклама
Аватара пользователя
es131245
Потрогал лапой паяльник
Сообщения: 369
Зарегистрирован: Пт фев 01, 2013 21:05:30

Re: STM32F030 ADC

Сообщение es131245 »

Когда тестил это дело (если правильно всё помню) continious всегда должны быть enabled.
Если что есть лекции на YT, всегда можно подсмотреть.
Реклама
Ответить

Вернуться в «ARM»