Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

stm32f4 usart приём данных в прерывании и DMA

Чт авг 26, 2021 21:34:40

У меня вопрос к спецам.Почему в некоторых исходниках пишут флаги ошибок.А некоторые не пишут.И как правильно эти флаги выставлять и сбрасывать?

Re: stm32f4 usart приём данных в прерывании и DMA

Пт авг 27, 2021 05:59:09

Флаги ошибок выставляет аппаратура. Как и где обрабатывать зависит от того, что ты передаёшь-принимаешь. Например, в Модбас пакет содержит контрольную сумму, поэтому мне без разницы, по какой причине исказился пакет, шум в линии или DMA не смог переслать байт. Я просто сбрасываю все ошибки, отбрасываю пакет с ошибкой и жду следующий.
А вот статистику ошибочных пакетов веду, ибо она позволяет понять, что как идёт приём-передача.

Re: stm32f4 usart приём данных в прерывании и DMA

Пт авг 27, 2021 07:21:44

Вы имеете виду.Что программно не выставляются эти флаги?Как при приёме так и при передаче пакетов?

Добавлено after 1 minute 41 second:
А вот статистику ошибочных пакетов веду, ибо она позволяет понять, что как идёт приём-передача. А как это вы делаете?

Re: stm32f4 usart приём данных в прерывании и DMA

Пт авг 27, 2021 09:04:16

Вы имеете виду.Что программно не выставляются эти флаги?Как при приёме так и при передаче пакетов?

Ты даташит читал?
А вот статистику ошибочных пакетов веду, ибо она позволяет понять, что как идёт приём-передача. А как это вы делаете?

Считаю в мастере, сколько запросов к узлу отправил и сколько получил на них ответов с ошибками. Причём, ошибку при неответе узла фиксирую только тогда, когда из 3 запросов хотя бы на один был ответ. Тогда сразу добавляю к счётчику ошибок количество неответов. А то выключат оборудование, оно перестанет отвечать и чё, каждый неответ отмечать как ошибку обмена?
В слэйвах считаю количество принятых пакетов в свой адрес и количество битых пакетов.

Re: stm32f4 usart приём данных в прерывании и DMA

Пт авг 27, 2021 22:21:46

А пример?Можешь показать.

Добавлено after 50 seconds:
RM?

Re: stm32f4 usart приём данных в прерывании и DMA

Вс авг 29, 2021 07:37:11

ivan dimir писал(а):А пример?Можешь показать.
На своем компе нажмите Пуск->Все программы->Стандартные->Командная строка или по поиску найдите "Командная строка".
Откройте ее.
Нажмите клавишу Enter. В ответ вам приходит какой-то вразумительный ответ.

Пойдет пример?

Анализ ответа.
Я не знаю как в DMA это сделать, а в прерывании делается примерно так:
Каждый ответ, назовем его пакет, пакет данных, либо с какого-то символа начинается, либо каким-то символом заканчивается.
Вот, к примеру, образец:
в данном примере каждый пакет начинается с символа $.
В прерывании анализируем каждый символ, ждем начала строки, к примеру так
Продолжаем принимать байты пакета и анализировать.
Далее идет анализ заголовка.
Первый символ отбрасываем G, он не нужен, для анализа нужны следующие 4 символа, пример
Когда заголовок будет собран, отправляем его на ... что там надо с ним сделать
Допусти анализируем дальнейший пакет этого заголовка
Анализ будет продолжаться до тех пор пока либо запас счетчика не закончится либо не придет следующий символ $
Устроит пример?

Каждый подходит к этому по своему, в зависимости от поставленной задачи.

Re: stm32f4 usart приём данных в прерывании и DMA

Вс авг 29, 2021 10:16:22

Dimon456 писал(а):Пойдет пример?

Где в этом примере показана работа ПДП? Речь в посте про ошибке при обмене с использованием ПДП.

У меня ПДП обслуживает Модбас. Если нужен текстовый ввод-вывод, то это другая пьянка. И да, полноценно использовать DMA получится только в МК с полноценным UART, а не огрызком как в F103. Если у тебя обработка информации от UART является основной деятельностью программы и занимает много времени, то смотри в сторону МК с полноценным UART. Для понимания того, о чём я сказал, сравни возможности UART в F103 и, например, в F091 и F745.

Re: stm32f4 usart приём данных в прерывании и DMA

Вс авг 29, 2021 10:42:04

tonyk, про какие ошибки вы торочите? Это не I2C, что бы можно было анализировать ошибки конфликта шины.
То что он UART настроил на 19200, а узел отправляет на 57600 - разве это ошибка?

В конце каждого пакета узел может отправлять вам какую нибудь контрольную сумму, и если на стороне приема контрольная сумма не совпала, вы можете считать это за ошибку. В большинстве случаев используются выводы rx tx.
А то что провод на половину припаян, да еще и болтается в воздухе, то есть контакт то нету контакта, какие тут ошибки будут?

Без озвучивания ТЗ вы даже не знаете что ТС нужно.

Ему был нужен пример, я дал пример. У ТС во всем ошибки и да же тут.

Re: stm32f4 usart приём данных в прерывании и DMA

Вс авг 29, 2021 14:32:18

tonyk, про какие ошибки вы торочите? Это не I2C, что бы можно было анализировать ошибки конфликта шины.

Про те ошибки, что указаны для UART. Их там с десяток. Плюс ошибки DMA. Перечень есть в RM.
Анализировать ошибки полезно, потому что они характеризуют качество связи, что очень нелишне в процессе наладки и поиска неисправностей в процессе эксплуатации.

Re: stm32f4 usart приём данных в прерывании и DMA

Чт сен 09, 2021 22:40:46

Всё так аморфно.Пример приёма строки по прерыванию USART?

Re: stm32f4 usart приём данных в прерывании и DMA

Пт сен 10, 2021 08:33:42

tonyk, как все предсказуемо
ivan dimir писал(а):Пример приёма строки по прерыванию USART?

Re: stm32f4 usart приём данных в прерывании и DMA

Пт сен 10, 2021 11:00:18

Всё так аморфно.Пример приёма строки по прерыванию USART?

Тебя во всех поисковиках забанили? Ваще народ обленился.

Re: stm32f4 usart приём данных в прерывании и DMA

Пт сен 10, 2021 11:08:01

В сниппетах от ST под F0 есть примеры работы USART с DMA, оттуда легко портировать на любую серию при помощи минимума чтения RM.
Но, видимо, ТС — не читатель.

Re: stm32f4 usart приём данных в прерывании и DMA

Пт сен 10, 2021 19:39:29

Всё так аморфно.Пример приёма строки по прерыванию USART?

Тебя во всех поисковиках забанили? Ваще народ обленился.

Неправда Только в Паяльнике.Скажите а зачем форумы?

Добавлено after 22 minutes 24 seconds:
А вообще я понял так пока сам не сконструируешь(не настроишь) не поймёшь.По прощче.

Re: stm32f4 usart приём данных в прерывании и DMA

Пт сен 10, 2021 19:53:22

usart+DMA целесообразно применять там где передаются килобайтные пакеты, между которыми есть интервал что бы можно было применить прерывание IDLE.

А что тебе конкретно нужно, х... тебя знает.

Для начало ТЗ озвучь, что бы тебе начали помогать.

Re: stm32f4 usart приём данных в прерывании и DMA

Пт сен 10, 2021 20:31:58

usart+DMA целесообразно применять там где передаются килобайтные пакеты, между которыми есть интервал что бы можно было применить прерывание IDLE.

А что тебе конкретно нужно, х... тебя знает.

Для начало ТЗ озвучь, что бы тебе начали помогать.

Что за такое прерывание usart IDLE.? И можно ли одновременно настраивать прерывание по usart и дма? чтобы передать по ДМА?

Re: stm32f4 usart приём данных в прерывании и DMA

Сб сен 11, 2021 07:22:43

ТЗ озвучь.

Re: stm32f4 usart приём данных в прерывании и DMA

Сб сен 11, 2021 13:25:45

В общем случае по DMA только передачу удобно делать, т.к. прием - неизвестно какой длины. А чтобы и прием организовать по DMA, как уже сказали, нужно прерывание IDLE использовать, т.е. уже какой-то уродский модбас получается с обязательными паузами в конце пакета данных.

Re: stm32f4 usart приём данных в прерывании и DMA

Вс сен 12, 2021 20:34:05

ivan dimir, ну как успехи в освоении?
Вот тебе паказуха
И вот шпротеус, поиграться
uart_test.zip
(17.99 KiB) Скачиваний: 110

Re: stm32f4 usart приём данных в прерывании и DMA

Вс сен 12, 2021 22:07:29

Под F103 с DMA только на прием и я могу пример показать.
А под F0 интересней: там есть прерывание по символу, так что, можно и на прием DMA использовать без необходимости вводить паузы между пакетами: просто по '\n' будет вызываться прерывание, которое и выставит флаг готовности принятой строки, заодно поменяв приемный буфер на второй (при двойной буферизации, а при желании и куче оперативки можно хоть 100 буферов выделить).
Ответить