реклама на сайте
подробности

 
 
> STM32F100 Непроизвольное срабатывание прерывания
Plexus
сообщение Aug 29 2014, 09:10
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 21-01-09
Пользователь №: 43 710



Требуется помошь в поиске проблемы.

Непроизвольно срабатывает прерывание EXTI0_IRQHandler().
Нога подтянута к 3.3В резистором. И на нее подается импульс.
Прерывание должно срабатывать по спаду. И срабатывает. Но время от времени, в обработчик залетает и выполняется проверка на EXTI_GetITStatus(EXTI_Line0). Импульсы в этот момент не поступают (слежу на осцилле).
Что за магия такая?

CODE
void init_EXTI()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2ENR_AFIOEN , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);

EXTI_InitTypeDef EXTI_InitStructure;

EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}

void init_NVIC()
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

int main(void)
{
RCC_Configuration();
init_timer();

init_EXTI();
init_NVIC();

NVIC_EnableIRQ(EXTI0_IRQn);
NVIC_DisableIRQ(TIM6_DAC_IRQn);


while(1);
}

void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET)
{

EXTI_ClearITPendingBit(EXTI_Line0);
TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
TIM_SetCounter(TIM6, 0);

if (flag)
{
flag = 0;
NVIC_EnableIRQ(TIM6_DAC_IRQn);
}
}
}


Сообщение отредактировал IgorKossak - Aug 29 2014, 20:47
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Aug 30 2014, 19:11
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Golikov A. @ Aug 30 2014, 21:06) *
ну он же не кортекс-м...

Ну так spurious interrupt - это не кортексо-специфическая штука. Откуда рождается - вопрос сложный, покрытый мракомsm.gif Возможно, что очень сложный контроллер прерываний, и не всегда всё успевает сбрасываться. Возможно ещё что-то. Главное, что жить это не мешает.

Цитата(adnega @ Aug 30 2014, 21:53) *
Согласен. У кортексов и контроллер прерываний совсем другой. Про ложные срабатывания (даже на STM32) ничего не слышал за более чем 4 года использования в серийном производстве (~ 100 изделий в месяц) на STM32F100/103/107/407.

Погуглите "spurious interrupt stm32", найдёте изрядно примеров. К тому же, если у вас в процедурах обработчиков прерывания есть проверка флага прерывания на входе, то вы это ложное прерывание никак и не заметите. Особенно в производствеsm.gif

Цитата(Plexus @ Aug 31 2014, 00:41) *
А какой именно флаг проверять? Разве в моем коде обработчик не полный?

У вас всё правильно, так и надо.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Plexus
сообщение Aug 31 2014, 06:09
Сообщение #3





Группа: Участник
Сообщений: 13
Регистрация: 21-01-09
Пользователь №: 43 710



Цитата(AHTOXA @ Aug 31 2014, 02:11) *
У вас всё правильно, так и надо.

Так дело в том, что эта проверка в прерывании и проходит.
Код
if (EXTI_GetITStatus(EXTI_Line0) != RESET)

Самопроизвольно выполняется это условие.
Если цеплять купюроприемник и в обработчике прерывания инкрементировать каждый импульс (сумму денег), то через некоторое время самопроизвольно отработает обработчик прерывания, и приплюсуется лишняя сумма денег. Как быть?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 31 2014, 08:04
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Plexus @ Aug 31 2014, 12:09) *
Так дело в том, что эта проверка в прерывании и проходит.
Код
if (EXTI_GetITStatus(EXTI_Line0) != RESET)

Самопроизвольно выполняется это условие.

А, вон оно что... Тогда это не spurious. Если дребезг точно исключён, то, скорее всего, не успевает сброситься флаг прерывания до выхода из обработчика.
Вставьте строчку
Код
        __DSB();

после очистки флага прерывания, всё должно пройти.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Plexus
сообщение Aug 31 2014, 15:07
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 21-01-09
Пользователь №: 43 710



Цитата(AHTOXA @ Aug 31 2014, 15:04) *
А, вон оно что... Тогда это не spurious. Если дребезг точно исключён, то, скорее всего, не успевает сброситься флаг прерывания до выхода из обработчика.
Вставьте строчку
Код
        __DSB();

после очистки флага прерывания, всё должно пройти.

Та функция вызывается непроизвольно не сразу после ее правильного вызова, т.е. проходит минут 5 и только после этого вызывается непроизвольно. Неужели флаг не успевает сброситься за 5 минут? )
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 31 2014, 23:07
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Plexus @ Aug 31 2014, 21:07) *
Та функция вызывается непроизвольно не сразу после ее правильного вызова, т.е. проходит минут 5 и только после этого вызывается непроизвольно. Неужели флаг не успевает сброситься за 5 минут? )

Не, тогда я согласен с предыдущими ораторами, это стопудово помеха.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Plexus   STM32F100 Непроизвольное срабатывание прерывания   Aug 29 2014, 09:10
- - Ant_m   Цитата(Plexus @ Aug 29 2014, 13:10) Импул...   Aug 29 2014, 09:45
|- - Plexus   Цитата(Ant_m @ Aug 29 2014, 16:45) А на G...   Aug 29 2014, 10:43
- - Golikov A.   это ваще может значить черти что, куча народу нары...   Aug 29 2014, 11:51
- - Plexus   Т.е. достаточно настроить все GPIO и проблема проп...   Aug 30 2014, 05:01
- - Golikov A.   где то краем ухо я слышал про ложные срабатывания ...   Aug 30 2014, 05:55
|- - adnega   Цитата(Golikov A. @ Aug 30 2014, 09:55) г...   Aug 30 2014, 08:57
|- - Plexus   Цитата(adnega @ Aug 30 2014, 15:57) Прави...   Aug 30 2014, 09:56
|- - adnega   Цитата(Plexus @ Aug 30 2014, 13:56) Хорош...   Aug 30 2014, 10:16
|- - Plexus   Цитата(adnega @ Aug 30 2014, 17:16) Это н...   Aug 30 2014, 10:24
- - Golikov A.   самое правильное, при прерывании проверять флаг, ч...   Aug 30 2014, 14:16
|- - Plexus   Цитата(Golikov A. @ Aug 30 2014, 21:16) с...   Aug 30 2014, 18:41
- - AHTOXA   Цитата(adnega @ Aug 30 2014, 14:57) Прави...   Aug 30 2014, 14:41
- - Golikov A.   ну он же не кортекс-м... Можно в 2 словах откуда ...   Aug 30 2014, 15:06
|- - adnega   Цитата(Golikov A. @ Aug 30 2014, 19:06) н...   Aug 30 2014, 15:53
|- - adnega   Цитата(AHTOXA @ Aug 30 2014, 23:11) Погуг...   Aug 30 2014, 19:22
||- - AHTOXA   Цитата(adnega @ Aug 31 2014, 01:22) Флаги...   Aug 30 2014, 21:30
- - Golikov A.   о разрешенных конечно, иначе это была бы мощная ба...   Aug 30 2014, 19:42
- - Golikov A.   а полингом проверить состояние пина нельзя? Кстати...   Aug 31 2014, 06:18
|- - Plexus   Цитата(Golikov A. @ Aug 31 2014, 13:18) а...   Aug 31 2014, 06:26
- - adnega   Цитата(Plexus @ Aug 31 2014, 10:09) Если ...   Aug 31 2014, 06:31
|- - Plexus   Цитата(adnega @ Aug 31 2014, 13:31) Либо ...   Aug 31 2014, 06:43
|- - adnega   Цитата(Plexus @ Aug 31 2014, 10:43) Дребе...   Aug 31 2014, 06:58
- - adnega   А мне очень не нравится эта строчка Цитатаif (flag...   Aug 31 2014, 09:51
- - Golikov A.   ЦитатаФлаг в периферийном модуле сбрасывается мгно...   Aug 31 2014, 11:16
|- - adnega   Цитата(Golikov A. @ Aug 31 2014, 15:16) н...   Aug 31 2014, 13:01
- - Golikov A.   мне кажется у вас все таки проходит какая - то пом...   Aug 31 2014, 17:04
|- - adnega   Цитата(Golikov A. @ Aug 31 2014, 21:04) м...   Aug 31 2014, 20:11
|- - Plexus   Цитата(adnega @ Sep 1 2014, 03:11) А рези...   Sep 1 2014, 02:47
- - Golikov A.   1. Есть еще образец платы, вдруг именно на этой ка...   Sep 1 2014, 06:36
|- - KnightIgor   Цитата(Golikov A. @ Sep 1 2014, 08:36) 4....   Sep 1 2014, 07:14
|- - Plexus   Цитата(KnightIgor @ Sep 1 2014, 14:14) P....   Sep 1 2014, 08:59
- - AHTOXA   Цитата(Golikov A. @ Sep 1 2014, 12:36) 4....   Sep 1 2014, 07:55
|- - KnightIgor   Цитата(AHTOXA @ Sep 1 2014, 09:55) Нет. Т...   Sep 1 2014, 10:34
- - adnega   Таймеры в STM32 очень функциональные. Я бы сделал ...   Sep 1 2014, 08:14
- - Golikov A.   мне лень было лезть и смотреть именно эти функции....   Sep 1 2014, 08:14
|- - AHTOXA   Цитата(Golikov A. @ Sep 1 2014, 14:14) мн...   Sep 1 2014, 11:22
- - Golikov A.   Да я вроде предложил ему привести что получилось в...   Sep 1 2014, 11:41
|- - AHTOXA   Цитата(Golikov A. @ Sep 1 2014, 17:41) Да...   Sep 1 2014, 12:29
- - Plexus   Господа, да вы что в самом то деле? Для меня любая...   Sep 1 2014, 12:42
- - ViKo   А осциллограф-то хороший был? Он может словить кор...   Sep 1 2014, 12:47
- - Golikov A.   ЦитатаВы всерьёз думаете, что ошибка в библиотечны...   Sep 1 2014, 15:32
- - ISF   Столкнулся с похожей проблемой что и автор топика....   May 9 2017, 08:30
|- - scifi   Цитата(ISF @ May 9 2017, 11:30) Мне хочет...   May 9 2017, 10:01
|- - ISF   Цитата(scifi @ May 9 2017, 11:01) Вы в ку...   May 9 2017, 12:04
- - Baser   Цитата(ISF @ May 9 2017, 11:30) При любом...   May 9 2017, 12:26
|- - ISF   Цитата(Baser @ May 9 2017, 13:26) Удивите...   May 9 2017, 13:19
- - rudy_b   Вы все про высокое, а причина может быть намного п...   May 9 2017, 12:45
- - amiller   По моему STM ведёт себя абсолютно правильно. Фронт...   May 9 2017, 13:20
|- - ISF   Цитата(amiller @ May 9 2017, 14:20) По мо...   May 9 2017, 13:59
|- - amiller   Цитата(ISF @ May 9 2017, 17:59) Согласен ...   May 9 2017, 15:05
|- - jcxz   Цитата(ISF @ May 9 2017, 15:59) Но почему...   May 9 2017, 21:29
|- - Forger   Подозреваю, что речь идет о неком хитроумном спосо...   May 9 2017, 21:34
|- - jcxz   Цитата(Forger @ May 9 2017, 23:34) Очевид...   May 9 2017, 21:44
|- - Forger   Нынче существуют 5V армы. Они по-идее должны пройт...   May 9 2017, 21:55
- - Baser   Цитата(ISF @ May 9 2017, 16:19) К тому же...   May 9 2017, 14:55
- - ViKo   А попробовать одной рукой взяться за плату, за цеп...   May 9 2017, 16:04
|- - ISF   Цитата(ViKo @ May 9 2017, 17:04) А попроб...   May 9 2017, 19:34
- - ViKo   У вас там электромагнитная аномалия! А в друго...   May 9 2017, 20:32
|- - Forger   Цитата(ViKo @ May 9 2017, 23:32) А в друг...   May 9 2017, 21:25
- - ISF   Был задан вполне конкретный вопрос - какого чёрта ...   May 10 2017, 04:56
|- - Forger   Цитата(ISF @ May 10 2017, 07:56) Был зада...   May 10 2017, 06:28
|- - adnega   Цитата(ISF @ May 10 2017, 07:56) какого ч...   May 10 2017, 07:31
|- - jcxz   Цитата(ISF @ May 10 2017, 06:56) На любом...   May 10 2017, 08:24
- - ViKo   Если топикстартер выложит hex-код программы, любой...   May 10 2017, 09:52
|- - jcxz   Цитата(ViKo @ May 10 2017, 11:52) Если то...   May 10 2017, 10:06
|- - adnega   Цитата(ViKo @ May 10 2017, 12:52) Мне тож...   May 10 2017, 10:49
|- - Сергей Борщ   QUOTE (ViKo @ May 10 2017, 12:52) Мне тож...   May 10 2017, 11:44
|- - Forger   Цитата(Сергей Борщ @ May 10 2017, 14:44) ...   May 10 2017, 14:00
- - ViKo   Есть ST-Link/V2-Isol http://www.st.com/content/st_...   May 11 2017, 17:22


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 19:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01478 секунд с 7
ELECTRONIX ©2004-2016