Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/78: Рейтинг темы: голосов - 78, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
1

Проблема STM32F4+lwIP

07.09.2014, 02:26. Показов 14369. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброй ночи уважаемые форумчаны.
Начал разбираться с Ethernet под STM32F4. В качестве TCP/IP стека выбрал lwIP.
Работаю в CooCox без FriiRTOS.
Понятное дело скачал примеры от STM. Перенес в свой IDE все работает отлично ( у меня платко от Olimex так что даже паять ничего не пришлось )) ).
Потом начал делать свой пример - простой сервер (самый простой). Скачал документалку от WiKi. Сделал согласной ей + скопировал часть с примера СТМ. Тут начались проблемы - после того как удаленный клиент установил свзь с моим сервером, я перехожу в accept_callback. В этой функции я согласно документации устанавливаю callback для приема и передачи информации. Проверяю все через Hercules. Когда я создаю соединения Hercules пишет что оно отклонено удаленным хостом (тоесть моей платкой). Путем вычитания понял, что как только Я ПРОБУЮ В accept_callback ЗАДАТЬ callback ДЛЯ ПРИЕМА ИЛИ ПЕРЕДАЧИ (ЛЮБОЙ callback) LWIP СРАЗУ РАЗРЫВАЕТ СОЕДИНЕНИЯ. НО ЕСЛИ ИЗ accept_callback ЗАДАТЬ ЛЮБОЙ callback И ПЕРЕДАТЬ ЧТО ТО В СТОРОНУ КЛИЕНТА - ВСЕ РАБОТАЕТ. ((( вот такой вот бред (((.. Борюсь уже 4 дня - и никак ((
Вот мой код:
настройка и инициилизация:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);

ETH_BSP_Config();
LwIP_Init();
tcp_server_connect(80, 192, 168, 8, 43); // порт 80 - потому что хочу создать веб - сервер

while (1)
{

if (ETH_CheckFrameReceived())
{
LwIP_Pkt_Homdle();
}

LwIP_Periodic_Homdle(LocalTime);
}
}

функция создания ожидания подключения -tcp_server_connect :

// ----------функция tcp_server_connect---------------------------
// Серверная установка связи - ожидание установки соединения с клиентом
void tcp_server_connect(u16 port, u8 dest_ip_fild1, u8 dest_ip_fild2, u8 dest_ip_fild3, u8 dest_ip_fild4){
struct ip_addr dest_ip;
err_t rez_err_t;
tcp_server_pcd=tcp_new(); // создаю структуру подключения по tcp протоколу
rez_err_t=tcp_bind(tcp_server_pcd, IP_ADDR_ANY,port); // заполняю поля структуры подключения. Подключиться может хост с любим ІР
tcp_server_pcd_1=tcp_listen(tcp_server_pcd);
tcp_accept(tcp_server_pcd_1,tcp_server_accept_callback); // присваиваем серверу callback события: присоединился клиент

функция accept_callback:

// ---------Callback для функции соединения клиента к серверу-------------------
void tcp_server_accept_callback(void * arg, struct tcp_psb * newpsb,err_t err){

ftoot rez_mes;
u16 max_send_data;
u16 firest_part, second_part;

tcp_accepted(newpsb);
tcp_sent(newpsb,tcp_server_send_callback); // функция которая вызываеться когда сервер присылает подтверждения приема ВОТ ЗДЕСЬ ВСЕ ЗЛО И КРОЕТЬСЯ !!!! КАК ТОЛЬКО ВІЗІВАЮ ЭТУ (ИЛИ СЛЕДУЮЩУЮ) ФУНКЦИЮ - РАЗРЫВ СОЕДИНЕНИЯ ((
tcp_recv(newpsb,tcp_server_recive_callback);

}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2014, 02:26
Ответы с готовыми решениями:

STM32F4+PHY+FREERTOS+LWIP+UDP скорость
Кто-нибудь тестировал максимальную скорость передачи данных при использовании...

LwIP STM32F4 перестает отвечать через время
LwIP STM32F4 перестает отвечать через время, если добавить свою задачу Здравствуйте. Собрал...

STM32F4 + fatfs проблема (ошибка FR_NO_FILESYSTEM)
Здравствуйте. Столкнулся с такой проблемой. Использую контроллер STM32F407. Пытаюсь поднять...

stm32f4 discovery - проблема с работой USB Host.
Доброго времени суток. Встречался ли кто с такой проблемой на данной плате? Проблема в том, что...

7
1 / 1 / 0
Регистрация: 30.12.2013
Сообщений: 192
07.09.2014, 11:56 2
У меня не возникало проблем с использованием стандартного примера, поэтому не вдавался во все подробности, но чтобы разобраться: а как должно быть?

Броузер посылает запрос и ждёт ответ. Как вы определяете, что идёт разрыв соединения? Идёте в отладке по шагам? Но ведь тогда превышаются все интервалы ожидания.
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
07.09.2014, 16:11 3
Все очень просто.
Для отладки я использую программу Hercules. В ней можно задать кем выступает приложение (сервер или клиент), задать IP сервера (в моем случаи Hercules - клиент), порт и установить соединения. Далее программка сама покажет вам установлено ли соединение или нет. Если устновлено, можно обмениваться данными как через обычную сериальную програму (ComPortToolkit). Отладка в контроллере тут ничем не поможет. Так вот, Hercules показывает что соединение сначала устанавливаеться, а потом удаленный хост (тоесть СТМ) его разрываает. И это происходит в тех случаях, когда в каллбэке соединения я задаю калбэк для приема и передачи...
0
1 / 1 / 0
Регистрация: 30.12.2013
Сообщений: 192
07.09.2014, 16:51 4
Так а сами функции то - tcp_server_send_callback, tcp_server_recive_callback - что делают? Я имею ввиду их содержимое. Если берёте стандартные примеры, то там в конце будет что-то вроде tcp_close. И это нормально - веб-сервер не держит соединения открытыми, в отличии от сокетов, например.
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
07.09.2014, 17:28 5
функции tcp_server_send_callback, tcp_server_recive_callb мои (тоесть написаны мною). Соединения я не разрываю, да и не вызываються они до тех пор пока я что то не передам, или клиент не передаст. Странно как то... Скорее всего мат часть... )))
0
1 / 1 / 0
Регистрация: 30.12.2013
Сообщений: 192
07.09.2014, 20:50 6
Тогда наоборот попробуйте пошаговую отладку стека, может станет яснее.
0
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 454
07.09.2014, 21:48 7
Цитата Сообщение от Kooddjomp
... а потом удаленный хост (тоесть СТМ) его разрываает....
А почему вы уверены что STM соединение именно разрывает?
Там есть все нужные FIN - FIN,ACK или RST,PUSH ?

Может быть у вас просто крашится прошивка?

Возьмите еще раз пример с tcp-echo-server с сайта STM и посмотрите что и как.
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 87
08.09.2014, 11:48 8
да вот как раз вчера курочил tcp-echo-server с сайта STM. Этот пример работает, все нормально.
Но как только закоментировать строчку

tcp_arg(newpsb, es);

в калбеке:

static err_t tcp_echoserver_accept(void *arg, struct tcp_psb *newpsb, err_t err)

результат тот же ))).

Что странно, потому что tcp_arg всего лишь описывает переменную которая будет передаваться в каждый калбек в качестве входного аргумента void* arg.
Почему я решил что соединения разрывает удаленный сервер (то есть моя платка) ?? Потому что терминальная программа выдает сообщение:

Connecting to 192.168.8.94 ...
Connected to 192.168.8.94
Connection refused by remote host
Connection closed

что означает:

пробую соединиться
соединился
Соединение отклонено удаленным хостом
соединение закрыто

........
0
08.09.2014, 11:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2014, 11:48
Помогаю со студенческими работами здесь

STM32f4 SD DMA проблема с адресом глобальной перменной
Всем привет. Столкнулся с следующий проблемой при программирование stm32f417 в среде keil. Вот в...

STM32F4 USB VCP проблема TimeOut-а при передачи данных от PC
Здравствуйте. Использую пример VCP (Virtual COM Port) от ST. Работаю под WinXP с виртуальным COM...

LwIP http без LwIP стека
Всем доброго дня! А кто нибудь пробовал отделить LwIP http веб сервер от самого LwIP стека,...

STM32F4 freertos + lwip + mqtt + mbedtls
Всем привет. Запустил mqtt из стека LWIP для STM32 по примеру . Все работает. Но как сделать чтоб...

STM32F4 + CAN: проблема
Добрый вечер! Навичак в работе с CAN. Столкнулся с такой проблемой. При посылке данных по CAN...

LWIP
что нужно включить в lwip, чтобы было так: <Изображение удалено> а не вот так: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru