Easyelectronics.ru

Электроника для всех
Текущее время: 10 дек 2018, 12:29

Часовой пояс: UTC + 5 часов




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Прерывания в STM32
СообщениеДобавлено: 23 ноя 2014, 21:10 
Только пришел

Зарегистрирован: 03 ноя 2014, 11:10
Сообщения: 5
Доброго времени суток!
Столкнулся с проблемой во время освоения STM32 на PinBoardII R2.
Что пытался сделать.
Схема.
PA0...PA9 контроллера подключёны к светодиодной линейке на плате. Выход переменного резистора (VFI) подключен к PB0. Переменный резистор запитан от CPU_PWR. Вся плата питается от USB.
Программа.
Написал программку, которая должна включать линейку светодиодов в соответствии со счётчиком cn_Var: больше значение - больше светодиодов светится. Далее решил сделать регулировку яркости от переменного резистора на PinBoard. В качестве таймера для организации ШИМ использовал (пока) системный таймер. И вот тут появилась непонятка с АЦП. Если я работаю с АЦП вручную (вычитываю результат преобразования в обработчике системного таймера), то всё хорошо: свтодиодики переключаются, яркость регулируется. А если пытаюсь настроить работу АЦП по прерыванию, то контроллер виснет. Пытался в отладчике понять куда контроллер влетел - не понял.
В архиве проект в состоянии не рабочем. Если в NVIC запретить прерывание от АЦП (в ADC_init.c) - работает (в ручном режиме).
Прошу помочь разобраться - где проблема.


Вложения:
LEDline.zip [129.1 Кб]
Скачиваний: 107
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывания в STM32
СообщениеДобавлено: 24 ноя 2014, 00:26 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
Batyr писал(а):
Пытался в отладчике понять куда контроллер влетел - не понял.
Что значит "не понял"? В обработчике HardFault код крутится, что ли?

Просто нажмите в отладчике "Стоп", когда зависло/упало. Предварительно код скомпилируйте без оптимизаций.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывания в STM32
СообщениеДобавлено: 24 ноя 2014, 01:21 
Только пришел

Зарегистрирован: 03 ноя 2014, 11:10
Сообщения: 5
Да вроде как и не Hard fault. На картинках настройка оптимизации (выключено вроде всё) и состояние Keil после нажатия СТОП когда зависло.


Вложения:
options.jpg
options.jpg [ 67.67 Кб | Просмотров: 3280 ]
stop_1.jpg
stop_1.jpg [ 173.25 Кб | Просмотров: 3280 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывания в STM32
СообщениеДобавлено: 24 ноя 2014, 14:05 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
Batyr писал(а):
Да вроде как и не Hard fault. На картинках настройка оптимизации (выключено вроде всё) и состояние Keil после нажатия СТОП когда зависло.
Ну вот видите, код "крутится в вечном цикле ("B .") в теле одного из IRQHandler'ов. Надо было определить код для обработчика, но это не было сделано - и сработала "заглушка" в виде "B ." .

В стеке что? Вижу, что SP содержит валидное значение.

И, если сложно понять, какой IRQHandler отсутствует, определите все возможные каким-нибудь кодом (типа вывести строку в терминал или просто записать номер в глобальную переменную). Когда обработчик "клюнет", он оставит характерное значение в терминале/переменной/etc.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывания в STM32
СообщениеДобавлено: 24 ноя 2014, 16:22 
Только пришел

Зарегистрирован: 03 ноя 2014, 11:10
Сообщения: 5
В общем-то ка раз не понятно было в какой обработчик попал. Разрешаю в NVIC конкретное прерывание (для ADC1_2) и ожидаю увидеть попадание в соответствующий обработчик. Хм... Может быть с именем обработчика ошибся - вечерком проверю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывания в STM32
СообщениеДобавлено: 24 ноя 2014, 16:46 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3303
Ага, правильный обработчик ADC1_2_IRQHandler.
Только там все равно нехорошая идея в SysTick_Handler код размещать.
Лучше уж Таймер настроить с DMA.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывания в STM32
СообщениеДобавлено: 24 ноя 2014, 21:52 
Только пришел

Зарегистрирован: 03 ноя 2014, 11:10
Сообщения: 5
В общем дурная голова рукам покоя не даёт. Проблема разрешилась: действительно я надрался с именем обработчика. Спасибо всем за помощь. Буду дальше ковыряться.
fr0ster писал(а):
Только там все равно нехорошая идея в SysTick_Handler код размещать.

Почему бы и не разместить код, если нужно? Правда, IMHO, кода должно быть минимум. Сейчас я его туда запихал просто потому что так быстрее получилось :-).

fr0ster писал(а):
Лучше уж Таймер настроить с DMA.

До DMA мне пока далеко, но, со временем, и это освоим :-).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Прерывания в STM32
СообщениеДобавлено: 24 ноя 2014, 22:48 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3303
Batyr писал(а):
В общем дурная голова рукам покоя не даёт. Проблема разрешилась: действительно я надрался с именем обработчика. Спасибо всем за помощь. Буду дальше ковыряться.
fr0ster писал(а):
Только там все равно нехорошая идея в SysTick_Handler код размещать.

Почему бы и не разместить код, если нужно? Правда, IMHO, кода должно быть минимум. Сейчас я его туда запихал просто потому что так быстрее получилось :-).

fr0ster писал(а):
Лучше уж Таймер настроить с DMA.

До DMA мне пока далеко, но, со временем, и это освоим :-).


Тогда лучше читать на тему ADC, DMA и таймеров.
В теле появиться гибкость необыкновенная :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB