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

 
 
> STM32f4 discovery прерывания, Запутался в прерываниях, прошу помощи
Silber
сообщение Apr 23 2015, 14:49
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-02-15
Пользователь №: 85 339



в STM32CubeMX сгенерировал себе вот такой проект:
USB OTG FS(для передачи данных на пк через виртуальный ком-порт), TIM6, Синяя кнопка, +2 gpio пина для работы с ультразвуковым датчиком расстояния.
Цель программы - научиться считывать показания датчика. Как с ним работать: подать на пин Trig единицу длиной 10микроСек, засечь, сколько жду ответ от датчика по пину Echo. Преобразовать временной промежуток и получить расстояние до объекта. Все просто!
Как я хочу, чтобы работала программа: при нажатии на кнопку контроллер отправляет по usb мне расстояние до объекта. Алгоритм:
1)прерывание по нажатию на кнопку
2)запускается таймер, его источник - 48МГц, делитель 0, период 47. (чтобы каждую микросекунду он генерировал прерывание)
3)работа с сенсором //этот пункт сейчас не вызывает вопросов
4)отправка данных по usb
Данные по usb передаются нормально, но, если я включаю таймер, то USB виснет. Догадываюсь, что дело в прерываниях и их приоритетах. Приоритеты прерываний см на изображении. Что такое под-приоритет?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Apr 23 2015, 16:10
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Silber @ Apr 23 2015, 17:49) *
2)запускается таймер, его источник - 48МГц, делитель 0, период 47. (чтобы каждую микросекунду он генерировал прерывание)

Тут вам следует пересмотреть архитектуру.
Что полезного вы успеете сделать за 48 тактов, причем 12 израсходуется только для вхождения в прерывание?
Для формирования импульса и измерения отклика можно и нужно использовать аппаратные возможности таймера (при этом точность можно значительно повысить).
Go to the top of the page
 
+Quote Post
Silber
сообщение Apr 23 2015, 16:56
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 24-02-15
Пользователь №: 85 339



Цитата(adnega @ Apr 23 2015, 19:10) *
Тут вам следует пересмотреть архитектуру.
Что полезного вы успеете сделать за 48 тактов, причем 12 израсходуется только для вхождения в прерывание?
Для формирования импульса и измерения отклика можно и нужно использовать аппаратные возможности таймера (при этом точность можно значительно повысить).

А почему за 48 тактов? Проц работает на частоте 168Мгц (или нет?). А как называется режим, в котором стоит использовать таймер для такой моей цели? One Pulse Mode?
Спасибо за ответ, но насчет прерываний-то что?
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 23 2015, 17:44
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Silber @ Apr 23 2015, 19:56) *
А почему за 48 тактов? Проц работает на частоте 168Мгц (или нет?). А как называется режим, в котором стоит использовать таймер для такой моей цели? One Pulse Mode?
Спасибо за ответ, но насчет прерываний-то что?

Частота 168МГц это максимум для данного МК. В данном случае это ситуацию не меняет, т.к. вместо 48 тактов будет 168 и это все равно очень мало.

Я бы сделал так:
1. Настроил таймер (лучше TIM2 - он 32-битный) с нужным PSC (т.е. временнЫм разрешением).
2. В ARR записал значение в зависимости от требуемой частоты опроса.
3. CH1 настроил на вывод PWM сигнала на ногу Trig с длительностью 10 мкс.
4. CH2 настроил на захват переднего фронта с ноги Echo и генерацией прерывания.

В итоге имеем требуемую частоту опроса датчика с генерацией прерывания по приходу эха.
Таймер работает с максимальным разрешением, cpu отвлекается только в моменты прихода эха.
При этом в регистре лежит результат, который нужно лишь домножить на константу, чтоб получить расстояние.
Если данные нужны не в реальном времени, а можно сложить в буфер, например, для отправки по USB, то, натравив на таймер DMA,
можно еще больше разгрузить cpu. Задачка явно не для 168МГц))
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Silber   STM32f4 discovery прерывания   Apr 23 2015, 14:49
|- - Silber   Цитата(adnega @ Apr 23 2015, 20:44) Часто...   Apr 23 2015, 18:08
- - Silber   Ошибся в последнем предложении. Режим называется P...   Apr 23 2015, 19:40
|- - adnega   Цитата(Silber @ Apr 23 2015, 22:40) Режим...   Apr 24 2015, 05:36
|- - Silber   Цитата(adnega @ Apr 24 2015, 08:36) Вам д...   Apr 24 2015, 06:09
|- - adnega   Цитата(Silber @ Apr 24 2015, 09:09) Мой п...   Apr 24 2015, 06:32
|- - Silber   Цитата(adnega @ Apr 24 2015, 09:32) Ааа. ...   Apr 24 2015, 11:04
- - esaulenka   Осциллографа под рукой нету? Моргания светодиода ...   Apr 24 2015, 12:24
- - Silber   Показания сняты успешно! Однако, не без загадо...   Apr 24 2015, 12:30
|- - esaulenka   Цитата(Silber @ Apr 24 2015, 15:30) Осцил...   Apr 24 2015, 12:58
- - esaulenka   Как нарисовано, так и работает. По входу "три...   Apr 24 2015, 12:39
|- - Silber   Цитата(esaulenka @ Apr 24 2015, 15:39) Ка...   Apr 24 2015, 12:50
- - Silber   ЦитатаНе понял, что это. Полная документация есть?...   Apr 24 2015, 13:07
- - esaulenka   Ну... Надо учитывать, что Шенжень находится достат...   Apr 24 2015, 13:25
- - Silber   Цитата(esaulenka @ Apr 24 2015, 16:25) А ...   Apr 24 2015, 14:39
- - esaulenka   Цитата(Silber @ Apr 24 2015, 17:39) А в ч...   Apr 27 2015, 08:45


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:00
Рейтинг@Mail.ru


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