Гость do_not_know_Linux 5 мая, 2022 Опубликовано 5 мая, 2022 · Жалоба привет... подскажите кто знает. пытаюсь поднять флаг в регистре 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 5 мая, 2022 Опубликовано 5 мая, 2022 · Жалоба щас у нас что, уважаемый форум? мы не хотим? мы обижены? или мы не знаем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 5 мая, 2022 Опубликовано 5 мая, 2022 (изменено) · Жалоба Ты хоть бы писал, что за камень. Пришлось по мануалам рыскать... Тактирование точно не забыл включить? Там ведь нужно еще и 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); ..... Изменено 5 мая, 2022 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 5 мая, 2022 Опубликовано 5 мая, 2022 · Жалоба 15 minutes ago, Eddy_Em said: Пришлось по мануалам рыскать... И охота кормить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 5 мая, 2022 Опубликовано 5 мая, 2022 (изменено) · Жалоба Тьфу, в заголовке же H7 указан =D Проблема ТС в том, что он, не осилив простейших F0, полез во всякие дебри! То у него с DMA косяки, то еще что!.. Вот почему бы для начала не научиться работать с простейшими МК из семейства STM32? Без SPL и подобной дряни. Изменено 5 мая, 2022 пользователем Eddy_Em Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ozone 2 6 мая, 2022 Опубликовано 6 мая, 2022 · Жалоба О май гад, ну неужели нельзя это всё сделать через куб и не париться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 27 мая, 2022 Опубликовано 27 мая, 2022 · Жалоба 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: И охота кормить? вы непрвы. причем очень. раньше ответить не мог, был немного забанен любимыми модераторами. но через куб я бы не смог. это серьезный инструмент для серьезных людей. пользоваться кубом, это как управлять, наверное, инопланетной космической тарелкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться