Сообщение от Hives
|
_Артём_ запиши: ничто не происходит мгновенно.
а у stm32 есть плюшка - сброс флага не сразу сбраcывает запрос на irq, и поэтому можно еще раз вернуться в него после завершения обработчика.
|
Да... А у меня вот что было:
пользую несколько прерываний. UART - ВЫСОКИЙ приоритет, таймер - низкий.
Скидывал прерывание по таймеру перед выходом из обработчика. Ну дак вот: непредсказуемо, через некоторое время переставал попадать на прерывание от таймера. А uart - все отлично - попадал по приходу данных.
ЛЕЧЕНИЕ: стал скидывать прерывание сразу, первой командой. И все работает.
А вот еще глюк. Есть таймер, который работает с автоперезагрузкой в 1мС. Есть вход, на который поступают импульсы. Ловим по перепаду, и определяем длительность по таймеру.
У таймера - более низкий приоритет. Программа - ни о чем, простая. Больше прерываний нет. в mane только while(1).
Время обработки прерывания около 10 мкС. Импульсы поступают 6 - 20мСек.
Все работает. Но иногда прога залетает в обработчик таймера и сидит там 30!!!!!!! мСек

И потом все опять ок....
Лечится - ставим более высокий приоритет на таймер, чем на прерывание по фронту....
Вот здесь человек пишет про грабли с прерываниями (скидывать надо сразу при входе в ф-ию!!!!) и про файлики
А вообще, подключите все фалики к проекту :system_stm32f10x.c, startup_stm32f10x_md_vl.s, core_cm3.c - надежнее будет. /цитата/
http://www.be-em.ru/stm32-%D0%B2%D0%...D%D0%B8%D1%8F/