Заголовок сообщения: Re: STM32L-DISCOVERY - проблема с АЦП
Добавлено: Ср ноя 09, 2011 09:55:11
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
Проверь, меняются ли вобще регистры настройки ADC, что ты выставляешь или нет. Вобще, сначала надо подкать клок и убрать резет с переферии, а потом уже с ним работать. У тебя наоборот. Если не поможет - то далее проверять, все ли и правильные регистры поставил.
Но при этом в SR - все нули и ADONS все равно не ставится.... Проверял все регистры - все путем. Может быть еще что-то? не так поставил? или порядок не тот? или что упустил?
Заголовок сообщения: Re: STM32L-DISCOVERY - проблема с АЦП
Добавлено: Ср ноя 09, 2011 15:09:12
Друг Кота
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
Это глянь. download/file.php?id=81574 использую cmsis и periph. lib под STM32, что идет с IARом. там, впринципе, функции крошечные, только из структур в регистры ставят, быстро скомпонуешь.
vadim_ova, сначала включается тактирование нужного модуля, потом делаются настройки, иначе все регистры будут сброшены. Это ко всей перефирии относится.
Заголовок сообщения: Re: STM32L-DISCOVERY - проблема с АЦП
Добавлено: Ср ноя 09, 2011 19:15:35
Открыл глаза
Зарегистрирован: Пт мар 26, 2010 03:46:57 Сообщений: 43 Откуда: Томск
Рейтинг сообщения:0
Satyr писал(а):
Это глянь. download/file.php?id=81574 использую cmsis и periph. lib под STM32, что идет с IARом. там, впринципе, функции крошечные, только из структур в регистры ставят, быстро скомпонуешь.
Это по крайней мере работает, включая каллибрацию
на моем проце нет регистра, касающегося калибровки вообще)))) ну это не важно, остальное очень схоже.
Но выставляется бит RCNR - то есть, не готовы каналы. как я понял:
Цитата:
RCNR: Regular channel not ready This bit is set and cleared by hardware after one of the SQRx register is written or after the OVR bit is cleared. It indicates if a new regular conversion can be launched (by setting the SWSTART bit). 0: Regular channel ready 1: Regular channel not ready, SWSTART must not be set
что менять-то нужно?
у меня же нулевой канал и преобразование всего одно в очереди - значит, SQR0 должен нулям равняться - что и показывает отладка.
Как тогда быть? может быть, он требует настройки свойств таких как режим преобразования (непрерывный и т.д.) и тому подобных? этого я не успел сделать еще.
Заголовок сообщения: Re: STM32L-DISCOVERY - проблема с АЦП
Добавлено: Ср ноя 09, 2011 19:17:59
Открыл глаза
Зарегистрирован: Пт мар 26, 2010 03:46:57 Сообщений: 43 Откуда: Томск
Рейтинг сообщения:0
GRAF писал(а):
vadim_ova, сначала включается тактирование нужного модуля, потом делаются настройки, иначе все регистры будут сброшены. Это ко всей перефирии относится.
спасибо! звучит очень логично, так и поступил. тоже, правда, не помогло.
/* Wait until the ADC1 is ready */ while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == SET);
ADC_ContinuousModeCmd(ADC1, ENABLE);
// start conversion //ADC_Cmd (ADC1,ENABLE); //enable ADC1 ADC_SoftwareStartConv(ADC1); // start conversion (will be endless as we are in continuous mode) ... int bf; bf = ADC_GetConversionValue(ADC1);
Нашел ответ. Не был выбран источник тактового, и, как следствие, тактирование шло от MSI. АЦП по какой то причине не хотел с этим мириться. Я не знаю по какой причине. Ничего в REFERENCE MANUAL и в ERRATA не нашел( По диаграмме тактирования такты должны доходить.
Добавление строчек помогло.
Код:
/* Enable HSI Clock */ RCC_HSICmd(ENABLE); /*!< Wait till HSI is ready */ while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET) {} RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
И в ожидании готовности у меня ошибка была
Код:
/* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE);
/* Wait until ADC1 ON status */ while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET);
Заголовок сообщения: Re: STM32L-DISCOVERY - проблема с АЦП
Добавлено: Пн июн 04, 2012 17:01:46
Открыл глаза
Зарегистрирован: Пт мар 26, 2010 03:46:57 Сообщений: 43 Откуда: Томск
Рейтинг сообщения:0
Delfer писал(а):
Нашел ответ. Не был выбран источник тактового, и, как следствие, тактирование шло от MSI. АЦП по какой то причине не хотел с этим мириться. Я не знаю по какой причине. Ничего в REFERENCE MANUAL и в ERRATA не нашел( По диаграмме тактирования такты должны доходить.
Добавление строчек помогло.
Код:
/* Enable HSI Clock */ RCC_HSICmd(ENABLE); /*!< Wait till HSI is ready */ while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET) {} RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
И в ожидании готовности у меня ошибка была
Код:
/* Enable ADC1 */ ADC_Cmd(ADC1, ENABLE);
/* Wait until ADC1 ON status */ while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET);
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения