Библиотека W5500 (наконец) портирована

Вассилис
Вторник 18 августа 2015 13:43
Я перенес новый W5500 Контроллер Ethernet для его использования с STM32F1 ряд. На самом деле, новая библиотека заменит старую Ethernet_stm библиотека.
Новая портированная библиотека на 100% совместима со старым и поддерживает чипы W5100 и W5500.
Библиотека также поддерживает чип W5200, но я не перенес его в STM32F1.

Чип W5500 намного быстрее, чем W5100 !
С комбинацией STM32F103, VS1053 и W5500 Мне удалось играть в интернет -потоки (Webradios) до 192 кбит / с / 44000 Гц !
Я надеюсь, что с оптимизацией исходного кода скорость битов будет увеличена до 320 кбит / с.

У меня есть еще одна проблема, чтобы решить, прежде чем опубликовать ее. Когда используется статический IP, производимый шестигранник почти 23 КБ. Когда используется клиент DHCP, производимый шестигранник почти 80 КБ. 248% больше вспышки пространства.

На arduino nano (я знаю, что это 8-битный не 32-битный). Статический IP потребляет ~ 10 кб и DHCP ~ 13 кб. 30% больше вспышки.

victor_pv
Вторник 18 августа 2015 г. 20:27
Вассилис написал:Я перенес новый W5500 Контроллер Ethernet для его использования с STM32F1 ряд. На самом деле, новая библиотека заменит старую Ethernet_stm библиотека.
Новая портированная библиотека на 100% совместима со старым и поддерживает чипы W5100 и W5500.
Библиотека также поддерживает чип W5200, но я не перенес его в STM32F1.

Чип W5500 намного быстрее, чем W5100 !
С комбинацией STM32F103, VS1053 и W5500 Мне удалось играть в интернет -потоки (Webradios) до 192 кбит / с / 44000 Гц !
Я надеюсь, что с оптимизацией исходного кода скорость битов будет увеличена до 320 кбит / с.

У меня есть еще одна проблема, чтобы решить, прежде чем опубликовать ее. Когда используется статический IP, производимый шестигранник почти 23 КБ. Когда используется клиент DHCP, производимый шестигранник почти 80 КБ. 248% больше вспышки пространства.

На arduino nano (я знаю, что это 8-битный не 32-битный). Статический IP потребляет ~ 10 кб и DHCP ~ 13 кб. 30% больше вспышки.

Вассилис
Ср 19 августа 2015 г., 10:07
victor_pv написал:О размере кода, когда вы компилируете, он должен создать файл с .Расширение карты. Это показывает все использование вспышки и статического оперативного памяти в коде.
Я бы собрал одну версию, сохранив ее .Карта файла где -то еще, затем составьте другой и сравните их, чтобы посмотреть, какие функции или структуры ОЗУ собираются дополнительные.

Вассилис
Ср 19 августа 2015 г. 15:09
Библиотека Ethernet_stm, которая поддерживает чипы как W5100, так и W5500 Ethernet.
Выбор между W5100 или W5500 вы должны отредактировать файл Ethernet_stm \ src \ utility \ w5100.час и прокомментировать линию чипа, которую вы хотите использовать.
W5500 был выбран по умолчанию.
//#define W5100_ETHERNET_SHIELD // Arduino Ethenret Shield and Compatibles ... //#define W5200_ETHERNET_SHIELD // WIZ820io, W5200 Ethernet Shield #define W5500_ETHERNET_SHIELD // WIZ550io, ioShield series of WIZnet

Martinayotte
Ср 19 августа 2015 г., 18:33
Спасибо, Вассилис !

Я попробую в ближайшие несколько дней на F4 и сообщу, есть ли проблема с потреблением вспышки тоже.

Вассилис
Ср 19 августа 2015 г., 21:23
Martinayotte написал:Спасибо, Вассилис !

Я попробую в ближайшие несколько дней на F4 и сообщу, есть ли проблема с потреблением вспышки тоже.

Rogerclark
Ср 19 августа 2015 г., 22:08
Часто, когда файл bin внезапно становится большим, потому что компилятор должен был связать некоторые функции, которые он обычно не нуждается в.

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

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

Martinayotte
Ср. 19 августа 2015 г., 23:21
Я спешил попробовать это ... :)
Но я наконец сделал это с F1, так как Maplemini был на макете со свободным пространством для модуля (мой stm32f4stamp kemboard был заполнен).
Вот результат (конечно, больше, чем Vassilis Compiles, так как у меня также есть много других LIB в моем Sketch_buffet, такой AD SD, MCP23017 и т. Д.):
-rwxrwxr-x 1 martin martin 93648 Aug 19 19:04 MapleMini-Buffet-W5500Dhcp.bin* -rwxrwxr-x 1 martin martin 38560 Aug 19 19:03 MapleMini-Buffet-W5500Static.bin*

Martinayotte
Чт 20 августа 2015 г., 2:14
Как и было обещано, я вернулся к своему предыдущему Arduinouip и нашел такую ​​же дискрипция размера с DHCP:
-rwxrwxr-x 1 martin martin 101208 Aug 19 22:09 MapleMini-Buffet-UIPDhcp.bin* -rwxrwxr-x 1 martin martin 46176 Aug 19 22:11 MapleMini-Buffet-UIPStatic.bin*

Martinayotte
Чт 20 августа 2015 г., 23:21
Я нашел проблему памяти ! : ugeek:
Проблема заключается в том, что функция EthernetClass :: neval () с использованием DHCP выполняет «_dhcp = new dhcpclass ()», которая приводит управление памятью GCC в связь. При встроенной разработке почти всегда плохо использовать «новые» функции.
Итак, я не знаю, если это лучший способ справиться с ошибкой/обходным путем, я просто объявил DHCPClass во всем мире и статичен в Ethernet_stm.CPP и инициализируйте член _DHCP с его указателем.

Таким образом, в результате бинарный размер теперь разумный: -rwxrwxr-x 1 martin martin 43512 Aug 20 19:13 /tmp/build889919623780855637.tmp/MapleMini-Buffet.cpp.bin

Вассилис
Пт 21 августа 2015 12:03
Мартин, я работал параллельно с вами, чтобы решить проблему DHCP.

Наконец я решаю это.

Компиляция со статикой дала мне: Sketch uses 20,476 bytes (15%) of program storage space. Maximum is 131,072 bytes.

Mrburnette
Пт 21 августа 2015 12:18
УХ ТЫ!

Только 2% дельта. У меня даже нет необходимости в классе, но могу использовать его просто потому, что он настолько эффективен! :ржу не могу:

Серьезно, отличная работа... Надеюсь, все ваши тесты будут успешными.

Луча

Вассилис
Сб 22 августа 2015 г., 19:10
Спасибо, Рэй!

Новая библиотека готова. Старый Ethernet_stm Библиотека поддерживает только чип W5100, и он был опубликован в моем GitHub. Оттуда Роджер был создан ссылку на его репозиторий.
Новая библиотека поддерживает чипы как W5100, так и W5500. Я также внес необходимые модификации для поддержки W5200, но у меня нет модуля W5200 Ethernet, чтобы проверить его.

Если я замените старые файлы библиотеки «Ethernet_stm» на моем GitHub новыми файлами библиотеки ethernet_stm (сохраняют то же имя библиотеки) или я должен создать новый репозиторий, например, Ethernet2_stm ?

Martinayotte
Солнце 23 августа 2015 3:25
Спасибо Вассилис !
Если я замените старые файлы библиотеки «Ethernet_stm» на моем GitHub новыми файлами библиотеки ethernet_stm (сохраняют то же имя библиотеки) или я должен создать новый репозиторий, например, Ethernet2_stm ? Я не думаю, что стоит старый, так как новая LIB также работает с W5100, за исключением случаев, что вы знаете что -то, чего мы не знаем. ;)
Это доставляет мне вопрос: вопрос не только для вас: Serasidis_ethercard_stm все еще полезен ? Если нет, возможно, Роджеру тоже нужно удалить ...

Вассилис
Солнце 23 августа 2015 г., 7:53
Martinayotte написал:...Это доставляет мне вопрос: вопрос не только для вас: Serasidis_ethercard_stm все еще полезен ? Если нет, возможно, Роджеру тоже нужно удалить ...

Martinayotte
Солнце 23 августа 2015 13:24
Вассилис написал:С другой стороны, Uipethernet полностью совместим со стандартом Ethernet библиотека

Вассилис
Солнце 23 августа 2015 13:48
Я совершил новый Ethernet_stm библиотека.

Проблема DHCP была на «_dhcp = new dhcpclass ()», как уже сказал Мартин (спасибо, человек!). К сожалению, решение Martins не сработало для меня.
Итак, я сделал для создания нового DHCPClass объект глобально назван _dhcp в Ethernet_stm.CPP Файл и строки структуры, содержащие "_DHCP->"Заменить" _DHCP."

Например, линия W5100.setIPAddress(_dhcp->getLocalIp().raw_address());

Martinayotte
Sun 23 августа 2015 г. 15:49
Вассилис написал:Проблема DHCP была на «_dhcp = new dhcpclass ()», как уже сказал Мартин (спасибо, человек!). К сожалению, решение Martins не сработало для меня.

Вассилис
Солнце 23 августа 2015 г., 17:21
Martinayotte написал:Вассилис написал:Проблема DHCP была на «_dhcp = new dhcpclass ()», как уже сказал Мартин (спасибо, человек!). К сожалению, решение Martins не сработало для меня.

Martinayotte
Sun 23 августа 2015 г., 19:53
Вассилис написал:Я уже сделал это, но это не сработало для меня, Мартин. Во время компиляции появилось много ошибок :?

Якбап
Чт 18 февраля 2016 г. 8:44
Любой использует wiz550io?

Wiz550io имеет PIC для IP и MAC -адреса магазина. Я использую Serasidis STM32Duino Library. Я получил ноль, когда пытаюсь получить MAC -адрес.

Я установил MAC -адрес, но он не хранился на PIC (я всегда получаю NULL после перезагрузки WIZ550IO). Любой может мне помочь?

Вассилис
Чт 18 февраля 2016 г. 12:09
Редактировать Ethernet_stm/src/utility/w5100.час Файл и прокомментировать (включить) строку 22, удалив двойную черту //#define WIZ550io_WITH_MACADDRESS // Use assigned MAC address of WIZ550io

Якбап
Пт 19 февраля 2016 г., 7:42 утра
Я прокомментировал эту строку, но я все еще не могу получить MAC -адрес.

Я наконец знаю, почему я не могу это получить. Просто строка комментария 45 в файле W5500.CPP:
write(0x00, 0x05, 128); // Software reset the W5500 chip

Акронис
Вт 11 июля 2017 г. 8:44
Привет.
Будет ли эта библиотека работать с Black Board STM32F407VET6 ?

Стивестронг
Вт 11 июля 2017 г. 8:50 утра
Просто попробуйте (обратите внимание на правильный выбор порта SPI, на плате F4 есть 3 порта SPI) и отправьте здесь, если что -то не работает.

Акронис
Вт 11 июля 2017 г. 9:01
Я использую свою библиотеку #include <Ethernet_stm.час>
много ошибок.Если я использую свою библиотеку много ошибок







C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dhcp.cpp: In member function 'uint8_t DhcpClass::parseDHCPResponse(long unsigned int, uint32_t&)': C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dhcp.cpp:332:55: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] if( *((uint32_t*)_dhcpDhcpServerIp) == 0 || ^ In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:7:0: C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp: In member function 'uint16_t DNSClient::ProcessResponse(uint16_t, IPAddress&)': C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:285:58: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] uint16_t header_flags = htons(*((uint16_t*)&header[2])); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility/util.h:4:22: note: in definition of macro 'htons' #define htons(x) ( ((x)<< 8 & 0xFF00) | \ ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:285:58: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] uint16_t header_flags = htons(*((uint16_t*)&header[2])); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility/util.h:5:22: note: in definition of macro 'htons' ((x)>> 8 & 0x00FF) ) ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:287:50: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] if ( ( iRequestId != (*((uint16_t*)&header[0])) ) || ^ In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:7:0: C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:304:57: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] uint16_t answerCount = htons(*((uint16_t*)&header[6])); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility/util.h:4:22: note: in definition of macro 'htons' #define htons(x) ( ((x)<< 8 & 0xFF00) | \ ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:304:57: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] uint16_t answerCount = htons(*((uint16_t*)&header[6])); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility/util.h:5:22: note: in definition of macro 'htons' ((x)>> 8 & 0x00FF) ) ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:313:58: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] for (uint16_t i =0; i < htons(*((uint16_t*)&header[4])); i++) ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility/util.h:4:22: note: in definition of macro 'htons' #define htons(x) ( ((x)<< 8 & 0xFF00) | \ ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\Dns.cpp:313:58: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] for (uint16_t i =0; i < htons(*((uint16_t*)&header[4])); i++) ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility/util.h:5:22: note: in definition of macro 'htons' ((x)>> 8 & 0x00FF) ) ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\socket.cpp: In function 'uint16_t igmpsend(SOCKET, const uint8_t*, uint16_t)': C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\socket.cpp:322:11: warning: variable 'status' set but not used [-Wunused-but-set-variable] uint8_t status=0; ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp: In member function 'void W5500Class::init()': C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:37:19: error: no matching function for call to 'SPIClass::begin(int)' SPI.begin(SPI_CS); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:37:19: note: candidate is: In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src/utility/w5100.h:13:0, from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:13: C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:170:10: note: void SPIClass::begin() void begin(void); ^ C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:170:10: note: candidate expects 0 arguments, 1 provided C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:42:32: error: no matching function for call to 'SPIClass::setClockDivider(int, int)' SPI.setClockDivider(SPI_CS, 2); // 42 Mhz, ok ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:42:32: note: candidate is: In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src/utility/w5100.h:13:0, from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:13: C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:198:7: note: void SPIClass::setClockDivider(uint32_t) void setClockDivider(uint32_t clockDivider); ^ C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:198:7: note: candidate expects 1 argument, 2 provided C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:43:36: error: no matching function for call to 'SPIClass::setDataMode(int, spi_mode)' SPI.setDataMode(SPI_CS, SPI_MODE0); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:43:36: note: candidate is: In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src/utility/w5100.h:13:0, from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:13: C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:200:7: note: void SPIClass::setDataMode(uint8_t) void setDataMode(uint8_t dataMode); ^ C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:200:7: note: candidate expects 1 argument, 2 provided C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp: In static member function 'static uint8_t W5500Class::write(uint16_t, uint8_t, uint8_t)': C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:132:36: error: 'SPI_CONTINUE' was not declared in this scope SPI.transfer(SPI_CS, _addr >> 8, SPI_CONTINUE); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:135:29: error: no matching function for call to 'SPIClass::transfer(int, uint8_t&)' SPI.transfer(SPI_CS, _data); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:135:29: note: candidate is: In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src/utility/w5100.h:13:0, from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:13: C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:261:11: note: uint8 SPIClass::transfer(uint8) const uint8 transfer(uint8 data) const; ^ C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:261:11: note: candidate expects 1 argument, 2 provided C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp: In static member function 'static uint16_t W5500Class::write(uint16_t, uint8_t, const uint8_t*, uint16_t)': C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:162:36: error: 'SPI_CONTINUE' was not declared in this scope SPI.transfer(SPI_CS, _addr >> 8, SPI_CONTINUE); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:168:30: error: no matching function for call to 'SPIClass::transfer(int, const uint8_t&)' SPI.transfer(SPI_CS, _buf[i]); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:168:30: note: candidate is: In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src/utility/w5100.h:13:0, from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:13: C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:261:11: note: uint8 SPIClass::transfer(uint8) const uint8 transfer(uint8 data) const; ^ C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:261:11: note: candidate expects 1 argument, 2 provided C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp: In static member function 'static uint8_t W5500Class::read(uint16_t, uint8_t)': C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:191:38: error: 'SPI_CONTINUE' was not declared in this scope SPI.transfer(SPI_CS, _addr >> 8, SPI_CONTINUE); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:194:43: error: no matching function for call to 'SPIClass::transfer(int, int)' uint8_t _data = SPI.transfer(SPI_CS, 0); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:194:43: note: candidate is: In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src/utility/w5100.h:13:0, from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:13: C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:261:11: note: uint8 SPIClass::transfer(uint8) const uint8 transfer(uint8 data) const; ^ C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:261:11: note: candidate expects 1 argument, 2 provided C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp: In static member function 'static uint16_t W5500Class::read(uint16_t, uint8_t, uint8_t*, uint16_t)': C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:221:38: error: 'SPI_CONTINUE' was not declared in this scope SPI.transfer(SPI_CS, _addr >> 8, SPI_CONTINUE); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:227:42: error: no matching function for call to 'SPIClass::transfer(int, int)' _buf[_len-1] = SPI.transfer(SPI_CS, 0); ^ C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:227:42: note: candidate is: In file included from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src/utility/w5100.h:13:0, from C:\Users\Admin\Documents\Arduino\libraries\Ethernet_STM-master\src\utility\w5500.cpp:13: C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:261:11: note: uint8 SPIClass::transfer(uint8) const uint8 transfer(uint8 data) const; ^ C:\Users\Admin\Documents\Arduino\hardware\Arduino_STM32-master\STM32F4\libraries\SPI\src/SPI.h:261:11: note: candidate expects 1 argument, 2 provided

Zoomx
Вт 11 июля 2017 г. 9:21
Акронис,
Пожалуйста, предоставьте
Какую доску вы используете?
Какое ядро ​​вы используете?

Я загрузил пример Telnet, и он компилировался с обширными ошибками. Попробуйте использовать пример.

Акронис
Вт 11 июля 2017 г. 9:28 утра
Черная доска STM32F407VET6
[Libmaple] Black F407Vet6 ( https: // github.com/stevstrong/arduino_stm32)

Стивестронг
Вт 11 июля 2017 г. 9:42 утра
Проблема в том, что у этой LIB все еще есть некоторые определения для устройств Non-STM32.
Эта LIB работает в семье F1 из -за: #if defined(__STM32F1__)

Стивестронг
Ср. 12 июля 2017 г. 8:32
Я переработаю эту библиотеку, потому что у нее есть много вещей, которые не настраиваются, но это должно быть, например, объект класса SPI (в настоящее время исправлено кодировано).
И я удалю все ссылки на не Stm32, чтобы избежать дальнейших проблем.

Акронис
Ср. 12 июля 2017 г. 8:57
Большой !
Я очень благодарен за вашу работу !
Ты так много делаешь для всех !

Спасибо !!!

Стивестронг
Сб 29 июля 2017 г. 9:30 утра
Наконец -то мне удалось переработать существующую Ethernet Lib из Василиса (спасибо за отличную работу, Вассилис!) более общепринятым способом.
https: // github.com/stevstrong/ethernet_stm32

Основные изменения:
- В работах только на досках на основе W5500 любая другая производная цель была удалена
- Он поддерживает только STM32F1 и F4, любая другая ссылка на AVR или другие цели была удалена
- Нет необходимости редактировать какой -либо файл заголовка для настройки, объект SPI и выбора чипа передается с помощью дополнительной функции: Ethernet.init([spi_object], [chip_select_pin]);

Акронис
Сб 29 июля 2017 12:10
УХ ТЫ !
СУПЕР !
Я действительно жду этого !

Не могли бы вы сказать мне, какие булавки вам нужны и где подключиться, я проверю !

https: // ru.aliexpress.com/item/free-shi ... 0.0.H5LS9P

Большое спасибо за вашу работу !

Стивестронг
Сб 29 июля 2017 г. 15:08
Я думаю, что это прямо.
Вам необходимо подключить соответствующие контакты SPI (из которых когда -либо вы хотите, выберите чип и питание 5V + GND.
3.3V, INT и RST PINS не используются.

Вассилис
Чт 14 сентября 2017 г. 11:53 утра
@stevestrong
Мне нравится, как каждый может выбрать порт SPI и PIN -код CS.
Отличная работа !

Efftek
Пн 27 августа 2018 г., 11:43
Привет, ребята,

Спасибо за вашу тяжелую работу, переносив эту библиотеку. У меня есть запрос.

Я хочу использовать ряд STM32Duinos для отправки информации датчика на ПК. ПК запросит эту информацию, и я хочу иметь возможность назначать IP -адреса каждому модулю, а не, возможно, у него другой адрес каждый раз, когда питание выключено и т. Д. Я только начинаю, и это код, который у меня есть до сих пор.
#include #include byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 16, 1); //EthernetClient client; SPIClass mSpi(2); void setup() { Serial.begin(115200); delay(3000); Ethernet.init(mSpi, PB12); Ethernet.begin(mac, ip); Serial.print(" IP Address assigned "); Serial.println(Ethernet.localIP()); } void loop() { }

Вассилис
Пн 27 августа 2018 г. 14:47
Если вы хотите установить статический IP на свой W5500, лучше установить DNS, шлюз и маска подсети также.
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet)

Стивестронг
Пн 27 августа 2018 г. 15:23
Небольшое расширение, на что уже указал Вассилис.
[Efftek - Пн 27 августа 2018 г. 11:43] - Теперь он сообщает, что этот IP -адрес (192.168.16.1) Был назначен, но я не могу его пинговать. Я также попробовал несколько других адресов.
Маршрутизатор не примет исправление распределения IP -адреса, если активирован DHCP, поэтому вы не можете пинговать его от другого чистого клиента.
Статический IP -адрес доступен только в том случае, если DHCP деактивируется на маршрутизаторе. В этом случае вам нужны все чистые компоненты, чтобы выделить статические IP -адреса.

Efftek
Вторник 28 августа 2018 г. 8:00 утра
Спасибо Вассилис & Стив. На это ответило несколько вопросов и создало новый.

Если я использую DHCP для динамического распределения IP -адресов, когда модуль BluePill (сервер) выходит в Интернет, он может связаться с клиентом, чтобы самостоятельно, указать свой серийный номер, который может определить, кто он, и его последний IP -адрес. Клиент рассмотрит серийный номер в своей базе данных и изменит IP -адрес, хранящийся для него, чтобы он знал, как связаться с ним, чтобы запросить данные. Это кажется простым и разумным. Но как сервер узнает, что такое IP -адрес клиентов, если он не статичен?

Так могу ли я предоставить клиенту ПК фиксированный IP -адрес и по -прежнему использовать DHCP для распределения отдельных адресов сервера?

Этот сетевой материал для меня новенький, и я в замешательстве. Спасибо за ваше руководство.

Стив ф.

Стивестронг
Ср 29 августа 2018 г. 13:23
Обычно клиент сначала контактирует с сервера, а не наоборот.
В случае, если и сервер, и клиент привязаны к маршрутизатору DHCP, они оба получат распределенные IP -адреса.
Вы должны узнать адрес сервера и жесткий код в клиентском приложении, поэтому клиент должен знать адрес сервера. Сервер узнает адрес клиента, когда клиент выдает запрос на сервер.

Efftek
Ср. 05 сентября 2018 г. 14:09
Привет, ребята,

Следующая проблема.

У меня есть STM32, работая с доской W5500. Я создаю MAC -адрес из ID STM32 NO, и DCHP устанавливает IP -адрес. Мой компьютер может отправить запрос и ответ STM32. Теперь мне нужно работать SD -карту - объем данных, которые я должен собирать из АЦП на 10 000 SPS, должен быть записан на SD -карту, а затем отправлено Ethernet.

W5500 находится на SPI2 и SD -карте, SPI1 - ID Будьте рады поставить SD -карту на SPI2, если бы я знал, как изменить настройки SD.

Этот код инициализирует W5500 #include #include #include Sd2Card card; SdVolume volume; SdFile root; const int chipSelect = 4; byte *id5 = (byte *) (0x1FFFF7EC); byte *id4 = (byte *) (0x1FFFF7EC+0x01); byte *id3 = (byte *) (0x1FFFF7EC+0x02); byte *id2 = (byte *) (0x1FFFF7EC+0x03); byte *id1 = (byte *) (0x1FFFF7EC+0x04); byte mac[] = { 0xEA, *id1, *id2, *id3, *id4, *id5 }; unsigned int localPort = 8000; EthernetServer server(localPort); SPIClass mSpi(2); //USING SPI2 PB12-PB15 void setup() { Serial.begin(115200); delay(3000); Ethernet.init(mSpi, PB12); Ethernet.begin(mac); Serial.print("IP Address assigned "); Serial.println(Ethernet.localIP()); server.begin(); }

Стивестронг
Ср. 05 сентября 2018 г., 17:23
Два предложения (проверенные), чтобы сделать оба устройства для работы.

1. Измените порядок SD Card Init и Ethernet init

2. оставить этот заказ и перед картой.init () звонок: SPI.setModule(1);

Efftek
Ср. 05 сентября 2018 г., 17:37
Спасибо, Стивестронг,

Я попробую это утром. я’ll Держу вас в курсе.

Efftek
Чт, 06 сентября 2018 г., 6:52
Фантастика! Большое спасибо за вашу помощь.

Немного экспериментирования (без подключенной карты W5500), и я обнаружил, что могу просто использовать SPI.setModule(2); card.init(SPI_HALF_SPEED, 8));

Стивестронг
Чт, 06 сентября 2018 г., 7:32 утра
Два или более устройств на одном порту будут делиться настройками скорости SPI, если вы не позвоните SPI.beginTransaction(SPISettings(, [other_params])); // only speed is mandatory, the rest is optional

Efftek
Чт, 06 сентября 2018 г. 8:53 утра
Еще раз, большое спасибо за вашу помощь. Я так рад, что в мире есть такие люди, как ты (и все остальные люди здесь, Роджер, Рэй, Вассилис, Свотон, Рик и др.), Которые рады поделиться своими знаниями. Я не могу поблагодарить вас всех достаточно.

Хотел бы я знать вдвое меньше по этой теме, чем вы, но потом вы все равно узнаете вдвое больше, чем у меня!

Efftek
Вторник 18 сентября 2018 г. 5:15 утра
Ребята,

Это мой код для начала соединения моего чертежа с Ethernet void StartEther() { SPI.setModule(1); Ethernet.init(PA4); if(Ethernet.begin(mac)) { server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } else Serial.println("Server FAIL"); }

Стивестронг
Вторник 18 сентября 2018 г. 6:34 утра
https: // www.манекены.com/программирование/сеть ... P-Command/: Кэш ARP - это простое отображение IP -адресов с MAC -адресами. Каждый раз, когда компьютер’S TCP/IP Stack использует ARP для определения адреса контроля доступа (MAC) для IP -адреса, он записывает отображение в кэше ARP, чтобы будущие поиски ARP идут быстрее. AFAIK, пока вы не получаете доступ к новому IP -адресу, кэш не может знать его, поскольку он работает только из «кэша».

Efftek
Вторник 18 сентября 2018 г. 7:06 утра
[Стивестронг - Вторник 18 сентября 2018 г. 6:34 утра] - AFAIK, пока вы не получаете доступ к новому IP -адресу, кэш не может знать его, поскольку он работает только из «кэша».
Еще раз спасибо, это объяснило бы, как IP -адрес находится в списке ARP после того, как я его пинг, а не раньше. Итак, есть ли способ получить доступ к IP -адресу из BluePill после сервера.Командовать () команду begin (), когда он узнает свой собственный адрес? Могу ли я сначала настроить его как клиент, а затем стать сервером?

Ура, Стив

Стивестронг
Вторник 18 сентября 2018 г. 8:40 утра
Обычно, если вы не изменяете MAC -адрес устройства, он должен получать один и тот же IP -адрес каждый раз, когда он подключается к маршрутизатору с включенным DHCP.
Таким образом, вы знаете его IP -адрес.

OTOH, это то, что я нашел в сети:
https: // www.Iplocation.net/find-provate-network-ip: Как найти IP -адрес всех устройств в моей сети?
Пингите вашу сеть, используя трансляционный адрес, я.эн. "Пинг 192.168.1.255 ". После этого выполните «arp -a», чтобы определить все вычислительные устройства, подключенные к сети. 3. Вы также можете использовать команду "NetStat -r", чтобы найти IP -адрес всех сетевых маршрутов.

Efftek
Ср. 19 сентября 2018 г. 7:37 утра
Отсортировано!!!

Я буду устанавливать 20 модулей в различных местах на заводе в их собственной сети, используя POE. Каждый модуль имеет свой собственный Mac на основе уникального идентификатора STM32, поэтому я знаю, какой Mac я установил, где и я могу назначить их на клиентский ПК на единицы в базе данных, но сначала они должны появиться в таблице ARP, чтобы клиентский компьютер мог увидеть их и их IP -адреса.

Мне удалось сразу же заставить модули появиться в таблице ARP. Вот как я это сделал. Я установил свой клиент ПК на статический IP -адрес 192.168.2.14 (тот, который оказался в то время) и объявил; IPAddress ip(192, 168, 2, 14); EthernetServer server(6000); EthernetClient arp;

Привет, ребята.

Кто -нибудь знает, есть ли рабочая библиотека ICMP для использования с чипом W5500?

Заранее