изначально не известна ?
Использовали флаг USART Idle и таймер для таймаума, если первого недостаточно?
Вы на прием хотите сделать? Хал или лл используется? И серия мк какая? F4, F7, Я idle прерывание установил, описал обработчик и запустил прием функцией с дма +idle. В хал посмотрите ее реализацию, если у вас лл.
да на прием Хороший пример нашел на гитхабе, изучаю
дма в кольцевом режиме, и задача опроса изредка strchr искала начало строки + проверка конца, но там потеря пару посылок не важна была
у меня скорость низкая а вот терять пакеты незя
А у ст нельзя генерировать отправку по dma по событию "в буфере 10 элементов" или, если долго не до заполняется сделать передачу с выставлением флага для обработки, что дма буфер получил не 10 значений а 3, например?
У L4 есть флажок таймаута по приёму. Этого хватало.
у меня на столе сейчас только f1 для всех тестов, я бы тож хотел флажок по приему, половину проблем бы закрыл
у ф1 там флаг только, что линия пустая и конец посылки Но там именно длину сообщения посчитать сложнее
Тогда костылить с доп, таймером.
Если ресурсы свободные есть, то можно с определённой частотой брать 1 элемент из фифы и обработчик на машине состояний посылок. Получается очень легковестно. У меня так модбас реализован, цикл работы становится очень мелким, что в итоге не особо сказывается на работе программы, т.к обработчик совсем с парой операций. Это как простой вариант
хмм, ну вот я не знаю надо ли оно мне у меня 100 мс минимум между посылками есть, там по идее IDLE должен успеть А костылить как? таймер от дма
я могу вообще все через прерывания Но хочу сделать красиво через дма
Технически ты можешь сделать таймер, который в прерывании мониторит счетчик DMA.
надо попробовать по Idle, мб там больше и не понадобится скорость 9600 и 100 мс что ли между пакетом точно есть
Киньте ссылочку на пример. Задача довольно распространенгая
https://github.com/MaJerle/stm32-usart-uart-dma-rx-tx https://github.com/r2axz/bluepill-serial-monster
1й вариант разжеванный сильно и классно
У него забавный сайт с примерами работы периферии был.
ну вот вроде у него то что мне надо, но таймер на ф1 не прикручен Так мне вообще сказали, есть у кого это все дело настраивается (таймаут) . У меня на H7 ножки не припаяны, сцуко
Да, на старших процах у UART вроде есть аппаратный расчет таймаута.
на f0 он тож есть отладка просто на ф1 сейчас доступна только а надо проверить кое-что дальше уже на нормальном камне без костылей обыграю
Ок, удачно запилить.
Там вроде как если какое-то время нет символов. Я когда-то делал модифицировал hal обработчик не на количество символов а на приём 10 13 последовательности. Но это было не с дма а с it
глупый вопрос Если мне надо узнать количество байт принятых просто смотреть регистр счетчика байт DMA?
Usart receiver timeout RTOR, отлична штука, скорее ее нет на более древних только
Есть ещё прерывание по половине приема
да но есть несколько вариантов, что до половины приема не дошли, что половину приема перешли, а данные пошли намного раньше позже
Только счётчик тогда
как я себе представляю запомнил начальный, запомнил конечный высчитал количество байт принятых по дма Вот
Можно так что бы постоянно не опрашивать счётчик по таймеру его посматривать
После каждого таймаута либо сбрасывай счетчик DMA либо запоминай начальное значение.
да я так и думал Спасибо
Обсуждают сегодня