|
STM32F100 Непроизвольное срабатывание прерывания |
|
|
|
Aug 29 2014, 09:10
|
Группа: Участник
Сообщений: 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] - для короткого!!!
|
|
|
|
|
 |
Ответов
|
Aug 30 2014, 19:11
|

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

|
Цитата(Golikov A. @ Aug 30 2014, 21:06)  ну он же не кортекс-м... Ну так spurious interrupt - это не кортексо-специфическая штука. Откуда рождается - вопрос сложный, покрытый мраком  Возможно, что очень сложный контроллер прерываний, и не всегда всё успевает сбрасываться. Возможно ещё что-то. Главное, что жить это не мешает. Цитата(adnega @ Aug 30 2014, 21:53)  Согласен. У кортексов и контроллер прерываний совсем другой. Про ложные срабатывания (даже на STM32) ничего не слышал за более чем 4 года использования в серийном производстве (~ 100 изделий в месяц) на STM32F100/103/107/407. Погуглите "spurious interrupt stm32", найдёте изрядно примеров. К тому же, если у вас в процедурах обработчиков прерывания есть проверка флага прерывания на входе, то вы это ложное прерывание никак и не заметите. Особенно в производстве  Цитата(Plexus @ Aug 31 2014, 00:41)  А какой именно флаг проверять? Разве в моем коде обработчик не полный? У вас всё правильно, так и надо.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 31 2014, 06:09
|
Группа: Участник
Сообщений: 13
Регистрация: 21-01-09
Пользователь №: 43 710

|
Цитата(AHTOXA @ Aug 31 2014, 02:11)  У вас всё правильно, так и надо. Так дело в том, что эта проверка в прерывании и проходит. Код if (EXTI_GetITStatus(EXTI_Line0) != RESET) Самопроизвольно выполняется это условие. Если цеплять купюроприемник и в обработчике прерывания инкрементировать каждый импульс (сумму денег), то через некоторое время самопроизвольно отработает обработчик прерывания, и приплюсуется лишняя сумма денег. Как быть?
|
|
|
|
|
Aug 31 2014, 08:04
|

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

|
Цитата(Plexus @ Aug 31 2014, 12:09)  Так дело в том, что эта проверка в прерывании и проходит. Код if (EXTI_GetITStatus(EXTI_Line0) != RESET) Самопроизвольно выполняется это условие. А, вон оно что... Тогда это не spurious. Если дребезг точно исключён, то, скорее всего, не успевает сброситься флаг прерывания до выхода из обработчика. Вставьте строчку Код __DSB(); после очистки флага прерывания, всё должно пройти.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 31 2014, 15:07
|
Группа: Участник
Сообщений: 13
Регистрация: 21-01-09
Пользователь №: 43 710

|
Цитата(AHTOXA @ Aug 31 2014, 15:04)  А, вон оно что... Тогда это не spurious. Если дребезг точно исключён, то, скорее всего, не успевает сброситься флаг прерывания до выхода из обработчика. Вставьте строчку Код __DSB(); после очистки флага прерывания, всё должно пройти. Та функция вызывается непроизвольно не сразу после ее правильного вызова, т.е. проходит минут 5 и только после этого вызывается непроизвольно. Неужели флаг не успевает сброситься за 5 минут? )
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|