Перейти к содержанию
    

Здравствуйте, необходимо реализовать обмен данными между мк stm32 и пк посредством ethernet.

МК передает данные с датчиков, АПЦ и тд, ПК передает управляющие сигналы - зажечь, потушить светодиод и тд. МК - stm32f746 dicovery, PHY - LAN8742. Предполагаю использовать CubeMX, соответственно HAL, т.к. stm32f7, IDE - STM32CubeIDE, в качестве стека LWIP без ОС (читал разные мнения относительно применения FreeRTOS при использовании LWIP, пока решил не прикручивать его сюда).

Перечитал кучу информации, форумов, но ничего толком не нашел, что можно было бы использовать в качестве основы, т.к. с Ethernet сталкиваюсь впервые. МОжет кто сможет помочь информацией, как должна выглядеть архитектура такой программы, код, примеры? Вроде понимание теории есть, проблемы с реализацией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте. Предлагаю посмотреть Cyclone TCP https://www.oryx-embedded.com/products/CycloneTCP

В репозитории есть готовые примеры, так что старт будет довольно легким.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

48 минут назад, .crz сказал:

Здравствуйте. Предлагаю посмотреть Cyclone TCP https://www.oryx-embedded.com/products/CycloneTCP

В репозитории есть готовые примеры, так что старт будет довольно легким.

 

Спасибо за совет, но хотелось бы использовать что-то более распространенное, желательно поддерживаемое самим разработчиком, первый раз слышу об Cyclone TCP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас же LWIP  на борту будет. Вот по нему и ищите примеры. Распространённая штука. Ну и как бы устройство TCP/IP само собой от зубов должно отлетать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

38 минут назад, VladislavS сказал:

У вас же LWIP  на борту будет. Вот по нему и ищите примеры. Распространённая штука. Ну и как бы устройство TCP/IP само собой от зубов должно отлетать.

Из примеров по нему я нашел по сути только эхо, но нигде не могу найти какие настройки задавать в кубе, какие функции прописывать и использовать в коде, грубо говоря рабочий пример передачи данных, наподобие поставленной задачи, который можно перебрать под свои нужды

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, DDDDRRRRR сказал:

в качестве стека LWIP без ОС

Есть в нем пример web-сервера именно в такой конфигурации. Чем не устраивает? Вот вбил в гуглю "lwip sample" и прямо первая ссылка.

1 час назад, DDDDRRRRR сказал:

МК передает данные с датчиков, АПЦ и тд,

То есть вам либо надо использовать websockets, либо не нужен web вообще. В последнем случае непонятно, в чем сложности? Соединились и шлите себе данные в обе стороны, протокол поверх TCP самопальный. Это вообще нижний уровень любого примера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Сергей Борщ сказал:

То есть вам либо надо использовать websockets, либо не нужен web вообще

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

4 минуты назад, Сергей Борщ сказал:

протокол поверх TCP самопальный

В этом основные сложности, что должен содержать этот самопальный протокол, какие проверки данных, какую информацию добавлять при отправке пакета и тд, действия в случае ошибок. Просто нет пока понимания архитектуры приложения и за что отвечает LWIP ,а какие функции необходимо дописывать самому

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 минут назад, DDDDRRRRR сказал:

что должен содержать этот самопальный протокол

То, что вам нужно.

26 минут назад, DDDDRRRRR сказал:

какие проверки данных

Заботу об ошибках берет на себя TCP. Считайте, что это такой безошибочный COM-порт с определением выдергивания кабеля. 

26 минут назад, DDDDRRRRR сказал:

какую информацию добавлять при отправке пакета и тд

Протокол потоковый, по дороге пакеты могут фрагментироваться/дефрагментироваться, поэтому придется самостоятельно разбираться, где заканчивается одно сообщение и начинается следующее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, DDDDRRRRR сказал:

мне же необходимо передавать пакеты с программку на пк наподобие терминала

Это называется "соединение TCP-сокет". Обмен внутри TCP-сокета - байт-ориентированный. Если нужны кадры - это уже делаете сами, поверх него, собираете кадры из потока байт. Любым удобным протоколом. Гарантия доставки и правильность порядка байт этого байтового потока гарантируется TCP-стеком (как уже сказали выше).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, DDDDRRRRR said:

Из примеров по нему я нашел по сути только эхо, но нигде не могу найти какие настройки задавать в кубе, какие функции прописывать и использовать в коде, грубо говоря рабочий пример передачи данных, наподобие поставленной задачи, который можно перебрать под свои нужды

В репозитории куба есть примеры: STM32Cube_FW_F7_V1.15.0\Projects\STM32756G_EVAL\Applications\LwIP. Вам стоит посмотреть TCP Echo client и TCP Echo server.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неплохо получается freemodbus+freertos+lwip. https://www.embedded-experts.at/en/produkt/modbus-slave-evaluation-version/  Без проблем зарегистрироваться и скачать. В eval версии полностью исходники и примеры для STM32 под STM32CubeMX. На первое время отладку на ПК можно делать через Modbus Poll. Датчики повесить на Inputs,  управляющие сигналы на Coils, настроечные параметры  - Holdings, в разборе Coils обеспечить вызов функций. Доступ к переменным через Union

union{
  uint16_t arr[10];
  struct{
   uint16_t  reg1;
   uint16_t reg2;
    //
  }
  } mbHoldings;

Модбас работает через mbHoldings.arr, программа через mbHoldings.reg1 и тд

 

ps. Есть перевод UM1713 на русский http://pro-interes.com/wp-content/uploads/2020/02/LwIP_TCP_IP_stack_descriptionRus.pdf

Про Modbus можно почитать тут https://habr.com/ru/post/281430/

И рекомендую поставить сниффер TCP - Wireshark. Без него никак. Там кстати плагин modbus тоже есть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/12/2020 at 9:28 AM, DDDDRRRRR said:

Перечитал кучу информации, форумов, но ничего толком не нашел, что можно было бы использовать в качестве основы, т.к. с Ethernet сталкиваюсь впервые. МОжет кто сможет помочь информацией, как должна выглядеть архитектура такой программы, код, примеры? Вроде понимание теории есть, проблемы с реализацией.

Я бы вам предложил использовать во такую программу - https://www.nxp.com/design/software/development-software/freemaster-run-time-debugging-tool:FREEMASTER
Целиком решение сотоит из программы на PC и программного модуля в вашем микроконтроллере. 
Программный модуль для микроконтроллера там отдельно скачивается.

Поскольку программа работет через последовательный порт (и несколько других  неподходящих интерфейсов), то вам надо еще  дописать в микроконтроллере  отправку данных не в UART, а в TCP соединение. Это элементарно.
А на стороне PC надо будет поставить эту программу - https://www.hw-group.com/software/hw-vsp3-virtual-serial-port для конвертации  TCP соединения в виртуальный последовательный порт.  

Решение очень универсальное, вам после этого даже не надо будет как то специальным образом объявлять переменные в микроконтроллере для доступа к ним из PC.
Они могут импортироваться прямо из ELF файла получаемого после компиляции проекта.  
Дашборды во FreeMaster делаются буквально за минуту:

image.thumb.png.aa2ad3304c0ac4c5a00c2d7747ab0bb6.png

Никакого кодирования, можно без всяких сторонних виджетов. Только конфигурирование и все.
Поток информации получаете в реальном времени.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, AlexandrY сказал:

Я бы вам предложил использовать во такую программу -

Жуть какая! Это что, сегодняшняя мода программирования? Немудрено, что толковых прогеров сейчас днем с огнем...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12.06.2020 в 14:00, Сергей Борщ сказал:

Считайте, что это такой безошибочный COM-порт с определением выдергивания кабеля. 

Считайте, что это такой безошибочный COM-порт БЕЗ определением выдергивания кабеля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

49 минут назад, razrab83 сказал:

Считайте, что это такой безошибочный COM-порт БЕЗ определением выдергивания кабеля.

Если включить keep-alive , то с определением выдергивания кабеля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...