USART (серийный) прерывание

Мики
Ср. 01 июня 2016 г., 3:05
Я где -то читал, в Libmaple реализовано серийное прерывание.
Пусть кто -нибудь поделится тем, как его использовать?
Мне нужно обработать последовательный кадр, в прерывании на rx .

Rogerclark
Ср. 01 июня 2016 г., 9:43
Я думаю, что Libmaple использует прерывания использования для чтения USART при получении входящего символа, и помещает его в буфер входного кольца

Поэтому, если вы хотите назвать свою собственную функцию, а также символ, идущий в буфер кольца, вам нужно изменить код в Cores \ Maple \ libmaple \ USART_F1

эн.глин.
void __irq_usart1(void) { usart_irq(&usart1_rb, USART1_BASE); }

Мики
Ср. 01 июня 2016 12:13
Обработчик прерывания называется автоматически, как только будет получен символ, и соответствующий флаг установлен.
Итак, эта функция является обработчиком прерываний? Он автоматически уволен?

Rogerclark
Ср. 01 июня 2016 г., 21:14
@miki

Я предполагаю, что это сразу же запускается, но лучший вариант - написать код и провести некоторое исследование или прочитать руководство по программированию Master для F103

Мики
Чт, 02 июня 2016 г., 16:01
Я попробовал какой -то код на serial3, и я увидел, что это определено NOD. Я использовал общую серию F103C
Serial и Serial2 компиляции.
Я хочу использовать USART3, потому что он терпим 5 В.USAR2 нет, и я держу USART1 для отладки.
Или, может быть, serial2 это USART3 ?Сбивает с толку.Да, я вижу это в досках.CPP для общего,

Mrburnette
Чт, 02 июня 2016 г., 17:39
Мики написал:Я попробовал какой -то код на serial3, и я увидел, что это определено NOD. Я использовал общую серию F103C
Serial и Serial2 компиляции.
Я хочу использовать USART3, потому что он терпим 5 В.USAR2 нет, и я держу USART1 для отладки.
Или, может быть, serial2 это USART3 ?Сбивает с толку.Да, я вижу это в досках.CPP для общего,

Мики
Чт, 02 июня 2016 г., 19:53
Я хочу обойти обработчик клена и использовать мой внутри эскиза Arduino, чтобы иметь лучший контроль и больше чеков
Я не знаю, как продолжить.Я могу заменить __irq_usart3 () в USART_F1.c Но ​​это кажется слишком сложным и слишком персонализированным с объявлением конкретных переменных, используемых только в моем эскизе.Мне нужно обрабатывать данные в прерывании и иметь больше контроля.
Как я могу использовать оригинальные обработчики прерываний STM32 USART?.
Я прочитал справочное руководство, но не нашел то, что ищу.На AVR это просто, вы знаете название вектора и называете его внутри эскиза.Я хочу сделать то же самое.

Mrburnette
Чт, 02 июня 2016 г., 8:22 вечера
Мики написал:Я хочу обойти обработчик клена и использовать мой внутри эскиза Arduino, чтобы иметь лучший контроль и больше чеков
Я не знаю, как продолжить.
<...>

Мики
Чт, 02 июня 2016 г., 21:04
С уважением,

Мне нужно вставить что -то подобное в мой эскиз.Мне нужен мой ручка переопределить обработчик по умолчанию из Maple.

uint16_t x; uint16_t index; #define BUFFER_SIZE void USART_3 interrupt handler() {//????? if((USART3_BASE->SR &0x0F)==0) // Check overrun, noise error,framing ,parity error { if(index==0){ if((USART3_BASE->DR&0xff)==x){ index++; start a timer for 5ooous; interrupt on timer output compare; } } else{ buffer[(index++)-1]=USART3_BASE->DR&0xff; if(index>BUFFER_SIZE){ disable timer interrrupt; index=0; } } } else index=0; }

Mrburnette
Пт, 03 июня 2016 г., 13:53
Мики написал:С уважением,

Мне нужно вставить что -то подобное в мой эскиз.Мне нужен мой ручка переопределить обработчик по умолчанию из Maple.
<...>

Мики
Пт, 03 июня 2016 г., 8:04 вечера
Я пытаюсь использовать собственный обработчик Maple .
Объявление внешней в USARTF1.c Файл ,....и звонить в свой эскиз, но я получил ошибку «Ожидаемый идентификатор или» («до строки постоянной extern» c "void....." extern "C" void __irq_usart3(void);

Mrburnette
Пт, 03 июня 2016 г., 11:04
Мики написал: <...>
Я хочу иметь возможность использовать свой обработчик или обработчик клена в моем эскизе.

Мики
SAT 04 июня 2016 г. 12:56 утра
Спасибо!
за ваши усилия.
Я решил проблему, это было так просто.
И он думает, что некоторая модификация может быть сделана постоянной в Maple Core для всех версий.
Теперь я могу играть в все, что хочу в своем эскизе.Я уже проверяю и работаю в порядке.

Мики
Вторник 30 августа 2016 г. 16:40
От Maple Library Maker 4 Yers назад на всякий случай.
Мболявар
"В общем, обработчикам IRQ нужна C -сцепление. В файле C ++ это означает, что вы либо помещаете их в блок «C», либо объявите их внешние «C» с

extern "c" void __irq_whatever (void) { ... }

В файле C у них уже будет сцепление C, поэтому спецификатор внешней связи не нужен.

Что касается того, как выпустить код, который переопределяет обработчиков IRQ как библиотеку, это в настоящее время боль, поскольку вам нужно заставить своих пользователей комментировать обработчиков в копии Libmaple, которая поставляется с IDE. Это, очевидно, не идеально, поэтому в следующей версии, Мы будем ослаблять обработчики Libmaple IRQ слабым, Таким образом, вы можете переопределить их, просто объявив свой собственный."

Он никогда не делал этого.Так как насчет сейчас?

Рива
Чт, 09 февраля 2017 г. 8:53 утра
Извините за перетаскивание старого поста, но когда -либо случилось слабое IR?

РЕДАКТИРОВАТЬ: Я ответил на свой собственный вопрос, попробовав образец наброска, и ответ - нет, слабый атрибут не был реализован.
Что, вероятно, это приведет к ядро, чтобы добавить атрибут __weak в USART_F1.c Определения прерывания и позволило бы пользователю реализовать там собственные подпрограммы службы, используя что -то вроде кода ниже. extern "C" void __irq_usart1(void) { // etc. }

Мики
Чт, 09 февраля 2017 12:11
В конце я прокомментировал оригинальные функции USART2 и 3 в USART_F1.C и использовал мои собственные обработчики серийного прерывания в основной программе.
Теперь они включены в многотротокол.И отлично работает.
Если вы хотите увидеть больше, это здесь.
Последовательные обработчики в многопротоколе.Ино/Телеметрия.Ино
https: // github.com/pascallanger/Diy-mul ... rduino-ide
https: // github.com/pascallanger/Diy-mul ... -TX-модуль

Нажмите кнопку

Multi Encoder Sketch с ускорением