24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна.
Подробности случившегося. Мы призываем всех неравнодушных
помочь нам с восстановлением утраченного контента!
На микроконтроллере STM32F303VCT6 запустил прерывания по завершению преобразования АЦП (End of conversion of a regular group) выстави соответствующие биты EOC. Но когда увеличиваю значение sampling time больше 2 (010 в двоичном), то прерывания перестают происходить. АЛУ при этом нормально работает, взаимодействует с портами (для проверки кнопкой зажигаю светодиод, а при отжатой кнопки светодиод мигает от прерываний)
Как и почему sampling time отключает прерывания?
Код настройки АЦП:
NVIC->ISER[0] = (1 << ((uint32_t)(18)));////установить прерывание 18, под которым АЦП
ADC1->CR = ADC_CR_ADVREGEN_0; // напряжение
ADC1->IER |= ADC_IER_EOCIE; // прерывание по готовности
ADC1->CFGR |= ADC_CFGR_CONT; // непрерывный режим
ADC1->SQR1 |= ADC_SQR1_SQ1_0; // канал 1
ADC1->SMPR1 |= ADC_SMPR1_SMP1_1;// Вот тут не работает при больших sampling time
ADC12_COMMON->CCR |= ADC12_CCR_VBATEN | ADC12_CCR_TSEN | ADC12_CCR_VREFEN | ADC12_CCR_CKMODE_0 | ADC12_CCR_CKMODE_1; // включения дополнений и предделитель 4
ADC1->CR = ADC_CR_ADVREGEN_0 | ADC_CR_ADEN; // включение
ADC1->ISR = ADC_ISR_EOC; // сбросить бит прерывания по готовности
ADC1->CR = ADC_CR_ADVREGEN_0 | ADC_CR_ADEN | ADC_CR_ADSTART; // пуск