Перейти к содержанию
    

Проблема с ADC в STM32F3 Discovery

Здравствуйте!

Пытаюсь запустить АЦП. Согласно пункту 15.3.6 ADC voltage regulator пишу последовательность включения регулятора.

ADVREG enable sequence
To enable the ADC voltage regulator, perform the sequence below:
1. Change ADVREGEN[1:0] bits from ‘10’ (disabled state, reset state) into ‘00’.
2. Change ADVREGEN[1:0] bits from ‘00’ into ‘01’ (enabled state).

 

Получается так...

//ADC voltage regulator enable sequence
	ADC1->CR |= ~(1<<29|1<<28); //ADVREGEN[1:0]:00, Intermediate state
	ADC1->CR |=  (0<<29|1<<28); //ADVREGEN[1:0]:01, ADC voltage regulator enable
	_delay_us(100);

Да не тут то было, в отладчике биты регистра CR другие!

Clip2net_190226224727.png.930ef6b53252822981217c556be19179.png

Нашел в нете, что у stm32l476 например DEEPPWD бит отвечает за Deep-power-down mode. Само собой с таким кодом программа зависает...

Как может быть, что референс не совпадает с реальными регистрами микроконтроллера?

Как всё таки включить регулятор??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, Сёха said:

в отладчике биты регистра CR другие

Есть такая беда с ST'шной периферией.

Они периодически меняют периферию, и писатели отладчиков и прочих периферийных драйверов в этом путаются. Видимо, и тут пропустили отличия и вставили описание от стандартного АЦП.

Слава богу, в документации ошибок таких нет (я не слышал, по крайней мере).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот так работает

    ADC3->CR = (1<<28);   // ADC voltage regulator enable
// delay 10+ uSec
    for(i=360; i; i--);

//    ADC3->CR |= (1<<31);
//    while(ADC3->CR & (1<<31));
//
    ADC3->CR |= (1<<0); // Enable ADC

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, mcheb said:

Вот так работает

// delay 10+ uSec
    for(i=360; i; i--);

... но имеет полное право не работать.

См. волшебное слово волатайл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 часов назад, Сёха сказал:

Как всё таки включить регулятор??

А такты для АЦП настроили и разрешили?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, ViKo сказал:

А такты для АЦП настроили и разрешили?

Там кроме тактов еще бы и время определенное выжидать.

У F3 такого в ES не нашел, но у некоторых (ака F051) ADEN, к примеру, не может быть установлен сразу после калибровки.

У F3 есть многообещающая:

Software is allowed to set ADEN only when all bits of ADC_CR registers are 0 (ADCAL=0,
JADSTART=0, ADSTART=0, ADSTP=0, ADDIS=0 and ADEN=0) except for bit ADVREGEN
which must be 1 (and the software must have wait for the startup time of the voltage regulator)

Боюсь,

for(i=360; i; i--);

- не очень надежное решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

38 minutes ago, adnega said:

Боюсь,

for(i=360; i; i--);

- не очень надежное решение.

Русским языком написано, что работает. Поэтому и

//    ADC3->CR |= (1<<31);
//    while(ADC3->CR & (1<<31));
//

закомментировано

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, mcheb сказал:

Русским языком написано, что работает. Поэтому и

//    ADC3->CR |= (1<<31);
//    while(ADC3->CR & (1<<31));
//

закомментировано

Что ж, когда перестанет работать - обращайтесь - поможем ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, mcheb сказал:

Русским языком написано, что работает. Поэтому и

Если i объявлено без volatile, то хоть на каком языке - не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...