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

stm32f373 ADC_initialization

Доброго времени!
Изучаю adc на stm32. 
Пишу инициализацию опираясь на referense manual и его регистры
Получил некоторую функцию инициализации.
После отсутствия результата в регистре DR сравнил написанное со статьями из нэта. В принципе, у меня получилось также.
Но вот всё равно не работает. 

Целю данного кода: Настроить АЦП на PC0 и произвести с него измерение.
 

void Init_ADC (void){

	/*
	 * PC0 - ADC_IN10 - 12V
	 */

	/*
	 * Изночально APB2 тактируется на 32МГц. Нужно понизить до приемлемой частоты
	 */


	RCC -> AHBENR |= RCC_AHBENR_GPIOCEN; // тиктирование порта С
	GPIOC -> MODER |= GPIO_MODER_MODER0_1 | GPIO_MODER_MODER0_0; // PC0 = 11: Analog mode




	RCC -> APB2ENR |= RCC_APB2ENR_ADC1EN; // тактирование АЦП

	// Предделитель ADC
	RCC -> CFGR |= RCC_CFGR_ADCPRE_1 | RCC_CFGR_ADCPRE_0; // 32/8=4MHz




	// SQR1_L = 0 - измерение только одной ячейки
	ADC1 -> SQR3 |= ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1; // в первую ячейку будет производится измерение с 10 канала

	ADC1 -> CR2 |= ADC_CR2_ADON; // включение АЦП

	ADC1->CR2 |= ADC_CR2_SWSTART; // запуск АЦП
	while(!(ADC1->SR & ADC_SR_EOC)) ; // ожидание завершения преобразования

}

Отладчик зависает на ожидании флага окончания преобразования - флаг не выставляется

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


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

А посмотреть примеры и код от гуру программирования из Индии религия не позволяет ?

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


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

7 минут назад, x893 сказал:

А посмотреть примеры и код от гуру программирования из Индии религия не позволяет ?

а не умничать подсказать слабо?

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


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

1 час назад, nickson.b.k сказал:

ADC1->CR2 |= ADC_CR2_SWSTART; // запуск АЦП

image.thumb.png.fa6a70089edb5fe40937c1057b3f1a4c.png

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


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

1 час назад, Сергей Борщ сказал:

image.thumb.png.fa6a70089edb5fe40937c1057b3f1a4c.png

ПОМОГЛО!!!
Большое спасибо за путь истинный)))
По мимо выбора триггера, нужно было включить EXTTRIG. Без него не работало. Хотя это странно. 
Итог:
 

void Init_ADC (void){

	/*
	 * PC0 - ADC_IN10 - 12V
	 */

	/*
	 * Изночально APB2 тактируется на 32МГц. Нужно понизить до приемлемой частоты
	 */


	RCC -> AHBENR |= RCC_AHBENR_GPIOCEN; // тиктирование порта С
	GPIOC -> MODER |= GPIO_MODER_MODER0_1 | GPIO_MODER_MODER0_0; // PC0 = 11: Analog mode




	RCC -> APB2ENR |= RCC_APB2ENR_ADC1EN; // тактирование АЦП
	// Предделитель ADC
	RCC -> CFGR |= RCC_CFGR_ADCPRE_1 | RCC_CFGR_ADCPRE_0; // 32/8=4MHz


	ADC1 -> CR2 |= ADC_CR2_ADON; // включение АЦП

	// SQR1_L = 0 - измерение только одной ячейки
	ADC1 -> SQR3 |= ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1; // в первую ячейку будет производится измерение с 10 канала


	ADC1 -> CR2 |= ADC_CR2_EXTTRIG; // включение преобразования по внешнему событию
	ADC1 -> CR2 |= ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0; // выбор источника триггера 111: SWSTART
	ADC1 -> CR2 |= ADC_CR2_SWSTART; // запуск АЦП
	
	while(!(ADC1->SR & ADC_SR_EOC)) ; // ожидание завершения преобразования





}

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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