|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
||||||||||||||||
ModBus rtu на stm32f03009.07.2021, 17:54. Показов 4447. Ответов 13
Доброго вечер всем! При портировании freemodbus v1.5 на stm32f0 возникли небольшие проблемы. код ниже, может где-то наделал дел?Код собрал, прошил в мк, правда при тестировании Modbus Poll возникают проблемы. Pool пишет "insufficient bytes recived", действительно если посмотреть на вкладке communication, приходит не весь пакет, встал на линию переходника rs485->ftdi232 (rxtx), залез в терминал, получаю нормальный ответ :01 04 0A 00 01 00 02 00 04 00 08 00 10 8E E3. Запрос был такой 01 04 00 00 00 05 30 90. Т.е. в терминале (terminak v1.9) всё есть, в modbus poll нету. Прикрепляю скрин.
TXE судя по RM "It is cleared by a write to the USART_TDR register"
Да собственно везде ок, иначе стек бы не двbгался. в portserial .c
Вопрос, с таким кто-нибудь сталкивался? Вводит в заблуждение нормальный пакет в терминале. Неправильное подключение исключаю, по причине того, что ничего бы не передавалось.
0
|
||||||||||||||||
| 09.07.2021, 17:54 | |
|
Ответы с готовыми решениями:
13
Modbus RTU на STM32F10x Реализация ModBus rtu на stm32f103 |
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
|
| 09.07.2021, 18:07 [ТС] | |
|
Думаю правильно будет добавить картинку конфигурации чтения Modbus poll
0
|
|
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
||||||
| 09.07.2021, 18:25 [ТС] | ||||||
|
Хммм, дополню ещё. Если поставить тайм-аут 10000 мСек в настройках модбас пула и отладчиком, в течении этого времени прощёлкать отравку байтов, то отправка проходит и пакет приходит весь. Чтож не так-то?
Буд-то бы что-то мешает отправке, хотя других прерываний нет. Вот так, реализованы критические секции, честно содрано с просторов интернета, тут нет rtos.
0
|
||||||
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
|
| 09.07.2021, 23:30 [ТС] | |
|
Подозреваю, что нужно мониторить флаг "TC: Transmission complete", про него сказано в RM. У меня нигде не используется.
Тут я вижу два пути: 1 лобовой - после отправки ждать установки TC. 2 более сложный - TCIE, включить прерывание, по завершению передачи
0
|
|
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
|
| 12.07.2021, 14:08 [ТС] | |
|
Сам спросил, сам отвечу, почему же в терминале всё было видно а в modbus poll нет.
Ответ: Нажимаем connection->advanced снимаем галочку remove echo. Флаги дополнительно чистить в прерывании не надо. UART_IT_RXNE - It is cleared by a read to the USART_RDR register UART_FLAG_TXE - . It is cleared by a write to the USART_TDR register Т.е. по прерыванию прочитали очистили, по прерыванию написали очистили. Чтобы не терять последний байт, мониторим TC: Transmission complete.
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 12.07.2021, 14:13 | |
Сообщение было отмечено skvorc как решение
Решение
skvorc, если у вас rs485 то DE надо поднимать после события TC.
Варанты вы уже озвучили сами: 1) полить TC после последнего байта - не интересно 2) включать прерывание TC после последнего байта, уже лучше но, тоже не интересно. 3) Использовать функцию аппаратного DE, которая есть в USART. Он сам будет прижимать линию DE на время отправки и отпускать по окончинию. Почти лучший вариант. 4) Использовать DMA в связке с аппаратным DE и аппаратным таймером таймаута RTO встроенным в USART для практически полной автоматизации приема-передачи Modbus
1
|
|
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
|
| 12.07.2021, 15:25 [ТС] | |
|
Спасибо за ответ.
@Использовать функцию аппаратного DE, которая есть в USART. Он сам будет прижимать линию DE на время отправки и отпускать по окончинию. Почти лучший вариант." - хорошо бы, всегда лучше не тратить напрасно ресурсы, но PA1 уже занят. Сейчас посмотрю, можно ли его заремапить. Добавлено через 44 минуты Использую USART2. На stm32f0c8 USART2_DE на PA1, у меня на PA12... На USART1 не махнёшь, тогда нужны пины PA10 и PA9, для RX/TX, у меня PA2, PA3. Пока работает "2) включать прерывание TC после последнего байта, уже лучше но, тоже не интересно", по такому варианту. Надо плату переразвести. Спасибо за ответы. Как закрыть тему?
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|
| 12.07.2021, 19:21 | |
|
1
|
|
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
|
| 12.07.2021, 19:22 [ТС] | |
|
Хорошо, спасибо
0
|
|
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
|
| 29.09.2021, 09:04 [ТС] | |
|
"3) Использовать функцию аппаратного DE, которая есть в USART. Он сам будет прижимать линию DE на время отправки и отпускать по окончинию. Почти лучший вариант", переделал, работает.
Чуть позже надо почитать RM и сделать "4) Использовать DMA в связке с аппаратным DE и аппаратным таймером таймаута RTO встроенным в USART для практически полной автоматизации приема-передачи Modbus" Ещё раз спасибо.
0
|
|
|
0 / 0 / 0
Регистрация: 04.10.2021
Сообщений: 2
|
|
| 04.10.2021, 20:52 | |
|
Через STM cube портировали и собирали?
Нужно тоже собрать модбас под stm f0 серии,что то особо не получается.
0
|
|
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
|
| 05.10.2021, 12:55 [ТС] | |
|
Да, сейчас наоборот стараюсь больше через cmsis, так сказать обучение задом наперёд пошло.
Что именно не получается, на каком моменте встали? Под рукой есть чем тестить, переходник uart-usb, modbas pool, осциллограф?
0
|
|
|
0 / 0 / 0
Регистрация: 04.10.2021
Сообщений: 2
|
|||
| 05.10.2021, 20:48 | |||
|
Есть релейная плата из китая У нее 8 входов,8 выходов, собрана на STM32F030. Стандартная прошивка нормально не работает с модбасом,и др.косяки.
0
|
|||
|
0 / 0 / 0
Регистрация: 09.07.2021
Сообщений: 10
|
|
| 05.10.2021, 21:33 [ТС] | |
|
Хмм, первый опыт и сразу в modbus. Ну да ладно, дело не моё, скажу лишь, что отвечать вот прям сразу не смогу, сейчас здоровьем занимаюсь, но чем смогу.
Для начала нужно качнуть даташит и reference manual, хотя бы бегло пройтись по схеме тактирования, посмотреть на плате какие ножки контроллера rx tx у вас используются и подключены к физике 485. Открыть в rm usart, почитать, что-то понять, что-то нет, там же почитать про таймера и их настройки, нам это тоже понадобится. На этом этапе уже кое какие моменты должны в голове проясниться. Далее наступает момент когда вы должны решить, будете всё руками настраивать, через регистры и офсеты, записывая туда настройки периферии, либо пойти путем hal_driver, устраивать вечный дискусс о том что лучше не буду. Скажу, что в дальнейшем всё равно придётся разобраться, что под капотом. Теперь нужно решить, какой ide пользоваться или какая у вас есть в наличии? Вы под windows работаете или Linux? Нужно создать и настроить проект, если вы будете делать это через куб, не составит труда. Потом качаем саму библиотеку, modbus, портируем в проект нужные файлы. Когда будете качать библиотеку, нагуглите, там достаточно подробная инструкция. Там же будет иерархия проекта. Скажу пока, что дальше нужно будет настроить тактирования контроллера (опять-таки hal с кубом и структурами или регистры), тактирование периферии, настроить работу uart, таймера, без него никак, и все эти дела впихнуть в xMBPortSerialInit(). А и вопрос, стандартный прошивка не работает с modbus,вы как определили? А то порой такие смешные ошибки бывают (я про себя).
0
|
|
| 05.10.2021, 21:33 | |
|
Помогаю со студенческими работами здесь
14
Modbus RTU - разобрать сформированный запрос к Slave Modbus RTU через интерфейс rs-485 Modbus rtu или asci на mega128 Modbus RTU помогите разобраться с прогой (прототипом). Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|