Сёха 0 26 февраля, 2019 Опубликовано 26 февраля, 2019 · Жалоба Здравствуйте! Пытаюсь запустить АЦП. Согласно пункту 15.3.6 ADC voltage regulator пишу последовательность включения регулятора. ADVREG enable sequenceTo 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 другие! Нашел в нете, что у stm32l476 например DEEPPWD бит отвечает за Deep-power-down mode. Само собой с таким кодом программа зависает... Как может быть, что референс не совпадает с реальными регистрами микроконтроллера? Как всё таки включить регулятор?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 26 февраля, 2019 Опубликовано 26 февраля, 2019 · Жалоба В сбросе амперсанд поставьте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 27 февраля, 2019 Опубликовано 27 февраля, 2019 · Жалоба 10 hours ago, Сёха said: в отладчике биты регистра CR другие Есть такая беда с ST'шной периферией. Они периодически меняют периферию, и писатели отладчиков и прочих периферийных драйверов в этом путаются. Видимо, и тут пропустили отличия и вставили описание от стандартного АЦП. Слава богу, в документации ошибок таких нет (я не слышал, по крайней мере). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 27 февраля, 2019 Опубликовано 27 февраля, 2019 · Жалоба Вот так работает 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 27 февраля, 2019 Опубликовано 27 февраля, 2019 · Жалоба 7 minutes ago, mcheb said: Вот так работает // delay 10+ uSec for(i=360; i; i--); ... но имеет полное право не работать. См. волшебное слово волатайл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 27 февраля, 2019 Опубликовано 27 февраля, 2019 · Жалоба 13 часов назад, Сёха сказал: Как всё таки включить регулятор?? А такты для АЦП настроили и разрешили? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 27 февраля, 2019 Опубликовано 27 февраля, 2019 · Жалоба 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--); - не очень надежное решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 27 февраля, 2019 Опубликовано 27 февраля, 2019 · Жалоба 38 minutes ago, adnega said: Боюсь, for(i=360; i; i--); - не очень надежное решение. Русским языком написано, что работает. Поэтому и // ADC3->CR |= (1<<31); // while(ADC3->CR & (1<<31)); // закомментировано Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 27 февраля, 2019 Опубликовано 27 февраля, 2019 · Жалоба Только что, mcheb сказал: Русским языком написано, что работает. Поэтому и // ADC3->CR |= (1<<31); // while(ADC3->CR & (1<<31)); // закомментировано Что ж, когда перестанет работать - обращайтесь - поможем ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 27 февраля, 2019 Опубликовано 27 февраля, 2019 · Жалоба 2 минуты назад, mcheb сказал: Русским языком написано, что работает. Поэтому и Если i объявлено без volatile, то хоть на каком языке - не работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться