sidy 1 21 марта, 2021 Опубликовано 21 марта, 2021 · Жалоба Добрый день. МК stm32f405 Мне необходимо использовать внешнее прерывание по фронту и срезу импульса: EXTI->RTSR|=EXTI_RTSR_TR0; //Прерывание по фронту EXTI->FTSR|=EXTI_FTSR_TR0; //Прерывание по срезу Соответственно по фронту и срезу необходимо выполнять различные действия. Не совсем понятно как корректно проверить в обработчике прерывания по какой причине оно произошло? void EXTI0_IRQHandler (void) { EXTI->PR=EXTI_PR_PR0; //Сбрасываем бит события прерывания EXTI0 if(фронт){}; if(срез) {}; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 34 21 марта, 2021 Опубликовано 21 марта, 2021 · Жалоба Считать состояние сигнала на ноге и определиться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 21 марта, 2021 Опубликовано 21 марта, 2021 · Жалоба 25 minutes ago, x893 said: Считать состояние сигнала на ноге и определиться Читать состояние может быть слишком поздно. Тут либо ногу организовать на функции capture таймера, либо запускать DMA c порта в память. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 22 марта, 2021 Опубликовано 22 марта, 2021 · Жалоба Две ножки использовать. Одну на фронт, другую на срез. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 22 марта, 2021 Опубликовано 22 марта, 2021 · Жалоба 11 часов назад, AlexandrY сказал: Читать состояние может быть слишком поздно. "Поздно" для чего? Для анализа в ISR программным кодом, чтение состояния через GPIO (как описано в первом ответе) - вполне достаточно. Чтение и сравнение с предыдущим запомненным событием. Если конечно в регистрах состояния нет соотв. флагов.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 22 марта, 2021 Опубликовано 22 марта, 2021 · Жалоба 10 minutes ago, jcxz said: "Поздно" для чего? Для анализа в ISR программным кодом, чтение состояния через GPIO (как описано в первом ответе) - вполне достаточно. Чтение и сравнение с предыдущим запомненным событием. Если конечно в регистрах состояния нет соотв. флагов.... А если это прерывание имеет низший приоритет и, например, до него еще 10 прерываний обработалось. И к этому времени импульс уже завершился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 22 марта, 2021 Опубликовано 22 марта, 2021 · Жалоба 1 минуту назад, dimka76 сказал: И к этому времени импульс уже завершился. И что? Прерывание же произошло? Значит что-то менялось. Если текущее считанное совпадает с последним запомненным - значит был и фронт и спад - значит выполняем обе ветки: и для того и для другого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться