STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

Классно читаете референсы я посмотрю :)))
The F0 USART provides best-in-class added features:
●Modbus communication

Вы об этом? Написано что юарт "хорош для модбаса", ни слова не вижу что там аппаратный блок обработки запросов/автомкатического подсчета контрольной суммы/регистра с адрессом модбаса. Я посмотрел эту серию в кубе - там только аппаратный "контноль потока" для 485. 485 это интерфейс. Модбас этопротокол. Одно к другому может иметь, а может и нне иметь отношения.

Добавлено after 3 minutes 20 seconds:
Support for ModBus communication
–Timeout feature
–CR/LF character recognition
Ок, "улучшенная" поддержка. До аппаратного блока как-то не тянет все равно.
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

Охренеть, вас не смущает что уже реализованно и давно работает?
Как модбас RTU так и ASCIi.
Ok завтра носом ткну.
Да и калокуб свой засуньте, вам сказано. RM.
Таймаут настраиваемый на длину в битах , с прерыванием.
Для RTU уже за глаза. Прерывание по приему определенного символа, а это ASCIi. Плюс модуль CRC с кучей опций.
Вы RM на какой чип смотрите? Я говорю в частности о F042 и F072 .
Реклама
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: STM32 новичку в ARM что к чему

Сообщение arkhnchul »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3441188#p3441188"]Дело в том, что готовность установится только когда буфер заполнится[/uquote]или по таймауту. Никто не заставляет выставлять ему такие гигантские значения)
[uquote="Ярослав555",url="/forum/viewtopic.php?p=3441188#p3441188"]Если на юарт вешать модбас, то там к нему в пару на каждом байте запускается таймер, чтобы отловить 3,5 символа паузы[/uquote]не менее 3.5 символов. Оно прекрасно работает с парой-тройкой тиков системного таймера. UPD раскопал ошметки старого проекта - idle line тоже прокатывает.
[uquote="Ярослав555",url="/forum/viewtopic.php?p=3441188#p3441188"]Во всяком случае, есть DMA, с кольцевым буфером, все как любите. +активируем прерывание самого юарта, в обработчик засовываем запуск/перезапуск таймера, и когда он протикал наших 3,5 символа - разбираем буфер. Я так понимаю, счетчик байтов DMA тоже как-то можно подцепить, так что начало следующего пакета будет известно. Все так просто, сам не ожидал.[/uquote]не обязательны там счетчики так-то. Сколько у нас байт должно быть в PDU - известно по первым максимум шести.


[uquote="dosikus",url="/forum/viewtopic.php?p=3441275#p3441275"]Ok завтра носом ткну.[/uquote]ненене, Девид Блейн, вы вот в это ткните - [uquote="dosikus",url="/forum/viewtopic.php?p=3441196#p3441196"]в новых линейках есть аппаратная поддержка модбас[/uquote]я чот в RM-е наблюдаю только "The control part of the protocol (address recognition, block integrity control and command interpretation) must be implemented in software". Таймауты чот на "поддержку модбаса" не тянут. Оно бы хоть первые два пункта выполняло, ну хоть один из них :dont_know:
Последний раз редактировалось arkhnchul Вт авг 21, 2018 23:17:40, всего редактировалось 1 раз.
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

и я RM смотрел. Ну подождем, пускай ткнет носом, я только за.
не обязательны там счетчики так-то. Сколько у нас байт должно быть в PDU - известно по первым максимум шести.
но в кольцевом буфере неизвестно где начало пакета, я это имел ввиду - запоминать где он остановился, чтобы потом понять где начало следующего. Ну или обнулять его каждый раз, тоже можно.
Я однажды столкнулся с реализацией, когда применяли 9 битный обмен данными, и этот девятый бит выставляли только в первом байте пакета. Приемник гнал данные в кольцевой буфер и когда видел 9й бит запоминал позицию в буфере. А обработчик потом разбирал посылку. Этот протокол не предполагал деления пакетов по таймаутах, данные шли сплошным потоком. Был изобретен еще до распостранения модбаса по территории СНГ, еще где-то в 90х. Работало это все на собственных "ПЛК", я видел на основе атмелов, древнее пока не попадалось. Применялось для автоматизации элеваторов. Еще наверное несколько штук таких элеваторов работают.
Реклама
Эиком - электронные компоненты и радиодетали
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: STM32 новичку в ARM что к чему

Сообщение arkhnchul »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3441298#p3441298"]но в кольцевом буфере неизвестно где начало пакета, я это имел ввиду - запоминать где он остановился, чтобы потом понять где начало следующего. Ну или обнулять его каждый раз, тоже можно[/uquote]какбе кольцевой буфер такое дефолтно подразумевает - как для пишущего, так и для читающего позиции известны (последний записанный и извлеченный элемент соответственно)
[uquote="Ярослав555",url="/forum/viewtopic.php?p=3441298#p3441298"]Я однажды столкнулся с реализацией, когда применяли 9 битный обмен данными, и этот девятый бит выставляли только в первом байте пакета.[/uquote]Древние Предтечи горазды на выдумки были :dont_know:


и этсамое, для устранения возможных непониманий: я таки считаю, что железку - на принципиальном уровне, как оно там вообще процессы внутри происходят, а не до каждого бита в регистрах - понимать нужно. Да, при таковом понимании можно все нужное и с CMSIS-ом (а то и без оного) сделать, но готовые библиотеки - будь то кто угодно из SPL/HAL/LL - позволяют не устраивать на каждый чих непременный восход солнца вручную. И не только к stm32 относится, ага.
Реклама
Аватара пользователя
afz
Опытный кот
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Re: STM32 новичку в ARM что к чему

Сообщение afz »

arkhnchu писал(а):кто-то мешает указать размер буфера, а не ожидаемого блока?
Зачем? Чтобы иметь сомнительное удовольствие разбирать блоки по кусочкам?
arkhnchu писал(а):Вот зачастую как будто не пофигу, где сидеть и тупить - в while(1) в main-е или в ожидании приема)
Нормальные программы в цикле while(1), обычно, проверяют флажки событий и, при появлении оных, выполняют какие-то действия. Быстрые действия, если что.
arkhnchu писал(а):какбэ этсамое, на блокирующих методах все не заканчивается
Это уже лучше. Но блок никуда не делся.
arkhnchu писал(а):или по таймауту. Никто не заставляет выставлять ему такие гигантские значения
По-любому, это годится только когда весь обмен полностью контролируется моей программой. Как в старые добрые времена на Фортране: дал команду "прочитать перфокарту", дождался, когда система это сделает, что-то посчитал. Потом то же самое проделал со следующей перфокартой... И неважно, дожидался окончания чтения сам, или система просто не отдала тебе управление на время чтения карты.

А USART - это, все-таки, в первую очередь, нечто, вроде терминала. Не смотрел конкретно тот bluetooth, но у большинства железок, с которыми общаются через USART (которые я видел), обмен организован в терминальном стиле. Формально - используются записи неопределенной длины с разделителями (CR), часто с применением дополнительных управляющих символов ASCII, вроде Ctrl/C или Ctrl/Z. В общем, все в классическом стиле любимой PDP-11.
arkhnchu писал(а):можно все нужное и с CMSIS-ом (а то и без оного) сделать, но готовые библиотеки - будь то кто угодно из SPL/HAL/LL - позволяют не устраивать на каждый чих непременный восход солнца вручную
Естественно. Только вот HAL-дравер USART'а сконструирован крайне неудачно.
dosikus писал(а):Да и калокуб свой засуньте, вам сказано.
Кубики, dosikus, кубики. Детские игрушки такие. Посмотри, как красиво они летают у этого CubeMX на About'е. И из них предлагается строить рабочие программы.

Не помню, кто сказал, что если бы строители строили дома так, как программисты пишут программы, то первый же залетевший дятел разрушил бы цивилизацию. А теперь представь себе, что будет, если программы будут собраны из таких кубиков? :?

Добавлено after 1 hour 19 minutes 28 seconds:
Кстати, люди, а где берут руководства по этим самым библиотекам? HAL, LLL, да и SPL, наконец? Бегло поискал на st.com, поиск выдает кучи мусора, и все!.. То есть, полный вопрос звучит так: что спросить у поисковика ST ?
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3441290#p3441290"]Таймауты чот на "поддержку модбаса" не тянут. Оно бы хоть первые два пункта выполняло, ну хоть один из них :dont_know:[/uquote]

Господа, вы не слишком много жрать стали?
Вам приема пакета уже мало, АГА. Посмотрите на реализацию фримодбас -на выкрутасы с определением пакета.
27.5.8 Modbus communication using USART
The USART offers basic support for the implementation of Modbus/RTU and Modbus/ASCII
protocols. Modbus/RTU is a half duplex, block transfer protocol. The control part of the
protocol (address recognition, block integrity control and command interpretation) must be
implemented in software.
The USART offers basic support for the end of the block detection, without software
overhead or other resources.
Modbus/RTU
In this mode, the end of one block is recognized by a “silence” (idle line) for more than 2
character times. This function is implemented through the programmable timeout function.
The timeout function and interrupt must be activated, through the RTOEN bit in the
USART_CR2 register and the RTOIE in the USART_CR1 register. The value corresponding
to a timeout of 2 character times (for example 22 x bit duration) must be programmed in the
RTO register. when the receive line is idle for this duration, after the last stop bit is received,
an interrupt is generated, informing the software that the current block reception is
completed.
Modbus/ASCII
In this mode, the end of a block is recognized by a specific (CR/LF) character sequence.
The USART manages this mechanism using the character match function.
By programming the LF ASCII code in the ADD[7:0] field and by activating the character
match interrupt (CMIE=1), the software is informed when a LF has been received and can
check the CR/LF in the DMA buffer.
Конфигурим DMA на буфер чУть больший максимальной транзакции , конфигурим USART на прерывание от таймаута.
Конфигурим CRC.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

Нет МК, кроме STM32, и досикус пророк Его! :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: STM32 новичку в ARM что к чему

Сообщение oleg110592 »

[uquote="afz",url="/forum/viewtopic.php?p=3441358#p3441358"]Кстати, люди, а где берут руководства по этим самым библиотекам? HAL, LLL[/uquote]
на родном сайте, например UM1725 User Manual Description of STM32F4 HAL and LL drivers
https://www.st.com/content/ccc/resource ... 105879.pdf
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

ARV, ну а по делу? Или модбас пролетел мимо тебя? :)))
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

[uquote="dosikus",url="/forum/viewtopic.php?p=3441381#p3441381"]Посмотрите на реализацию фримодбас -на выкрутасы с определением пакета.[/uquote]
Я на него уже второй год в каждом проекте смотрю, ну когда новый набрасываю, по крайней мере.
Уважаемый! Вы с ПЛК работали? Вот там "аппаратный" модбас. Задал адрес, порт, скорость и у тебя в регистрах данные. Все. Тебе больше не нужно ничего знать - ни црц, ни размеров буферов, ни номеров функций, ни кодов ошибок - завелось и работает.
Омроновский финс протокол так вообще сказка: не надо никаких регистров выделять как в модбас - топологию сети в конфигураторе настроил и HMI становится доступна тупо вся память данных PLC. Если захотел подцепить какую переменную на экран вообще не надо в ПЛК лезть если знаешь ее адрес в его памяти. С такой сетью строить автоматизированную линию одно удовольствие.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

dosikus писал(а):ну а по делу? Или модбас пролетел мимо тебя?
пролетел, пролетел - я ж не профессионал, а любитель, зачем мне модбас?!
но ведь я верно уловил суть всех твоих речей в любой теме! это религия...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3441456#p3441456"]Вот там "аппаратный" модбас. Задал адрес, порт, скорость и у тебя в регистрах данные. Все. Тебе больше не нужно ничего знать - ни црц, ни размеров буферов, ни номеров функций, ни кодов ошибок - завелось и работает.[/uquote]
Уверовали?
С какого хрена закрытая от юзера реализация означает аппаратное?
Здесь же, самая трудоемкая часть -вычленение пакета и расчет CRC ИДЕТ АППАРАТНО.
В прерывание по таймауту - получаем целиком пакет в буфере + в счетчике размер пакета.
Если разбирались с фримодбасом , то знаете как там обрабатывается пакет- сплошное софтодрочерство...
Омроновский финс протокол так вообще сказка: не надо никаких регистров выделять как в модбас - топологию сети в конфигураторе настроил и HMI становится доступна тупо вся память данных PLC. Если захотел подцепить какую переменную на экран вообще не надо в ПЛК лезть если знаешь ее адрес в его памяти.

Я понимаю что для вас ПЛК -черный ящик и тайна за семью печатями, но нельзя же путать теплое с мягким.
Причем здесь конечная реализация и работа отдельного модуля?
Или вы полагаете что в ПЛК не софтовая реализация а какая-то фантастически -аппаратная? Наивный чукотский юноша.

[uquote="ARV",url="/forum/viewtopic.php?p=3441478#p3441478"]суть всех твоих речей в любой теме! это религия...[/uquote]
Попробуй все же лечиться пока не поздно..
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

[uquote="dosikus",url="/forum/viewtopic.php?p=3441513#p3441513"]Если разбирались с фримодбасом , то знаете как там обрабатывается пакет- сплошное софтодрочерство...[/uquote]
Софтовый (имею ввиду то что жрет много процессорного времени) там только подсчет контрольной суммы. Прием-передача на прерываниях, таймаут на таймере и прерывании. Ну обработка пакета само собой софтовая, как иначе.
Вы так громко заявили - АППАРАТНЫЙ МОДБАС. Я ожидал большего. Блок счета CRC я видел и раньше в каких-то моделях.
Да и не CRC у меня жрет ресурсы обычно. Проблема банальная - считать арифметику с плавающей запятой. Вот сейчас домучиваю один долгострой на 8битной хмеге - реальная проблема уложиться в цикл 20мС и еще фоновые задачи вроде модбаса, 1провод, лог.машины успеть.
Моделей со встроенным мат.сопроцессором не предвидится? Хотя я думаю 32битное ядро и так бы справилось намного быстрее.
На стм я модбас еще не поднимал, но из увиденного - задача плевая. Да и дорожка протоптана - видел статьи как правильно это делать.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3441522#p3441522"]Вы так громко заявили - АППАРАТНЫЙ МОДБАС. Я ожидал большего.[/uquote]

Ну вы хоть читайте внимательней. Озвучено было - аппаратная поддержка модбас...
И кстати таймаут более приемлем чем таймер. Таймаут привязан к таймингам USART...

ps/ Модуль CRC в F0 не обгрызенный как в F1...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение Аlex »

[uquote="dosikus",url="/forum/viewtopic.php?p=3441524#p3441524"]Озвучено было - аппаратная поддержка модбас...[/uquote]
Странные у тебя понятия, Лёх.
У меня в одном проекте есть дисплей (WG19264A), там управление безумное - нужно дёргать 3-мя CS'ами, через каждые 64 байта команда с передёргиванием RS'а, и т.д... Я весь ногодрыг полностью повесил на DMA, только в буфер данные закидываю и всё.
И что теперь, можно на всю страну громко заявлять, что в этом МК есть аппаратная поддержка этого дисплея ? :)))
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: STM32 новичку в ARM что к чему

Сообщение arkhnchul »

[uquote="dosikus",url="/forum/viewtopic.php?p=3441513#p3441513"]самая трудоемкая часть -вычленение пакета и расчет CRC ИДЕТ АППАРАТНО.[/uquote]определить границу пакета - самая простая часть. И не надо на фримодбас кивать, мне он тоже не нравится.
а с CRC там для аппаратного модуля все равно каждый байт руками подсовывать приходится.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3441540#p3441540"]определить границу пакета - самая простая часть. И не надо на фримодбас кивать, мне он тоже не нравится.
а с CRC там для аппаратного модуля все равно каждый байт руками подсовывать приходится.[/uquote]

АГА а DMA там для галочки...

Добавлено after 1 minute 48 seconds:
[uquote="Аlex",url="/forum/viewtopic.php?p=3441536#p3441536"]И что теперь, можно на всю страну громко заявлять, что в этом МК есть аппаратная поддержка этого дисплея ? :)))[/uquote]


Заявлять или нет это твое дело, аппаратным оно от этого не перестанет быть.
В свою очередь предложу тебе внимательно еще раз перечитать сие:
27.5.8 Modbus communication using USART
The USART offers basic support for the implementation of Modbus/RTU and Modbus/ASCII
protocols. Modbus/RTU is a half duplex, block transfer protocol. The control part of the
protocol (address recognition, block integrity control and command interpretation) must be
implemented in software.
The USART offers basic support for the end of the block detection, without software
overhead or other resources
.
Если хочешь подробно, на пальцах разрисую механизм...
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: STM32 новичку в ARM что к чему

Сообщение arkhnchul »

[uquote="dosikus",url="/forum/viewtopic.php?p=3441543#p3441543"]АГА а DMA там для галочки[/uquote]а нельзя ли глянуть на реализацию модбасовского crc16 с аппаратным блоком crc и dma? Я когда его тыкал - не придумал, как сие осуществить. Гугол тоже говорит о неудачных плясках вокруг него и отказ от dma (а то и от аппаратного модуля вообще).
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

arkhnchul , может все -таки на F1? Там действительно не такой гибкий модуль.

А " грабли" были единственные - к CRC_DR надо обращаться как к байту...
Ответить

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