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

STM32f407VEt6 + ethernet + LWIP плата стартует только через отладку после третьего нажатия RUN (Keil+CubeMX)

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

Потому что я работаю с программным обеспечением, написанном разными иностранными компаниями под связь с железом через СОМ-порт.

Изначально вы писали про чтение ADS1256:

3 часа назад, Xenia сказал:

А такая развязка нужна мне для того, чтобы с помощью АЦП (у меня ADS1256) можно было отрицательные напряжения мерить.

Где именно в ADS1256 находится COM-порт? :wacko2:  У него вроде SPI. По SPI его можно подключить к любой из отладочных плат (выше) и передавать получаемые с него данные далее в TCP-сокет. Зачем тут COM-порт??? - опять неясно... :wacko2:

Если вдруг реально есть какой-то АЦП с COM-портом ( :shok: всё-таки было бы очень любопытно услышать его название?), то его можно подключить к RS-232 или UART также имеющемся на любой из вышеприведённых отладочных плат. И точно также - передавать получаемые с него данные далее в TCP-сокет.

 

Вобщем - ума не приложу зачем нужен "виртуальный COM-порт" в вашей задаче.  :unknw:

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

Я это знаю, но чужую/фирменную программу мне с СОМ-порта на TCP-сокет не переделать.

У вас есть какая-то программа, которая хочет подключаться к какому-то оборудованию как к COM-порту?

Если так, то перевести это подключение в TCP-сокетное не просто, а очень просто: 100500 лет уже существует простой и бесплатный Tibbo Device Server Toolkit (TDST):

https://tibbo.com/soi/software.html

Создаёте в нём виртуальный клиентский COM-порт. И, при открытии данного порта программой, происходит установление TCP-соединения на указанный адрес/порт.

Всё.

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


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

36 минут назад, jcxz сказал:

Изначально вы писали про чтение ADS1256

АЦП, ЦАПы и цифровые порты являются внутренней начинкой импортного железа, но ADS1256 - это моя отсебятина, т.к. более точного АЦП среди продажных модулей я не нашла. Т.е. не в моих силах было изготовить железо один к одному с импортным, а потому мое железо устроено иначе, но выдает данные на компьютер и принимает от него команды в фирменном формате/протоколе, а потому импортная компьютерная программа подмены не видит. Даже когда она при старте запрашивает серийный номер у железа, мое железо отвечает так же, как отвечало импортное.

36 минут назад, jcxz сказал:

Где именно в ADS1256 находится COM-порт? :wacko2:  У него вроде SPI. По SPI его можно подключить к любой из отладочных плат (выше) и передавать получаемые с него данные далее в TCP-сокет. Зачем тут COM-порт??? - опять неясно... 

На связи с импортной компьютерной программной находится только контроллер (я использую что-то из STM32), он и поддерживает с ней разговор, сообщая ей в требуемом формате показания всех измерительных датчиков и исполняя подвластными ему средствами приходящие от компьютерной программы команды (например, переключение клапанов и установку скорости вращения шаговых двигателей, вращающих насосы).

Как легко можно догадаться, клапана и насосы уже давно не те,  что были в фирменном оборудовании. Это же касается и датчиков (манометров и расходомера). Соответственно этому, АЦП и ЦАП у меня тоже другие - те что можно было достать недорого.

36 минут назад, jcxz сказал:

Вобщем - ума не приложу зачем нужен "виртуальный COM-порт" в вашей задаче.

Моей задаче виртуальный порт нужен только затем, чтобы "найти поход" к импортной программе, которая изначально стыковалась со своим железом через реальный СОМ-порт. А железо я могу городить, какое хочу - лишь бы с импортной компьютерной программной оно могло говорить на ее языке и по ее протоколу связи.

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


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

31 минуту назад, Xenia сказал:

Моей задаче виртуальный порт нужен только затем, чтобы "найти поход" к импортной программе, которая изначально стыковалась со своим железом через реальный СОМ-порт. А железо я могу городить, какое хочу - лишь бы с импортной компьютерной программной оно могло говорить на ее языке и по ее протоколу связи.

Тогда TDST + любая отладочная плата с TCP-стеком.

Которая будет коннектится через TCP с TCP-сервером, созданным в TDST. Или принимать соединение от TCP-клиента, созданного в TDST.

Выбор: первое или второе - в зависимости от того - кто именно должен инициировать соединение. И того - насколько толерантна вражеская "компьютерная программа" ко временным не ответам оборудования.

TCP-стек можно взять: либо какой-то стандартный (lwIP); либо взять из примеров кода для данной EVB/МК; либо..... написать свой.  :smile:

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


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

15 минут назад, jcxz сказал:

Тогда TDST + любая отладочная плата с TCP-стеком.

Ну, а импортной компьютерной программе что я скажу? У нее в настройках выбор номера СОМ-порта, через которой она осуществляет связь со своим железом (теперь уже с моим). Она как-то определяет, какие СОМ-порты существуют (хотя виртуальные от реальных не отличает) и предлагает в комбобоксе выбрать какой-то из них. Соответственно этому, TCP-стеки она не видит и работать с ними не будет (не умеет).

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


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

27 минут назад, Xenia сказал:

Ну, а импортной компьютерной программе что я скажу? У нее в настройках выбор номера СОМ-порта

Вижу, что Вы так и не поставили TDST. :unknw:

27 минут назад, Xenia сказал:

Соответственно этому, TCP-стеки она не видит и работать с ними не будет (не умеет).

....и похоже ничего не поняли.  :sad:

 

TDST создаёт виртуальный COM-порт. При открытии которого (если он создан как клиентский) идёт попытка установления TCP-соединения с удалённым TCP-сервером. Если этот COM-порт создан как серверный - то открывается TCP-порт в пассивном режиме (для принятия соединения от удалённого TCP-клиента).

А вот удалённого TCP-сервера или удалённого TCP-клиента вы должны создать сами, подняв TCP-стек на вашей отладочной плате. Когда соединение будет создано, то через полученный TCP-сокет будете передавать данные с платы вражеской программе, и передавать команды от программы к плате.

Скачайте TDST, почитайте описание. Там всё понятно. Ниже - пример виртуального клиентского COM-порта, созданного TDST на моём компе:

image.thumb.png.ade297a202380e414ff8620d7ffa5108.png

Т.е. - при открытии вражеской программой COM52, будет выполнена попытка установления TCP-соединения с сервером, сидящим на 192.168.4.7:13977.

Это вам для примера настроек, с которыми нужно создавать COM-порт. Если нужен серверный - просто меняем "Routing mode" на "Server".

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


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

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

Вижу, что Вы так и не поставили TDST. :unknw:

...

TDST создаёт виртуальный COM-порт.

Хорошо, если есть такая возможность, однако пока моя плата не заработала, ставить TDST мне не на что - у мертвой платы нет IP-адреса.

Именно поэтому я сейчас занята поиском для нее прошивки, т.к. считаю это первостепенной задачей, через которую мне не перешагнуть.

 

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


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

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

Именно поэтому я сейчас занята поиском для нее прошивки, т.к. считаю это первостепенной задачей, через которую мне не перешагнуть.

Видимо - опять ищите в каком-то странном месте, как и плату...  :wink:

Чего её искать? Заходите на свой же FTP; находите IAR\Examples; в них находите examples для STM (например ARM_ST_7.80.4_12495.exe.rar); распаковываете и находите внутри проект для своего МК: ST\STM32F4xx\IAR-STM32F407ZG-SK\WebServer

находите там определения пинов, меняете на свои для своей платы; компилите, запускаете.

Всё - сервер есть, можно TDST настраивать и подключать.  :wizard:

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


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

9 hours ago, Xenia said:

И что во что они конвертируют?

COM-Ethernet. Цена вопроса около 500 рублей. Остановило от покупки отсутствие информации о драйвере виртуального СОМ-порта под Винду.

9 hours ago, Xenia said:

исключительно потому, что так называется удобная удаленная связь через файловые операции

Я понимаю, о чём речь, ибо сам делал такое.

Spoiler
////////////////////////////////////////////////////////////////////////////////

extern "C"
void init_io( void )
{
    // Отключим буферирование всех стандартных файлов ввода-вывода
    // в стандартной библиотеке.
    setvbuf( stdin,  NULL, _IONBF, 0 );
    setvbuf( stdout, NULL, _IONBF, 0 );
    setvbuf( stderr, NULL, _IONBF, 0 );

    // Настраиваем сетевой контроллер W5500.
    wiz =  Wiz5500::getInstance();
    wiz -> setNetInfo( txBufSize, rxBufSize, ip, mac, nm, gw );

    // Cоздаём файловые дескрипторы для наших потоков и отключаем
    // буферирование этих потокоd стандартной библиотекой. Буферированием
    // будем управлять сами:

    // - удалённая консоль;
    lanio = fopen( "/lan/io", "w+" );
    setvbuf( lanio, NULL, _IONBF, 0 );
    lanio_hndl = new SockIO( "lanio", wiz, SockIO::TCP, SockIO::SERVER, 1024, 1024 );
    lanio_hndl -> open( 50002, 0 );
    
    // - консоль логгера;
    lanlog = fopen( "/lan/log", "wb" );
    setvbuf( lanlog, NULL, _IONBF, 1 );

    lanlog_hndl = new SockIO( "lanlog", wiz, SockIO::TCP, SockIO::SERVER, 1024, 0 );
    lanlog_hndl -> open( 50003, 0 );
}

////////////////////////////////////////////////////////////////////////////////

....

fprintf( lanlog, "%d\n", loops );

 

 

8 hours ago, Xenia said:

Моей задаче виртуальный порт нужен только затем, чтобы "найти поход" к импортной программе, которая изначально стыковалась со своим железом через реальный СОМ-порт. А железо я могу городить, какое хочу - лишь бы с импортной компьютерной программной оно могло говорить на ее языке и по ее протоколу связи.

Аналогично. Только в моём случае в номенклатуре модулей нашёлся модуль для работы через локальную сеть, поэтому оказалось проще разобраться с его протоколом, чтобы мой контроллер стал мимикрировать под него. Хотя, повторюсь, решение с СОМ-портом сохраняет актуальность.

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


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

7 часов назад, tonyk_av сказал:

COM-Ethernet. Цена вопроса около 500 рублей.

16 часов назад, Xenia сказал:

Всё равно, чтобы вы мне ни посоветовали, купленную плату я уже не выброшу.

так что дважды подумайте, прежде чем советовать что-то ещё покупать.  :biggrin:

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


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

17 hours ago, Xenia said:

Хорошо, если есть такая возможность, однако пока моя плата не заработала, ставить TDST мне не на что - у мертвой платы нет IP-адреса.

Именно поэтому я сейчас занята поиском для нее прошивки, т.к. считаю это первостепенной задачей, через которую мне не перешагнуть.

 

Добрый день!

В Кубе довольно просто сделать новый проект под Вашу плату. 

Выбираете свой контроллер (STM32F407xxx), на вкладке System Core выбираете тактирование (внешний кварц); на вкладке Connectivity выбираете ETH (уточните только, как соединён физический уровень - MII или RMII - это можно прямо по плате посмотреть, если схемы нет); на вкладке Middleware and software packs выбираете LWIP  и в его Configuration выбираете Ваш физический уровень - DP83848 (вкладочка Platform Settings); на вкладочке General Settings можно отключить DHCP и ввести статический IP адрес. Остальное можно для начала не трогать. "Рыба" проекта для начала вполне готова. Дальше можно посмотреть в любой готовый пример от STM  с поддержкой Ethernet, как там сделано. В простейшем случае там надо вызвать что-то типа HAL_LwIP_Init()  и затем в основном цикле каждые 200-300 мс опрашивать стек вызывая функции: ethernetif_input(&gnetif); и sys_check_timeouts();

В принципе всё, после этого должно пинговаться. Ну а дальше уже Вам виднее, как там с последовательным портом разобраться. А можно подсмотреть как у китайцев для CH32V307 сделано (например  тут:     https://github.com/openwch/ch32v307/tree/main/EVT/EXAM/ETH)

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


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

3 hours ago, jcxz said:

так что дважды подумайте, прежде чем советовать что-то ещё покупать.  :biggrin:

Так ведь не только для Xenia тут пишут, но и для тех, кто читает. К тому же реализует человек сейчас свою хотелку так, как задумал, а потом вдруг придётся что-то оптимизировать- и вот вам другие варианты  решения наобдумать.

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


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

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

В Кубе довольно просто сделать новый проект под Вашу плату. 

Выбираете свой контроллер (STM32F407xxx), на вкладке System Core выбираете тактирование (внешний кварц); на вкладке Connectivity выбираете ETH (уточните только, как соединён физический уровень - MII или RMII - это можно прямо по плате посмотреть, если схемы нет); на вкладке Middleware and software packs выбираете LWIP  и в его Configuration выбираете Ваш физический уровень - DP83848 (вкладочка Platform Settings); на вкладочке General Settings можно отключить DHCP и ввести статический IP адрес.

Спасибо большое! А я даже надеяться не могла, что на CubuMX это возможно, т.к. у меня выход на Ethernet через транссивер DP83848, который на ST не делают (и в свои демо-плат не вставляют). Да и само сокращение "ETH" я не разгадала, хотя вроде бы его прежде видела.

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


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

В 02.10.2023 в 18:04, ksv198 сказал:

Выбираете свой контроллер (STM32F407xxx), на вкладке System Core выбираете тактирование (внешний кварц); на вкладке Connectivity выбираете ETH (уточните только, как соединён физический уровень - MII или RMII - это можно прямо по плате посмотреть, если схемы нет); на вкладке Middleware and software packs выбираете LWIP  и в его Configuration выбираете Ваш физический уровень - DP83848 (вкладочка Platform Settings); на вкладочке General Settings можно отключить DHCP и ввести статический IP адрес. Остальное можно для начала не трогать. "Рыба" проекта для начала вполне готова. Дальше можно посмотреть в любой готовый пример от STM  с поддержкой Ethernet, как там сделано. В простейшем случае там надо вызвать что-то типа HAL_LwIP_Init()  и затем в основном цикле каждые 200-300 мс опрашивать стек вызывая функции: ethernetif_input(&gnetif); и sys_check_timeouts();

В принципе всё, после этого должно пинговаться.

Однако не заработало оно у меня...

Однако я задам вопрос не о возможных причинах этого (тем более, что их может быть очень много), а о том, как этот пинг проверять.

Пока что я просто соединила пач-кордом Ethernet-гнездо на плате с Ethernet-гнездом на материнской плате компьютера. Результат таков: компьютер крутит колесико (у меня Win7) в поисках интернет-сети, но так ее и не находит. Оно и понятно, т.к. моя плата предоставить выход в интернет не может. А поскольку сети компьютер не находит, то я и не могу поглядеть , какие TCP/IP-адреса в ней есть.

Сперва я подумала, что в программе у меня ошибка и поэтому вместо самодельно-запрограммированной платы поставила другую плату (иной конструкции), где какая-то заводская прошивка для Ethernet уже была. Но результат получила точно такой же.

От этого и закралась у меня мысль, что может быть я платный Ethernet неправильно проверяю? Вдруг компьютер надо как-то иначе настраивать, чтобы он такую плату в своем окружении увидел?

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


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

Нужно вручную выставить IP на интерфейсе ПК. Подсеть должна быть та же, что и у платы. После этого можно будет пинговать.

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


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

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

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

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

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

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

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

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

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

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