Stm32 из-за чего может не сбрасываться внешнее прерывание?
пишу довольно крупноваты проект. мк stm32f103c8. используется почти вся периферия. на каком-то шаге начал замечать что внешнее прерывание по фронту(нужно фиксировать оба) срабатывает без причины(осциллограф не даст соврать). пофиксал это дело костылем(храню предыдущее значение ноги и если ничего не изменилось то пропускаю отработку). но сейчас дошло до того что при прерывание вызывается постоянно пока нога в 3.3 стоит. мк почти все время тратит отработку этого ложного прерывания. логично сказать, что виноват весь остальной код, но как он это может сделать не представляю. может кто-то сталкивался с такой проблемой и нашел "причину невиновности бобины и виновности человека в кабине)"?
P.S. отключение оптимизации не решает проблему.
UPD! выяснилось, что прерывание не может сбросится.
естественно. до этого все работало. но в какой-то момент(с добавлением новых фич завязаных на другой периферии или просто вычислениях) начало подлагивать и теперь доросло до того что если сигнал низкий(или высокий, надо перепроверить) на одной(только одной из трех используемых) линий бесперебойно вызывается обработчик из-за чего остальной код не выполняется. отследил я это с помощью светодиода(т.к. в дебаге быстрые процессы в реальном времени не отследишь) зажигая его при заходе в обработчик.. сидит он там >90% времени. что делать не знаю. откатится до рабочего варианта есть возможность. но уже реализованные фичи мне тоже нужны и думаю что все повторится снова.
Сергей Сахно: да. в этом плане все гладко, скорее всего рядом работающий шим наводит шум, т.к. его отключение спасает ситуацию. хотя как до этого работало, не могу представить. чудеса какие-то происходят
Тимур Хасаншин, та не суть. дело было не в бобине. там фишка оказалась в другом. если в кратце, мастерю foc bldc контроллер. несколько следственных эксперементов дали инфу что виновата схемотехника, в прервыания он залетает синхронно шиму(т.е. срабатывает на шум). вероятно из-за возросшего потрелбления этот эффект начал проявлятся. но вручную удалением кода откатится до рабочего варианта не получилось(сравнивал код с посленим рабочим бекапом, все новое удалил а все равно не работает). по итогу разобрался в режиме захвата таймера и решил задачу на нем. вроде сейчас все гладко работает.