реклама на сайте
подробности

 
 
> АЦП в STM32F100, не работает
ELEKTROS
сообщение Jul 27 2011, 17:43
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 29-06-11
Пользователь №: 65 952



Добрый день, что то с АЦП не ладиться у меня пните в нужном направлении или подскажите что не так?
Код
  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 в любой момент времени. А там постоянно висят единицы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ELEKTROS
сообщение Sep 12 2011, 12:03
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 29-06-11
Пользователь №: 65 952



Спасибо за "подсказки". Если кому интересно вот так заработало:
Код
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;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 01:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01433 секунд с 7
ELECTRONIX ©2004-2016