Vlad_G 6 24 марта, 2020 Опубликовано 24 марта, 2020 (изменено) · Жалоба Всем доброго! stm32f030f4, равно как и r8. Имеем два прерывания: EXTI по изменению уровня на PA6 и прерывание по таймеру tim16. Алгоритм следующий: сначала активно EXTI, tim16 отключен. После срабатывания EXTI в обработчике выключаю прерывание EXTI и включаю tim16. Срабатывает tim16 - в обработчике выключаю tim16 и включаю EXTI. И дальше идет чередование пока есть входной сигнал. Алгоритм не хитрый. tim16 заряжен на 625 мкс (примерно так и есть, по осциллографу в пределах 610 - 640 мкс). Ну и головная боль. Самое первое срабатывание tim16 идет через примерно 1400 мкс и хоть тресни, далее как задумано. И вот эти 1400 микс ни как побороть не удается. Проект приложил, Атоллик 9.3.0. Может чего-то не учел? test_exti.zip Добавлю картинку. Первый курсор - заряжен tim16, второй курсор - где ожидаю срабатывания прерывания (синий вход). TEK00001.BMP Изменено 24 марта, 2020 пользователем Vlad_G Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 24 марта, 2020 Опубликовано 24 марта, 2020 · Жалоба При инициализации таймера (при изменении ARR и PSC) нужно вручную вызвать событие переполнения: TIMx->EGR = TIM_EGR_UG; Только после этого новые значения ARR и PSC будут приняты в работу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad_G 6 24 марта, 2020 Опубликовано 24 марта, 2020 · Жалоба АНТОХА спасибо за мысль. Правда не сработало, но во всяком случае есть в какую сторону двигаться. Где-то не учитываю задержки при старте. TEK00003.BMP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 24 марта, 2020 Опубликовано 24 марта, 2020 · Жалоба Можно ещё счётчик таймера обнулить перед запуском. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad_G 6 25 марта, 2020 Опубликовано 25 марта, 2020 · Жалоба 17 hours ago, AHTOXA said: счётчик таймера обнулить Обнулял я с самого начала. Перекинул на таймеры 14 и 17; также не зависит от времени счета - можно делать 3000 мкс, 6000...; изменять последовательность работы с регистрами; переключение в одно импульсный режим - тоже самое, токо в профиль. Все равно первое прерывание срабатывает через ~1350 мкс. Как-то раньше я такого не замечал, хотя таймеры 16/17 пользую для организации задержек или обновления дисплея. .!. знает... Пока проблему решил ломовым приемом - в инициализации сделал холостой прогон таймера и усё стало на свои места. Но проблема осталась. Где и как вылезет? TEK00004.BMP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 25 марта, 2020 Опубликовано 25 марта, 2020 · Жалоба может порядок инициализации?? Сперва таймер и он срабатывает, потом что-то еще, потом порты - поэтому затянуто. Возможно, что это аппаратное - чтобы возникло прерывание - нужно что-то включить, а это самое включение происходит с задержкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться