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

 
 
> STM32, интерфейсы и прерывания, Куча вопросов
nya
сообщение Nov 11 2015, 08:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 17-04-07
Пользователь №: 27 107



Коллеги, а подскажите, как работать с прерываниями от внешних интерфейсов.
Возьмем, к примеру, CAN.
  1. Есть две функции приема по CAN: HAL_CAN_Receive() и HAL_CAN_Receive_IT(). В чем между ними разница? Генерит ли HAL_CAN_Receive() прерывания, если нет - как ей пользоваться?
  2. При каких условиях запускаются обработчики прерываний USB_LP_CAN1_RX0_IRQHandler() и CAN1_RX1_IRQHandler()?
  3. Как пользоваться HAL_CAN_RxCpltCallback() и почему Cube не создает эту функцию вместе с прочими обработчиками прерываний?

Примеров c HAL в интернетах очень мало, поэтому я не смог найти ответов на эти вопросы... заранее спасибо.

Сообщение отредактировал nya - Nov 11 2015, 08:41
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
nya
сообщение Nov 11 2015, 09:06
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 17-04-07
Пользователь №: 27 107



Но зачем два обработчика - Handler и Callback?
Go to the top of the page
 
+Quote Post
Tanya
сообщение Nov 11 2015, 09:23
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(nya @ Nov 11 2015, 12:06) *
Но зачем два обработчика - Handler и Callback?

Это для того, чтобы Вы не возились с регистрами. HAL - Hardware Abstraction Level (Layer).
Go to the top of the page
 
+Quote Post
nya
сообщение Nov 11 2015, 09:44
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 17-04-07
Пользователь №: 27 107



Цитата(Tanya @ Nov 11 2015, 12:23) *
Это для того, чтобы Вы не возились с регистрами. HAL - Hardware Abstraction Level (Layer).

Так это понятно. sm.gif Но я сейчас нашел таки рабочий пример для CAN - http://geektimes.ru/post/255534/
Похоже, в моем коде были неправильно выставлены настройки фильтров, вот прерывания и не вызывались.
Поэкспериментировав, выяснил, что оба этих обработчика работают одинаково хорошо. И запускаются одновременно. Поэтому все-такие непонятно в чем между ними разница и когда нужно использовать Handler, а когда - Callback. В обоих случаях "ручной труд" с регистрами равен нулю.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Nov 11 2015, 09:46
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(nya @ Nov 11 2015, 12:44) *
когда нужно использовать Handler, а когда - Callback. В обоих случаях "ручной труд" с регистрами равен нулю.

Нужно использовать Callback. Предполагается, что всегда. Callback вызывается в самом конце обработчика.
Go to the top of the page
 
+Quote Post
nya
сообщение Nov 11 2015, 09:58
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 17-04-07
Пользователь №: 27 107



Цитата(Tanya @ Nov 11 2015, 12:46) *
Нужно использовать Callback. Предполагается, что всегда. Callback вызывается в самом конце обработчика.

То есть я должен писать обработчики Callback в main.c вместо того, чтобы лезть в stm32***_it.c?
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 11 2015, 15:53
Сообщение #7


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(nya @ Nov 11 2015, 12:58) *
То есть я должен писать обработчики Callback в main.c вместо того, чтобы лезть в stm32***_it.c?


Да. Так будет правильно.
Go to the top of the page
 
+Quote Post
drozel
сообщение Nov 12 2015, 02:40
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Цитата(Tarbal @ Nov 11 2015, 21:53) *
Да. Так будет правильно.

Да вот хз. По идее, даже не смотря на навороченный NVIC, обработчик прерывания должен быть разумно коротким, а в HAL мало того, что обработчик раздутый до нельзя, так еще и калбек вызывается прямо из него. А пользователь в калбеке воротит кучу кода и еще вызовы своих функций. Дай бог, без блокирующих задержек.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 12 2015, 04:33
Сообщение #9


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(drozel @ Nov 12 2015, 05:40) *
Да вот хз. По идее, даже не смотря на навороченный NVIC, обработчик прерывания должен быть разумно коротким, а в HAL мало того, что обработчик раздутый до нельзя, так еще и калбек вызывается прямо из него.

этот HAL переплюнул легендарный индусский код. Его даже в кач-ве справочника использовать нельзя.
но и это цветочки.
по идее, описание регистров всей линейки stm32 должно уместиться в пару файлов 25-30 кб, с весьма удобным API вместо 100 метровых библиотек ни о чем.

Сообщение отредактировал _Pasha - Nov 12 2015, 04:34
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- nya   STM32, интерфейсы и прерывания   Nov 11 2015, 08:36
- - Tanya   Цитата(nya @ Nov 11 2015, 11:36) Примеров...   Nov 11 2015, 08:51
||- - Tanya   Цитата(nya @ Nov 11 2015, 12:58) То есть ...   Nov 11 2015, 10:06
|- - jcxz   Цитата(Tanya @ Nov 11 2015, 15:23) Это дл...   Nov 12 2015, 04:42
|- - drozel   Цитата(jcxz @ Nov 12 2015, 10:42) Как пра...   Nov 12 2015, 05:08
- - Tarbal   А у меня подход простой. Срочно надо сделать проек...   Nov 12 2015, 23:17
- - MikleV   Подниму тему по аналогичному вопросу. Есть STM32 с...   Nov 17 2015, 06:28
|- - drozel   Цитата(MikleV @ Nov 17 2015, 12:28) Вопро...   Nov 17 2015, 07:32
- - MikleV   Эти функции просто устанавливают биты в соответств...   Nov 17 2015, 08:05
- - drozel   Ну тык а биты описаны в даташите. С этого и надо н...   Nov 17 2015, 11:02
- - MikleV   Спасибо. Мне собственно и нужно было понять принци...   Nov 17 2015, 13:46
- - esaulenka   Какой конкретно режим? Если в его описании написан...   Nov 17 2015, 15:15
- - ASDFG123   Как в отладчике Coocox Coide симитировать прерыван...   Feb 23 2017, 03:52


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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 12:28
Рейтинг@Mail.ru


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