Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 16.01.2019
Сообщений: 5
1

XCore407I проблемы с настройкой ethernet + lwip

16.01.2019, 16:14. Просмотров 1833. Ответов 1
Метки нет (Все метки)

Добрый день, не получается инициализировать ethernet на XCore407I от WaveShare
Плата подключена через программатор STM32F407G-DISC1 для отладки
Создал проект в STM32CubeMX на основе mcu STM32F407IGTx
включил RCC -> High speed clock = Crystal/Ceramic Resonator
SYS -> Debug = Serial Wire, Timebase source = TIM11
TIM11 - серый изменять нельзя
ETH -> MOD = MII(в этом случае настройки PHY выставляются для DP83848, который как раз на плате и разведен, если установить RMII то конфигурация PHY выставляется для LAN8742A)
в ETH остальные параметры по умолчанию, мак = 00:80:E1:00:00:00, PHY Address = 1
FreeRTOS - 9.0.0 все настройки по умолчанию
LwIP - 2.0.3
{
DHCP=0,
выставлен статический адрес и маска как в текущей сети,
gateway не указывал,
SHECKSUM_BY_HARDWARE=1,
LWIP_NETIF_API=1,
LWIP_NETIF_STATUS_CALLBACK=1,
LWIP_NETIF_LINK_CALLBACK=1,
LWIP_NETIF_REMOVE_CALLBACK=1,
LWIP_BROADCAST_PING=1,
LWIP_MULTICAST_PING=1,
LWIP_NETCONN=1
}
сгенерировал проект для MDK v5
подключил к плате rgb светодиод через PC6,PC7,PC11 с юзер лейблами по цветам проводов
добавил в функцию ethernetif_notify_conn_changed тело
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (netif_is_link_up(netif))
  {
        //green light
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET); 
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
  }
  else
  {
        //red light
        HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
        HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
  }
RTOS стартует нормально, моргал светодиодом из треда rtos,
при включении платы и появлении линка загорается зеленый светодиод
также добавлял создание tcp_echo треда из rtos потока (StartDefaultTask)
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*
 * Copyright (c) 2001-2003 Swedish Institute of Computer Science.
 * All rights reserved. 
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission. 
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 
 * OF SUCH DAMAGE.
 *
 * This file is part of the lwIP TCP/IP stack.
 * 
 * Author: Adam Dunkels <adam@sics.se>
 *
 */
#include "tcpecho.h"
 
#include "lwip/opt.h"
 
//dobavil
//#include "ethernetif.h" 
//#include "netif.h"
 
 
#if LWIP_NETCONN
 
#include "lwip/sys.h"
#include "lwip/api.h"
 
#define TCPECHO_THREAD_PRIO  ( tskIDLE_PRIORITY + 3 )
/*-----------------------------------------------------------------------------------*/
static void 
tcpecho_thread(void *arg)
{
    //GPIO_PinState lastState = GPIO_PIN_RESET; //my
    struct netconn *conn, *newconn;
    err_t err;
    LWIP_UNUSED_ARG(arg);
    
    // 1 blue - thread start    
    blink_nth(3,1, 400); 
    HAL_Delay(1000);
 
    /* Create a new connection identifier. */
    conn = netconn_new(NETCONN_TCP);
    
    if (conn != NULL)
    {
        
        /* Bind connection to well known port number 7. */
        err = netconn_bind(conn, NULL, 7);
        
        if (err == ERR_OK)
            {
 
            /* Tell connection to go into listening mode. */
            netconn_listen(conn);
                
            //blink_nth(3,2); // 2 blue - jdem konnekta
          //HAL_Delay(1000);    
 
            while (1) 
            {
                /* Grab new connection. */
                err = netconn_accept(conn, &newconn);               
                
                //poluchili konnekt
//              blink_nth(2,1); // 1 green -- podkonektilis
//              HAL_Delay(500);
                
                /*printf("accepted new connection %p\n", newconn);*/
                /* Process the new connection. */
                if (err == ERR_OK) 
                {
                    struct netbuf *buf;
                    void *data;
                    u16_t len;
                    
                    while ((err = netconn_recv(newconn, &buf)) == ERR_OK) 
                    {
                        //pri poluchenii connecta migaem zelenim
                        //blink_nth(2, 3); // 3 green - poluchili dannie
                        //HAL_Delay(1000);
                        
                        /*printf("Recved\n");*/
                        do {
                            netbuf_data(buf, &data, &len);
                            err = netconn_write(newconn, data, len, NETCONN_COPY);
                            
//                          if ( lastState == 0 )
//                          {
//                              lastState = GPIO_PIN_SET;
//                          }
//                          else
//                          {
//                              lastState = GPIO_PIN_RESET;
//                          }
//                          HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, lastState); // blue cable = green light
//                          HAL_Delay(1000);
                            
                #if 0
                            if (err != ERR_OK) 
                            {
                                printf("tcpecho: netconn_write: error \"%s\"\n", lwip_strerr(err));
                            }
                #endif
                        } while (netbuf_next(buf) >= 0);
                        netbuf_delete(buf);
                    }
                    /*printf("Got EOF, looping\n");*/ 
                    /* Close connection and discard connection identifier. */
                    netconn_close(newconn);
                    netconn_delete(newconn);
                }
                //obrabotali konnekt
                //blink_nth(2,5); // 1 green -- podkonektilis
                //HAL_Delay(500);
            }
        }
    }
}
/*-----------------------------------------------------------------------------------*/
void
tcpecho_init(void)
{
  sys_thread_new("tcpecho_thread", tcpecho_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
}
/*-----------------------------------------------------------------------------------*/
 
void blink_nth(int color, int nth, int delay)
{
    //int delay = 200;
    for (int i = 0; i< nth; i++)
    {
        if (color == 1) // red color
        {
            HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET); // green cable
            HAL_Delay(delay);
            HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
            HAL_Delay(delay);
        }
        else if (color == 2) //green color
        {
            HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET); // blue cable
            HAL_Delay(delay);
            HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
            HAL_Delay(delay);
        }
        else if (color == 3) // blue color
        {
            HAL_GPIO_WritePin(LED_ORANGE_GPIO_Port, LED_ORANGE_Pin, GPIO_PIN_SET); // orange cable
            HAL_Delay(delay);
            HAL_GPIO_WritePin(LED_ORANGE_GPIO_Port, LED_ORANGE_Pin, GPIO_PIN_RESET);
            HAL_Delay(delay);
        }
    }   
}
 
#endif /* LWIP_NETCONN */

выполнялся данный поток только до "err = netconn_accept(conn, &newconn);"
подключиться на данный порт не получилось.
на пинг не отвечает, arp не видит такого мака

в мануале по DP83848 видел что в режиме MII должно частота должна выставляться 25МГц,
но я что-то не нашел где это настраивается чтоб проверить корректность установки.

вобщем я только недавно начал разбираться так что мог что-то упустить, если подскажите на какие
моменты надо обратить внимание будет замечательно.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2019, 16:14
Ответы с готовыми решениями:

stm32f2 ethernet lwip freeRtos
Доброго времени! Наблюдается следующая проблема в данной конфигурации: подаем питание, контроллер...

stm32f107vc + ethernet + freertos + IAR + lwIP
Добрый день всем. Взял я пример вот с этого сайта. catethysis.ru/stm32-lan8720-freertos-iar/ У...

Проблемы с настройкой Wi-Fi сети
Возможно кто-то сталкивался? Есть сервер с двумя сетевыми картами, Wi-Fi роутер D-Link DI 524, и...

Проблемы с настройкой локалки
подскажите в чём может быть проблема, соединил комп с ноутом в сеть через кабель с rj-45(2...

1
0 / 0 / 1
Регистрация: 16.01.2019
Сообщений: 5
17.01.2019, 11:53  [ТС] 2
Лучший ответ Сообщение было отмечено ValeryS как решение

Решение

Проблема решилась, 3 пина уходили в никуда, перебросил их на:
PG14 - ETH_TXD1
PG13 - ETH_TXD0
PG11 - ETH_TX_EN
и выбрал режим RMII, инициализация PHY хоть и поменяла имя на другой лан чип но настройки остались корректные
пинг пошел, tcp_echo заработало, конекчусь и получаю обратно все что отправил на 7 порт.
Вот действительно, рассказать о проблеме - уже половина решения..
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2019, 11:53

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

IIS 5.1. Проблемы с настройкой
Добрый день! При настройке IIS 5.1 столкнулся с проблемой: сайт доступен с localhost, но не знаю...

Проблемы с настройкой роутера
Постараюсь как можно более подробно объяснить ситуацию. Живу в студенческом общежитии, для доступа...

Проблемы с настройкой CodeBlocks
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, решить следующую проблему: я работаю в...

Проблемы с настройкой Apache 2.2
В общем поставил Apache 2.2. У меня сеть домашняя сеть с роутером. Настроил проброс по 80 му порту...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.