Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: АЦП в STM32F100
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
ELEKTROS
Добрый день, что то с АЦП не ладиться у меня пните в нужном направлении или подскажите что не так?
Код
  RCC->CFGR &= ~RCC_CFGR_ADCPRE;
  RCC->CFGR |= RCC_CFGR_ADCPRE_DIV2;
  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
  ADC1->CR1=ADC_CR1_SCAN|ADC_CR1_JAUTO;
  ADC1->CR2=ADC_CR2_ADON|ADC_CR2_CONT|ADC_CR2_JSWSTART;
  ADC1->SMPR2=ADC_SMPR2_SMP4_1|ADC_SMPR2_SMP5_1;
  ADC1->JSQR=ADC_JSQR_JL_0|ADC_JSQR_JSQ1_2|ADC_JSQR_JSQ2_0|ADC_JSQR_JSQ2_2;
  //// калибровка АЦП ////
  ADC1->CR2 |= ADC_CR2_RSTCAL;
  while ((ADC1->CR2 & ADC_CR2_RSTCAL) == ADC_CR2_RSTCAL);
  ADC1->CR2 |= ADC_CR2_CAL;
  while ((ADC1->CR2 & ADC_CR2_RSTCAL) == ADC_CR2_CAL);
  ADC1->CR2=ADC_CR2_ADON;

Хочу использовать ижекционных канала два 4 и 5-й в непрерывном преобразовании.
потом считываю просто из регистров ADC_JDR1_JDATA и ADC_JDR2_JDATA в любой момент времени. А там постоянно висят единицы.
ELEKTROS
Кто нибудь подскажет? А то месяц был в отпуске не было возможности поиграться.
GYUR22
http://we.easyelectronics.ru/STM32/stm32-i...enie-bryuk.html
немножко по тупому сделал но для начала пойдет
ELEKTROS
Вообщем, видать АЦП не запускается потому что все регистры согласно тому что хочу записаны. Программный запуск, два ижекционных канала. Немного подправил так наверное должно быть, но опять не хочет. Читаю вот отсюда ADC1->JDR1 и ADC1->JDR2.
Код
RCC->CFGR &= ~RCC_CFGR_ADCPRE;
  RCC->CFGR |= RCC_CFGR_ADCPRE_DIV2;
  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
  ADC1->CR1=ADC_CR1_SCAN|ADC_CR1_JAUTO;
  ADC1->CR2=ADC_CR2_EXTSEL | ADC_CR2_JEXTSEL | ADC_CR2_CONT | ADC_CR2_JSWSTART;
  ADC1->SMPR2=ADC_SMPR2_SMP4_1|ADC_SMPR2_SMP5_1;
  ADC1->SQR1=ADC_SQR1_L_0;
  ADC1->SQR3=ADC_SQR3_SQ1_2|ADC_SQR3_SQ2_2|ADC_SQR3_SQ2_0;
  ADC1->JSQR=ADC_JSQR_JL_0|ADC_JSQR_JSQ1_2|ADC_JSQR_JSQ2_0|ADC_JSQR_JSQ2_2;
  //ADC1->CR2 |=ADC_CR2_ADON;
  SETBIT_REG_PERIPH(ADC1->CR2,0);
  ADC1->CR2 |= ADC_CR2_RSTCAL;
  while ((ADC1->CR2 & ADC_CR2_RSTCAL) == ADC_CR2_RSTCAL);
  ADC1->CR2 |= ADC_CR2_CAL;
  while ((ADC1->CR2 & ADC_CR2_RSTCAL) == ADC_CR2_CAL);
ELEKTROS
А такой глупый вопрос ижекционные каналы могут работать без регулярных?
ELEKTROS
Спасибо за "подсказки". Если кому интересно вот так заработало:
Код
RCC->CFGR &= ~RCC_CFGR_ADCPRE;
  RCC->CFGR |= RCC_CFGR_ADCPRE_DIV2;
  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;
  
  ADC1->CR1= ADC_CR1_JDISCEN|ADC_CR1_JAUTO;
  ADC1->CR2= ADC_CR2_EXTSEL | ADC_CR2_JEXTSEL | ADC_CR2_EXTTRIG | ADC_CR2_JEXTTRIG | ADC_CR2_CONT;
  ADC1->SMPR2=ADC_SMPR2_SMP4_1|ADC_SMPR2_SMP5_1;
  ADC1->JSQR=ADC_JSQR_JL_0 | ADC_JSQR_JSQ3_2 | ADC_JSQR_JSQ4_2 | ADC_JSQR_JSQ4_0;
  ADC1->CR2 |=ADC_CR2_ADON;
  ADC1->CR2 |= ADC_CR2_RSTCAL;
  while ((ADC1->CR2 & ADC_CR2_RSTCAL) == ADC_CR2_RSTCAL)
    {
    }
  ADC1->CR2 |= ADC_CR2_CAL;
  while ((ADC1->CR2 & ADC_CR2_RSTCAL) == ADC_CR2_CAL)
    {
    }
  ADC1->CR2 |= ADC_CR2_JSWSTART;

и в основном цикле вот такая строка(хотя можно и через какоето время вызывать):
if((ADC1->CR2 & ADC_CR2_JSWSTART)==0) ADC1->CR2 |= ADC_CR2_JSWSTART;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.