ModbusRTU и STM32F103

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Добрейшего времени суток всем.
Понадобилось мне запустить ModbusRTU на ранее готовом устройстве, МК STM32F103, через UART2, порты А2 и А3.
Прошу индейку как лучше это сделать. Так как устройство физически уже есть и заточено под некоторые задачи, то внутренние аппаратные ресурсы очень ограничены.
Таймер 2 однозначно занят, запускается не всегда и от внешнего события. Другие таймеры не хотелось бы выделять под это дело, но рассмотреть можно.
Фиксировать и анализировать время приема каждого байта не вариант, так как уверен что не хватит ресурсов, чтобы укладываться вовремя. Сейчас скорость 9600 и понижать не хочется.

Сейчас я сделал через событие IDLE UART и DMA. В принципе работает. Но я нарушаю стандарт RTU. Вместо интервалов <1.5 и >3.5 между байтами и пакетами соответственно, у меня получается <1 и >1.
Если нечего не придумается, то я так и оставлю. Но все же хотелось бы соответствовать стандарту.

Спасибо.

З.Ы. Modbus ASCII не хочу.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

А не получится его на G0 заменить? По ногам более-менее должно совпадать по идее. А у G0 есть аппаратная поддержка этого идиотского модбаса.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Это не хвост, это антенна
Сообщения: 1341
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Z_h_e писал(а):Но я нарушаю стандарт RTU. Вместо интервалов <1.5 и >3.5 между байтами и пакетами соответственно, у меня получается <1 и >1.
Для соблюдения требований протокола нужно задействовать таймер или использовать МК с полноценным UART, имеющим RTO, а не кастрата как в F1. Для STM32F103 оставь приём по IDLE и забей. Работает вполне нормально на небольших скоростях или при обменен с узлами, отправляющими через DMA или FIFO.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Eddy_Em писал(а):А не получится его на G0 заменить?
Не.Это невозможно.
tonyk писал(а):приём по IDLE и забей
Наверное, но вдруг существуют какие-то решения, а я не знаю. Например, как-ниубдь умудрится 3 раза подряд взвести флаг IDLE.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Сообщения: 1341
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Z_h_e писал(а):как-ниубдь умудрится 3 раза подряд взвести флаг IDLE.
Никак он три раза _сам_ не установится. На F1 других решений нет.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Z_h_e, а почему вдруг невозможно? Нужно много операций деления что ли? Или по производительности не канает?
Если что, есть еще F303, у которого тоже на аппаратном уровне поддержка модбаса. Там уж точно по ногам практически 1-в-1 получается F103, сам делал не так давно универсальную "вундервафлю" для тестирования F0x2, F103 и F302/303 в корпусе LQFP64. Плюсом является бóльшая производительность, наличие флоатов, наличие ЦАПов и еще разнообразные фишки. По цене, конечно, не 50 рублей, как F103C6T6, но рублей в400 уложиться можно (если LQFP-48).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Менять МК не вариант однозначно.
Отвлекать МК на принятие каждого байта, при наличии DMA, имхо зло. Да еще модбас планируется постоянно молотящий.
Я что вопрос то задал, вдруг упускаю какое-то интересное и оригинальное решение.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

Я все не пойму, почему МК заменить нельзя?
F103 худшее детище ST!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 145
Зарегистрирован: Пн апр 02, 2012 15:56:23

Сообщение azhel12 »

С учетом но рассмотреть можно опишу пару жутких костылей, до чего дошел:
1) Базовый таймер, настроенный на 3.5, счетчик которого сбрасывается при приеме каждого байта (но придется вешать обработчик на прием или окончание каждого байта DMA)
2) Если найдется свободный таймер общего назначения, то можно его настроить на 3,5 и линию RX завести на вход ETR, у таймера настроить триггер на сброс (фронт тут уж без разницы, наверно), каждый бит посылки будет счетчик сбрасывать.
3*(чисто посмеяться): завести еще на один UART линию RX и настроить его таким образом, чтобы по DMA он сбрасывал счетчик таймера, настроенного на 3.5.

Для пунктов 2-3, разумеется, надо таймеры активировать, но, наверно, ничего критичного не случится, если UART при приеме первого байта в прерывании эту операцию выполнит и тут же сам себе прерывание отключит.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

azhel12, да первая мысль была запускать и сбрасывать таймер по спаду на входе RX в режиме однократного счета. Однако таймер занят и ни один ремапинг не подходит.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1341
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Z_h_e писал(а): Однако таймер занят
Если твой девайс будет опрашивать мастер, не допускающий больших пауз между байтами, то IDLE будет нормально работать.
Eddy_Em писал(а):F103 худшее детище ST!
Согласен. Хотя начинал изучение STM32 именно с F103. Потом сравнил с другими сериями, после чего отказался от линейки F1.

Если в проекте изначально предполагается много работы через UART, то нужно брать МК с полноценным UART, а не кастратом как во всей линейке F1. МК с полноценным UART есть во всех линейках, кроме F1.
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Сообщение a797945 »

Вам нужна задержка без tim?

- "два" байта "левым" уартом;
- да, любой процесс на свободной периферии, устраивающий вас по времени и способу использования, флаги - хоть выполнения, хоть таймаута;
- время преобразования ацп - то же задержка; (это так, до кучи)
- две свободные ноги и цепочка rc; :))
за шутку извиняюсь, навеяло - схемы конца 70-х часто перед глазами.

сфотографировать можно и на спичечный коробок, но если "спортом" не заниматься - tonyk прав - по задаче и инструмент.
Открыл глаза
Аватара пользователя
Сообщения: 48
Зарегистрирован: Пн июл 31, 2017 10:53:04

Сообщение Cheeseman »

Имхо, я бы взял библ freeModbus и портировал её. Порт там несложный и работает все четко
Встал на лапы
Аватара пользователя
Сообщения: 145
Зарегистрирован: Пн апр 02, 2012 15:56:23

Сообщение azhel12 »

[uquote="Cheeseman",url="/forum/viewtopic.php?p=4353993#p4353993"]Имхо, я бы взял библ freeModbus и портировал её. Порт там несложный и работает все четко[/uquote]Тут дело не в этом, модуль UART в F103 в принципе не имеет возможности аппаратно отслеживать простой в 3,5 байта, как того требует стандарт.
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

[offtop]А весь прикол ситуации в том, что автор вместо какого-либо вменяемого современного протокола (да пусть даже CANopen) выбрал убогое дерьмо мамонта, которое еще 30 лет назад закопать надо было![/offtop]
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Eddy_Em, ты не знаешь ни схемы девайса, ни назначения, почему нет возможности сменить МК и остальную схематехнику и пр. Но ты все решил и сделал выводы.
UART древнее модбас, закапывай и его тоже.
Интересно, на автофоруме, на вопрос что подкрутить чтобы приора бензин меньше жрала, ты бы посоветовал Лексус взять?
Я всего-лишь спросил
вдруг существуют какие-то решения, а я не знаю
. Ты предложил сменить МК, я тебя и других услышал. Это сделать нельзя, вот ещё раз отвечаю, что это обсуждать?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1341
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Eddy_Em писал(а):выбрал убогое дерьмо мамонта, которое еще 30 лет назад закопать надо было!
Просто сидя в анальном закутке очень сложно понять, почему этот мамонт живее всех протоколов от Eddy_Em.

ТС, не слушай Eddy_Em. Он старый, поэтому умные слова, которые он не понимает, его раздражают. :)))

Добавлено after 3 minutes 22 seconds:
Cheeseman писал(а):Имхо, я бы взял библ freeModbus и портировал её. Порт там несложный и работает все четко
Ага, только с одним UART. ТС ведь не уточнял, сколько у него портов требуют обслуживания Modbus. Касаемо чёткости: в этой библе косяк с койлами исправили?
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Я тоже не молод :(. Скоро пердеть буду чаще, чем проект собирать.:) Можно 100500 примеров привести нового современного промышленного оборудования с модбасом. И пообсуждать это. Очередной топик будет содержать все что угодно, кроме сути.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Это не хвост, это антенна
Сообщения: 1341
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Z_h_e писал(а):Скоро пердеть буду чаще, чем проект собирать.:)
:)))

Одной из причин моего ухода с F1 было отсутствие у него полноценного UART. Когда у тебя один порт с Модбас на 9600, то пофиг, чё и как там реализовано. А когда у МК и так загрузка большая, да ещё и 4-6 портов на высоких скоростях, то уже ищешь МК с полноценным UART, чтобы как можно меньше грузить процессор в МК. Полноценный UART умеет и сигналом DIR трансивера управлять, и задержки после его переключения на передачу сам отрабатывать, и 3.5 символа сам отмерять. В итоге получается 1 прерывание на приём посылки, и 2 на отправку.
Ответить

Вернуться в «ARM»