189 похожих чатов

Всем доброе утро кто-то работал с usart+dma, когда длина пакета

изначально не известна ?
Использовали флаг USART Idle и таймер для таймаума, если первого недостаточно?

33 ответов

27 просмотров

Вы на прием хотите сделать? Хал или лл используется? И серия мк какая? F4, F7, Я idle прерывание установил, описал обработчик и запустил прием функцией с дма +idle. В хал посмотрите ее реализацию, если у вас лл.

Евгений- Автор вопроса
Alexander Troshin
Вы на прием хотите сделать? Хал или лл используетс...

да на прием Хороший пример нашел на гитхабе, изучаю

дма в кольцевом режиме, и задача опроса изредка strchr искала начало строки + проверка конца, но там потеря пару посылок не важна была

Евгений- Автор вопроса
Ник Д
дма в кольцевом режиме, и задача опроса изредка s...

у меня скорость низкая а вот терять пакеты незя

Евгений
у меня скорость низкая а вот терять пакеты незя

А у ст нельзя генерировать отправку по dma по событию "в буфере 10 элементов" или, если долго не до заполняется сделать передачу с выставлением флага для обработки, что дма буфер получил не 10 значений а 3, например?

У L4 есть флажок таймаута по приёму. Этого хватало.

Евгений- Автор вопроса
Alexander
У L4 есть флажок таймаута по приёму. Этого хватало...

у меня на столе сейчас только f1 для всех тестов, я бы тож хотел флажок по приему, половину проблем бы закрыл

Евгений- Автор вопроса
jon pedro
А у ст нельзя генерировать отправку по dma по собы...

у ф1 там флаг только, что линия пустая и конец посылки Но там именно длину сообщения посчитать сложнее

Евгений
у ф1 там флаг только, что линия пустая и конец пос...

Если ресурсы свободные есть, то можно с определённой частотой брать 1 элемент из фифы и обработчик на машине состояний посылок. Получается очень легковестно. У меня так модбас реализован, цикл работы становится очень мелким, что в итоге не особо сказывается на работе программы, т.к обработчик совсем с парой операций. Это как простой вариант

Евгений- Автор вопроса
Alexander
Тогда костылить с доп, таймером.

хмм, ну вот я не знаю надо ли оно мне у меня 100 мс минимум между посылками есть, там по идее IDLE должен успеть А костылить как? таймер от дма

Евгений- Автор вопроса
jon pedro
Если ресурсы свободные есть, то можно с определённ...

я могу вообще все через прерывания Но хочу сделать красиво через дма

Евгений
хмм, ну вот я не знаю надо ли оно мне у меня 100 м...

Технически ты можешь сделать таймер, который в прерывании мониторит счетчик DMA.

Евгений- Автор вопроса
Alexander
Технически ты можешь сделать таймер, который в пре...

надо попробовать по Idle, мб там больше и не понадобится скорость 9600 и 100 мс что ли между пакетом точно есть

Евгений
да на прием Хороший пример нашел на гитхабе, изуч...

Киньте ссылочку на пример. Задача довольно распространенгая

Евгений- Автор вопроса
Arm Jedi
Киньте ссылочку на пример. Задача довольно распрос...

https://github.com/MaJerle/stm32-usart-uart-dma-rx-tx https://github.com/r2axz/bluepill-serial-monster

Евгений- Автор вопроса
Arm Jedi
Киньте ссылочку на пример. Задача довольно распрос...

1й вариант разжеванный сильно и классно

Евгений
https://github.com/MaJerle/stm32-usart-uart-dma-rx...

У него забавный сайт с примерами работы периферии был.

Евгений- Автор вопроса
Alexander
У него забавный сайт с примерами работы периферии ...

ну вот вроде у него то что мне надо, но таймер на ф1 не прикручен Так мне вообще сказали, есть у кого это все дело настраивается (таймаут) . У меня на H7 ножки не припаяны, сцуко

Евгений
ну вот вроде у него то что мне надо, но таймер на ...

Да, на старших процах у UART вроде есть аппаратный расчет таймаута.

Евгений- Автор вопроса
Alexander
Да, на старших процах у UART вроде есть аппаратный...

на f0 он тож есть отладка просто на ф1 сейчас доступна только а надо проверить кое-что дальше уже на нормальном камне без костылей обыграю

Евгений
ну вот вроде у него то что мне надо, но таймер на ...

Там вроде как если какое-то время нет символов. Я когда-то делал модифицировал hal обработчик не на количество символов а на приём 10 13 последовательности. Но это было не с дма а с it

Евгений- Автор вопроса
Alexander
Ок, удачно запилить.

глупый вопрос Если мне надо узнать количество байт принятых просто смотреть регистр счетчика байт DMA?

Alexander
Да, на старших процах у UART вроде есть аппаратный...

Usart receiver timeout RTOR, отлична штука, скорее ее нет на более древних только

Евгений- Автор вопроса
Arm Jedi
Есть ещё прерывание по половине приема

да но есть несколько вариантов, что до половины приема не дошли, что половину приема перешли, а данные пошли намного раньше позже

Евгений- Автор вопроса
Arm Jedi
Только счётчик тогда

как я себе представляю запомнил начальный, запомнил конечный высчитал количество байт принятых по дма Вот

Евгений
как я себе представляю запомнил начальный, запомни...

Можно так что бы постоянно не опрашивать счётчик по таймеру его посматривать

Евгений
глупый вопрос Если мне надо узнать количество бай...

После каждого таймаута либо сбрасывай счетчик DMA либо запоминай начальное значение.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта