ModbusRTU и STM32F103

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

ModbusRTU и STM32F103

Сообщение Z_h_e »

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

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

Спасибо.

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

Re: ModbusRTU и STM32F103

Сообщение Eddy_Em »

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

Re: ModbusRTU и STM32F103

Сообщение tonyk »

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

Re: ModbusRTU и STM32F103

Сообщение Z_h_e »

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

Re: ModbusRTU и STM32F103

Сообщение tonyk »

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

Re: ModbusRTU и STM32F103

Сообщение Eddy_Em »

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

Re: ModbusRTU и STM32F103

Сообщение Z_h_e »

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

Re: ModbusRTU и STM32F103

Сообщение Eddy_Em »

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

Re: ModbusRTU и STM32F103

Сообщение azhel12 »

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

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

Re: ModbusRTU и STM32F103

Сообщение Z_h_e »

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

Re: ModbusRTU и STM32F103

Сообщение tonyk »

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

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

Re: ModbusRTU и STM32F103

Сообщение a797945 »

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

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

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

Re: ModbusRTU и STM32F103

Сообщение Cheeseman »

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

Re: ModbusRTU и STM32F103

Сообщение azhel12 »

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

Re: ModbusRTU и STM32F103

Сообщение Eddy_Em »

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

Re: ModbusRTU и STM32F103

Сообщение Z_h_e »

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

Re: ModbusRTU и STM32F103

Сообщение tonyk »

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

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

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

Re: ModbusRTU и STM32F103

Сообщение Z_h_e »

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

Re: ModbusRTU и STM32F103

Сообщение tonyk »

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

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

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