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

STM32H7_ADC

Гость do_not_know_Linux

привет...  подскажите кто знает. пытаюсь поднять флаг в  регистре

ADC_ISR
ADRDY

но ADRDY==0, что указывает на то что  не готово к началу преобразования. 

хотя этот  флаг должен был установиться  когда я включил ADC.

This bit is set by hardware after the ADC has been enabled (bit ADEN=1)

ADC я включил, канал выбрал, но флаг не устанавливается.  подскажите что сделать чтобы флаг установился

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


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

Гость do_not_know_Linux

щас у нас что, уважаемый форум? мы не хотим? мы обижены? или мы не знаем?

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


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

Ты хоть бы писал, что за камень. Пришлось по мануалам рыскать...

Тактирование точно не забыл включить? Там ведь нужно еще и HSI14 запустить! Если ты не хочешь читать даташит вдумчиво, то пользуйся сниппетами от ST.

static inline void adc_setup(){
    uint16_t ctr = 0; // 0xfff0 - more than 1.3ms
    // Enable clocking
    /* (1) Enable the peripheral clock of the ADC */
    /* (2) Start HSI14 RC oscillator */
    /* (3) Wait HSI14 is ready */
    RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; /* (1) */
    RCC->CR2 |= RCC_CR2_HSI14ON; /* (2) */
    while ((RCC->CR2 & RCC_CR2_HSI14RDY) == 0 && ++ctr < 0xfff0){}; /* (3) */
    // calibration
    /* (1) Ensure that ADEN = 0 */
    /* (2) Clear ADEN */
    /* (3) Launch the calibration by setting ADCAL */
    /* (4) Wait until ADCAL=0 */
    if ((ADC1->CR & ADC_CR_ADEN) != 0){ /* (1) */
        ADC1->CR &= (uint32_t)(~ADC_CR_ADEN);  /* (2) */
    }
    ADC1->CR |= ADC_CR_ADCAL; /* (3) */
    ctr = 0; // ADC calibration time is 5.9us
    while ((ADC1->CR & ADC_CR_ADCAL) != 0 && ++ctr < 0xfff0){}; /* (4) */
    // enable ADC
    ctr = 0;
    do{
          ADC1->CR |= ADC_CR_ADEN;
    }while ((ADC1->ISR & ADC_ISR_ADRDY) == 0 && ++ctr < 0xfff0);
.....
	
Изменено пользователем Eddy_Em

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


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

Тьфу, в заголовке же H7 указан =D

Проблема ТС в том, что он, не осилив простейших F0, полез во всякие дебри! То у него с DMA косяки, то еще что!..

Вот почему бы для начала не научиться работать с простейшими МК из семейства STM32? Без SPL и подобной дряни.

Изменено пользователем Eddy_Em

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


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

Гость do_not_know_Linux
On 5/5/2022 at 7:19 PM, Eddy_Em said:

Ты хоть бы писал, что за камень. Пришлось по мануалам рыскать...

Тактирование точно не забыл включить? Там ведь нужно еще и HSI14 запустить! Если ты не хочешь читать даташит вдумчиво, то пользуйся сниппетами от ST.


static inline void adc_setup(){
    uint16_t ctr = 0; // 0xfff0 - more than 1.3ms
    // Enable clocking
    /* (1) Enable the peripheral clock of the ADC */
    /* (2) Start HSI14 RC oscillator */
    /* (3) Wait HSI14 is ready */
    RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; /* (1) */
    RCC->CR2 |= RCC_CR2_HSI14ON; /* (2) */
    while ((RCC->CR2 & RCC_CR2_HSI14RDY) == 0 && ++ctr < 0xfff0){}; /* (3) */
    // calibration
    /* (1) Ensure that ADEN = 0 */
    /* (2) Clear ADEN */
    /* (3) Launch the calibration by setting ADCAL */
    /* (4) Wait until ADCAL=0 */
    if ((ADC1->CR & ADC_CR_ADEN) != 0){ /* (1) */
        ADC1->CR &= (uint32_t)(~ADC_CR_ADEN);  /* (2) */
    }
    ADC1->CR |= ADC_CR_ADCAL; /* (3) */
    ctr = 0; // ADC calibration time is 5.9us
    while ((ADC1->CR & ADC_CR_ADCAL) != 0 && ++ctr < 0xfff0){}; /* (4) */
    // enable ADC
    ctr = 0;
    do{
          ADC1->CR |= ADC_CR_ADEN;
    }while ((ADC1->ISR & ADC_ISR_ADRDY) == 0 && ++ctr < 0xfff0);
.....
	
 

спасибки огромное, но там проблема была вдругом.  то что хотел-сделал. криво конечно, но для начала пойдет. конечно же вопросы появятся, когда полезу глубже, но пока к ADC возвращаться нескоро.

On 5/5/2022 at 7:36 PM, aaarrr said:

И охота кормить?

вы непрвы. причем очень.

раньше ответить не мог, был немного забанен любимыми модераторами.  но через куб я бы не смог. это серьезный инструмент для серьезных людей. пользоваться кубом, это как управлять, наверное, инопланетной космической тарелкой. 

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


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

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

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

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

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

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

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

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

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

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