Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F100 Непроизвольное срабатывание прерывания
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
Baser
Цитата(ISF @ May 9 2017, 11:30) *
При любом касании ножки PA0 металлическим пинцетом или щупом мультиметра происходит прерывание. Ничего подобного на других МК мною раньше не наблюдалось.
....
Тот же AVR на такое никогда не реагировал. И как в таком случае мерить потенциал на ножке если любое касание её даже щупом тестера вызывает подобные эффекты?

Удивительные вещи вы пишете, в том плане, что такого раньше не наблюдали.
А я вот обратного никогда не наблюдал. cranky.gif

Если коснуться металлическим пинцетом (если он еще и не изолированный, и в руке, то еще похлеще будет) высокоомной ножки МК, там помеха будет в десятки вольт. Ограничена будет только входными защитными диодами МК. И на осциллографе это тоже прекрасно видно.

Тестером измерять можно, но помеху при касании никто не отменит и прерывание все равно произойдет.

Вы бы еще начали касаться контактов кварцевого генератора и удивляться, что программа улетает неизвестно куда...
rudy_b
Вы все про высокое, а причина может быть намного проще - и в SPL и в HAL до сих пор есть элементарная ошибка - при совместном использовании ног порта могут менятся "не свои" пины. Например функция установки бита может быть прописана как GPIOx->ODR |= 0b0001000... т.е. последовательность - чтение, модификация, запись. Если при этом будет прерывание и в нем будет изменен другой бит - произойдет ошибка - восстановится его старое значение. Для предотвращения этого нужно использовать либо запрет прерываний, либо специальный регистр BSRR, сделанный специально для того, чтобы сделать операции установки/сброса бит атомарными.

В последних версиях SPL и HAL установка и сброс бита уже сделаны правильно (через BSRR), а вот операция toggle - по прежнему GPIOx->ODR ^= ...

Проверьте весь код на наличие работы с отдельными битами GPIO не через BSRR.

Понятно, что EXTI работает не с ODR, а с IDR, но точной реализации харда GPIO нет, так что стоит проверить, мало-ли что.
ISF
Цитата(Baser @ May 9 2017, 13:26) *
Удивительные вещи вы пишете, в том плане, что такого раньше не наблюдали.
А я вот обратного никогда не наблюдал. cranky.gif

Если коснуться металлическим пинцетом (если он еще и не изолированный, и в руке, то еще похлеще будет) высокоомной ножки МК, там помеха будет в десятки вольт. Ограничена будет только входными защитными диодами МК. И на осциллографе это тоже прекрасно видно.

Тестером измерять можно, но помеху при касании никто не отменит и прерывание все равно произойдет.

Вы бы еще начали касаться контактов кварцевого генератора и удивляться, что программа улетает неизвестно куда...


Почему же тогда на моей отладочной плате с ATmega16A подобных приколов с прерываниями нет и в помине. Касаюсь я щупом или пинцетом или нет всё работает устойчиво и чётко. К тому же я уже раз 5 повторил что ножка никакая не высокоомная - она ПОДЯТНУТА к питанию или земле через резистор. При поиске решения я испытывал даже 100 Ом в качестве подтягивающего резистора и эффект ничуть меньше не становился.

К тому же я уже писал что подобную проблему на STM32 наблюдали и раньше, но тогда всё списали на плохую разводку и на этом всё и заглохло

http://forum.easyelectronics.ru/viewtopic....76&start=50

Крутаните до 3 страницы (последнее сообщение) - там человек описывает ровно туже проблему

Цитата(rudy_b @ May 9 2017, 13:45) *
Вы все про высокое, а причина может быть намного проще - и в SPL и в HAL до сих пор есть элементарная ошибка - при совместном использовании ног порта могут менятся "не свои" пины. Например функция установки бита может быть прописана как GPIOx->ODR |= 0b0001000... т.е. последовательность - чтение, модификация, запись. Если при этом будет прерывание и в нем будет изменен другой бит - произойдет ошибка - восстановится его старое значение. Для предотвращения этого нужно использовать либо запрет прерываний, либо специальный регистр BSRR, сделанный специально для того, чтобы сделать операции установки/сброса бит атомарными.

В последних версиях SPL и HAL установка и сброс бита уже сделаны правильно (через BSRR), а вот операция toggle - по прежнему GPIOx->ODR ^= ...

Проверьте весь код на наличие работы с отдельными битами GPIO не через BSRR.

Понятно, что EXTI работает не с ODR, а с IDR, но точной реализации харда GPIO нет, так что стоит проверить, мало-ли что.


Спасибо за совет. Нужно будет внимательно проверить. Версия CooCox у меня далеко не новая. Возможно библиотеки действительно с багами. Хотя я пробовал инициализацию через прямой доступ к регистрам и это не дало положительного результата..
amiller
По моему STM ведёт себя абсолютно правильно. Фронт есть - прерывание должно быть.
Вообще кнопки и прерывания по входу - вещи плохо сочетаемые. В реальных условиях (при наличии помех) гарантируются случайные срабатывания.
Правильно будет - опрашивать с определенной частотой. И если из 100 опросов больше 50 единиц, значит кнопка нажата.
И посмотрите на наличие на плате конденсатора C22. Похоже его нет. Если поставить примерно 100n, то в Вашем случае должно помочь.
ISF
Цитата(amiller @ May 9 2017, 14:20) *
По моему STM ведёт себя абсолютно правильно. Фронт есть - прерывание должно быть.
Вообще кнопки и прерывания по входу - вещи плохо сочетаемые. В реальных условиях (при наличии помех) гарантируются случайные срабатывания.
Правильно будет - опрашивать с определенной частотой. И если из 100 опросов больше 50 единиц, значит кнопка нажата.
И посмотрите на наличие на плате конденсатора C22. Похоже его нет. Если поставить примерно 100n, то в Вашем случае должно помочь.


Согласен что кнопка и прерывание = неудачное решение, но тут даже до нажатия кнопки дело не доходит. Достаточно просто коснуться вывода PA0 щупом тестера для замера напряжения и БАЦ!, получите прерывание. Я бы ещё понял если бы вывод болтался без подтяжки в воздухе и я его касался проводником - тут уж без вариантов будет многократное срабатывание прерывания от наводок, емкости щупов и т.п. Но почему себя так ведёт полностью обвязанный и прикрытый от всех случайностей вывод мне совершенно неясно (

Конденсатора C22 на плате нет, но я специально проверял на выводе PA1 схему с внешней подтяжкой и полной RC цепью - результат отрицательный, лучше не становиться. Вот проверенные мною варианты. Подтягивающий резистор менял от 100 Ом до 10к

Baser
Цитата(ISF @ May 9 2017, 16:19) *
К тому же я уже писал что подобную проблему на STM32 наблюдали и раньше, но тогда всё списали на плохую разводку и на этом всё и заглохло
...
Крутаните до 3 страницы (последнее сообщение) - там человек описывает ровно туже проблему

Просмотрел по диагонали предыдущие страницы - не обнаружил той же проблемы. Человек жаловался на самопроизвольное возникновение прерываний. В его случае причин может быть много, о чем и была дельная дискуссия.

В вашем же случае, вы сами касаетесь пинцетом ножки и удивляетесь, почему возникает прерывание. Это же тест на электростатический разряд "Human Body Model" (HBM), там киловольты могут быть. Не выбивает ножку МК - и хорошо, производитель ничего больше и не обещал.

Цитата
Почему же тогда на моей отладочной плате с ATmega16A подобных приколов с прерываниями нет и в помине. Касаюсь я щупом или пинцетом или нет всё работает устойчиво и чётко.

возможно:
- питание 5В
- частота низкая, аппаратная выборка ножки редкая + аппаратный фильтр
- была программная обработка дребезга в прерывании, когда в прерывание попадаете, но действия не происходит из-за фильтрации
- какие-нибудь еще нюансы забыли, как все делали...

Цитата(ISF @ May 9 2017, 16:59) *
Достаточно просто коснуться вывода PA0 щупом тестера для замера напряжения и БАЦ!, получите прерывание. Я бы ещё понял если бы вывод болтался без подтяжки в воздухе и я его касался проводником - тут уж без вариантов будет многократное срабатывание прерывания от наводок, емкости щупов и т.п. Но почему себя так ведёт полностью обвязанный и прикрытый от всех случайностей вывод мне совершенно неясно (

"полностью обвязанный и прикрытый от всех случайностей вывод" - это когда вы касаетесь пинцетом перед защитой, где кнопка подключена.
Когда вы касаетесь прямо на ножку, защита тут не причем, получаете тест ESD
amiller
Цитата(ISF @ May 9 2017, 17:59) *
Согласен что кнопка и прерывание = неудачное решение, но тут даже до нажатия кнопки дело не доходит. Достаточно просто коснуться вывода PA0 щупом тестера для замера напряжения и БАЦ!, получите прерывание. Я бы ещё понял если бы вывод болтался без подтяжки в воздухе и я его касался проводником - тут уж без вариантов будет многократное срабатывание прерывания от наводок, емкости щупов и т.п. Но почему себя так ведёт полностью обвязанный и прикрытый от всех случайностей вывод мне совершенно неясно (

Почему то мне кажется, что во время экспериментов плата у Вас не заземлена, а на запястье нет браслета для снятия статики.
А значит в момент касания Вы подключаете к выводу микросхемы конденсатор на несколько десятков пикофарад, заряженный до нескольких киловольт.
Это эквивалент Вашего тела в достаточно сухом воздухе, если что.
А далее получается емкостной делитель, где ток разряда Вашей емкости заряжает емкость на входе. И вполне может быть, что эквивалентное напряжение на входе превысит логический уровень. А если бы это был просто висячий вход, то таким образом легко его убить.
Недаром всех монтажников заставляют браслеты одевать и работать заземленным инструментом.
Бывает, что у некоторых процессоров есть система внутренней синхронизации, которая не пропускает наносекундные (иногда и микросекундные) импульсы.
Видимо в STM такого нет. Это не значит, что процессоры плохие. Просто Вы использовать пытаетесь их не совсем правильно.
ViKo
А попробовать одной рукой взяться за плату, за цепь земли, а другой пинцетом в кнопку тыкать. Сработает?
ISF
Цитата(ViKo @ May 9 2017, 17:04) *
А попробовать одной рукой взяться за плату, за цепь земли, а другой пинцетом в кнопку тыкать. Сработает?



Попробовал, всё равно срабатывает, но ощутимо реже чем раньше
ViKo
У вас там электромагнитная аномалия! А в другом месте если попробовать?
Forger
Цитата(ViKo @ May 9 2017, 23:32) *
А в другом месте если попробовать?


Я бы еще посоветовал до кучи погасить свет в помещении. В данном случае и фотоны будут виноваты biggrin.gif
jcxz
Цитата(ISF @ May 9 2017, 15:59) *
Но почему себя так ведёт полностью обвязанный и прикрытый от всех случайностей вывод мне совершенно неясно (

Потому что Вы цепляете к нему огромную антенну (из щупов, их проводов и ваших рук и прочего тела), на которую наводится много ВЧ грязи. Неужто это не очевидно???
А Ваш AVR мог не регистрировать их например из-за своей тормознутости - очевидно его GPIO работает на гораздо меньших частотах и не успевает зарегистрировать короткие помеховые импульсы. Плюс к тому же - он 5-вольтовый, что так же увеличивает его нечувствительность.
Forger
Подозреваю, что речь идет о неком хитроумном способе выбора МК для нового проекта - касаться руками работающего проца.
Возможно, это - проект для оборонки, нынче их ОТК очень требовательно ко всему.
Очевидно, что STM32 вообще не проходит этот тест, поэтому придется возвращаться на AVR. Другого пути я не вижу. Увы crying.gif
jcxz
Цитата(Forger @ May 9 2017, 23:34) *
Очевидно, что STM32 вообще не проходит этот тест, поэтому придется возвращаться на AVR. Другого пути я не вижу. Увы crying.gif

Вангую - начальство нагибает ТСа: "Осваивай мол ARM, нужно уже серьёзные задачи решать, пора слезать с этого детсада AVR" krapula.gif . И ТС ищет - как бы так начальству доказать что ARM-ы плохи? 01.gif , чтобы не изучать их.
Вот он потыкал в лапку STM-а smile3046.gif и.... о, радость! - ложные срабатывания!! 08.gif Можно бежать к начальству yeah.gif и наглядно продемонстрировать "глюки" a14.gif , чтобы оно отстало с этими ARM-ами... maniac.gif disco.gif
Forger
Нынче существуют 5V армы. Они по-идее должны пройти подобный "тест на ложные прерывания", например, при касании правым мезинцем левой ноги lol.gif
ISF
Был задан вполне конкретный вопрос - какого чёрта МК улетает в прерывания от любого чиха и как бороться с таким поведением. Вопрос не праздный. На любом промышленном изделии порой требуются ремонтные действия и будет мало приятного если при банальном замере напряжения у МК будет сносить крышу напрочь. Если есть что сказать по делу, то стоит это сделать, а шутки тут как-то не особо к месту. Всё-таки не КВН
Forger
Цитата(ISF @ May 10 2017, 07:56) *
Был задан вполне конкретный вопрос - какого чёрта МК улетает в прерывания от любого чиха и как бороться с таким поведением.

Сначала следует разобраться с "поведением" того, кто собраться сувать руки в работающее изделие smile3046.gif
Во-вторых, изделие нужно засунуть в корпус и поставить плобму, чтобы кто-попало туда не лазил без ведома разработчика.
А, если сам разработчик допускает подобные копания в потрохах изделия с подключенным питанием, то виноват горе-разработчик,
а вовсе не контора, которая делает микросхемы, используемые в его чудо-устройстве.

Цитата
Вопрос не праздный.

Вам уже тут ответили по существу, сославшись на выдержки из даташита на МК.
И про обработку нажатий кнопок по прерываниям (дикость какая) тоже подсказали, что это делается это совсем иначе - нужно бороться с дребезгом и слишком короткими "пысиками" программно.
А также рассказали почему в вашем любимом AVR это не происходит, а тут - это возможно.
Короче, вам "разжевали все по косточам". Доходчиво. Даже местами слишком.

Цитата
На любом промышленном изделии порой требуются ремонтные действия и будет мало приятного если при банальном замере напряжения у МК будет сносить крышу напрочь.

На любом промышленном изделии перед копанием внутри сначала принято отключать питание и в обязательном порядке заземлять туловище любопытного электрика.
Хотя, лучше всего от таких электриков помогает корпус с гарантийной пломбой.

Цитата
шутки тут как-то не особо к месту

Ну да действительно! Как же я не подумал об этом! Ведь у вас траур - STM32 вывел на чистую воду, все то, что AVR упорно скрывал. Искренне сочувствую biggrin.gif

adnega
Цитата(ISF @ May 10 2017, 07:56) *
какого чёрта МК улетает в прерывания от любого чиха и как бороться с таким поведением. Вопрос не праздный.

Перед разработкой промышленного оборудования неплохо бы чуть-чуть подучиться.
Есть очень хорошая статья. Советую ознакомиться.
На STM32 нападения напрасны - если схемотехника в порядке, то оборудование может работать
в очень тяжелых условиях. У STM есть множество AN на данную тему, а у потребителей продукции STM
есть множество реализованных серийных надежных изделий.

Вам конкретно ответили: есть программные и есть аппаратные способы борьбы. Нужно использовать все.
Виноват не контроллер, а разработчик. Могу рассказать историю, как светодиодные табло зависали
намертво, когда рядом в сеть вставляли обычный нихромовый паяльник, при этом собраны они были на atmega128.
jcxz
Цитата(ISF @ May 10 2017, 06:56) *
На любом промышленном изделии порой требуются ремонтные действия и будет мало приятного если при банальном замере напряжения у МК будет сносить крышу напрочь.

А ещё подумайте что будет, когда при "банальном замере напряжения" на этих шаловливых ручках будет статический заряд в несколько кВ. Тоже будете винить микроконтроллер, что он "вдруг гад сдох"? smile3009.gif
ViKo
Если топикстартер выложит hex-код программы, любой желающий сможет запрограммировать свою Дискавери и проверить. Мне тоже кажется это ненормальным поведением, особенно с подтяжками по 100 Ом.
jcxz
Цитата(ViKo @ May 10 2017, 11:52) *
Если топикстартер выложит hex-код программы, любой желающий сможет запрограммировать свою Дискавери и проверить. Мне тоже кажется это ненормальным поведением, особенно с подтяжками по 100 Ом.

Ну да, и у этого "желающего" не проявится. И что?
А всё потому что пол в помещении не накапливает статику или нет люминесцентных ламп, дающих наводку на всё вокруг или ещё тысяча других причин.
adnega
Цитата(ViKo @ May 10 2017, 12:52) *
Мне тоже кажется это ненормальным поведением, особенно с подтяжками по 100 Ом.

Вместо hex нужно выложить отмоделированную схему - будет виден фронт, на который EXTI должен отреагировать.
В сложных случаях может быть все что угодно. У меня макет одного устройства реагировал на касание острым(!)
предметом земляного полигона, а не пина.
Сергей Борщ
QUOTE (ViKo @ May 10 2017, 12:52) *
Мне тоже кажется это ненормальным поведением, особенно с подтяжками по 100 Ом.
ST-link v2 теряет связь при касании пинцетом соединенного с землей металлического корпуса устройства. Я уже привык.
Forger
Цитата(Сергей Борщ @ May 10 2017, 14:44) *
ST-link v2 теряет связь при касании пинцетом соединенного с землей металлического корпуса устройства. Я уже привык.

А я заказал на пробу вот такую штуку для отвязки отладчика.

Нажмите для просмотра прикрепленного файла
ViKo
Есть ST-Link/V2-Isol
http://www.st.com/content/st_com/en/produc...st-link-v2.html
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.