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

 
 
> 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
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 18)
Silber
сообщение Apr 24 2015, 13:07
Сообщение #16


Участник
*

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



Цитата
Не понял, что это. Полная документация есть?

Да, извиняюсь, что сразу не скинул.

Прикрепленные файлы
Прикрепленный файл  HCSR04_sonar_.pdf ( 78.74 килобайт ) Кол-во скачиваний: 48
 
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Apr 24 2015, 13:25
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Ну... Надо учитывать, что Шенжень находится достаточно далеко от Оксфорда :-) Соответственно, язык там знают неидеально...
Правильное описание алгоритма этого датчика, кстати, есть в разделе product features.

А как трактовать "not suggested to connect directly to electric"... Видимо, "не втыкать при наличии питания" (и это правильно!)


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Silber
сообщение Apr 24 2015, 14:39
Сообщение #18


Участник
*

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



Цитата(esaulenka @ Apr 24 2015, 16:25) *
А как трактовать "not suggested to connect directly to electric"... Видимо, "не втыкать при наличии питания" (и это правильно!)

А я в основном так и поступал rolleyes.gif
Спасибо за помощь всем!

А в чем разница между установкой одного IC-канала на срабатывании на обоих фронатах (и передний и задний) и установкой двух каналов на одну ногу, каждый канал за свой фронт отвечает? Я сейчас реализовал первый вариант, всё нормально работает...

Реализовал второй вариант (два канала на одну ногу). Логика программы чуть чуть изменилась: прерывание теперь обрабатывается при сбрасывании таймера (в первом варианте прерывание создавалось при захвате фронтов). Какой вариант использовать предпочтительнее?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Apr 27 2015, 08:45
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(Silber @ Apr 24 2015, 17:39) *
А в чем разница между установкой одного IC-канала на срабатывании на обоих фронатах (и передний и задний) и установкой двух каналов на одну ногу, каждый канал за свой фронт отвечает? Я сейчас реализовал первый вариант, всё нормально работает...

Реализовал второй вариант (два канала на одну ногу). Логика программы чуть чуть изменилась: прерывание теперь обрабатывается при сбрасывании таймера (в первом варианте прерывание создавалось при захвате фронтов). Какой вариант использовать предпочтительнее?


Какой вариант лучше - вопрос предпочтений.

В первом случае процессор чуть меньше загружен. К тому же, если почему-то заблокируется прерывание от таймера в момент прихода ответного импульса, значение переднего фронта потеряется (можно проанализировать флаг переполнения и что-то сделать).
Во втором случае экономится один канал таймера (актуально, если датчиков много).
Во втором случае, кстати, не обязательно ждать переполнения таймера - можно использовать прерывание по заднему фронту импульса.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

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

 


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


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