@@ -161,52 +161,60 @@ static void TIM_scheduler_Config(void)
161161
162162void stm32_eth_init (const uint8_t * mac , const uint8_t * ip , const uint8_t * gw , const uint8_t * netmask )
163163{
164- /* Initialize the LwIP stack */
165- lwip_init ();
164+ static uint8_t initDone = 0 ;
165+
166+ if (!initDone ) {
167+ /* Initialize the LwIP stack */
168+ lwip_init ();
169+
170+ if (mac != NULL ) {
171+ ethernetif_set_mac_addr (mac );
172+ } // else default value is used: MAC_ADDR0 ... MAC_ADDR5
173+
174+ if (ip != NULL ) {
175+ IP_ADDR4 (& (gconfig .ipaddr ),ip [0 ],ip [1 ],ip [2 ],ip [3 ]);
176+ } else {
177+ #if LWIP_DHCP
178+ ip_addr_set_zero_ip4 (& (gconfig .ipaddr ));
179+ #else
180+ IP_ADDR4 (& (gconfig .ipaddr ),IP_ADDR0 ,IP_ADDR1 ,IP_ADDR2 ,IP_ADDR3 );
181+ #endif /* LWIP_DHCP */
182+ }
166183
167- if (mac != NULL ) {
168- ethernetif_set_mac_addr (mac );
169- } // else default value is used: MAC_ADDR0 ... MAC_ADDR5
184+ if (gw != NULL ) {
185+ IP_ADDR4 (& (gconfig .gw ),gw [0 ],gw [1 ],gw [2 ],gw [3 ]);
186+ } else {
187+ #if LWIP_DHCP
188+ ip_addr_set_zero_ip4 (& (gconfig .gw ));
189+ #else
190+ IP_ADDR4 (& (gconfig .gw ),GW_ADDR0 ,GW_ADDR1 ,GW_ADDR2 ,GW_ADDR3 );
191+ #endif /* LWIP_DHCP */
192+ }
170193
171- if (ip != NULL ) {
172- IP_ADDR4 (& (gconfig .ipaddr ), ip [0 ],ip [1 ],ip [2 ],ip [3 ]);
173- } else {
174- #if LWIP_DHCP
175- ip_addr_set_zero_ip4 (& (gconfig .ipaddr ));
176- #else
177- IP_ADDR4 (& (gconfig .ipaddr ), IP_ADDR0 , IP_ADDR1 , IP_ADDR2 , IP_ADDR3 );
178- #endif /* LWIP_DHCP */
179- }
194+ if (netmask != NULL ) {
195+ IP_ADDR4 (& (gconfig .netmask ), netmask [0 ],netmask [1 ],netmask [2 ],netmask [3 ]);
196+ } else {
197+ #if LWIP_DHCP
198+ ip_addr_set_zero_ip4 (& (gconfig .netmask ));
199+ #else
200+ IP_ADDR4 (& (gconfig .netmask ), NETMASK_ADDR0 , NETMASK_ADDR1 , NETMASK_ADDR2 , NETMASK_ADDR3 );
201+ #endif /* LWIP_DHCP */
202+ }
180203
181- if (gw != NULL ) {
182- IP_ADDR4 (& (gconfig .gw ),gw [0 ],gw [1 ],gw [2 ],gw [3 ]);
183- } else {
184- #if LWIP_DHCP
185- ip_addr_set_zero_ip4 (& (gconfig .gw ));
186- #else
187- IP_ADDR4 (& (gconfig .gw ),GW_ADDR0 ,GW_ADDR1 ,GW_ADDR2 ,GW_ADDR3 );
188- #endif /* LWIP_DHCP */
189- }
204+ /* Configure the Network interface */
205+ Netif_Config ();
190206
191- if (netmask != NULL ) {
192- IP_ADDR4 (& (gconfig .netmask ),netmask [0 ],netmask [1 ],netmask [2 ],netmask [3 ]);
193- } else {
194- #if LWIP_DHCP
195- ip_addr_set_zero_ip4 (& (gconfig .netmask ));
196- #else
197- IP_ADDR4 (& (gconfig .netmask ),NETMASK_ADDR0 ,NETMASK_ADDR1 ,NETMASK_ADDR2 ,NETMASK_ADDR3 );
198- #endif /* LWIP_DHCP */
199- }
207+ // stm32_eth_scheduler() will be called every 1ms.
208+ TIM_scheduler_Config ();
200209
201- /* Configure the Network interface */
202- Netif_Config ();
210+ initDone = 1 ;
211+ }
203212
213+ /* Reset DHCP if used */
204214 User_notification (& gnetif );
205215
216+ /* Update LwIP stack */
206217 stm32_eth_scheduler ();
207-
208- // stm32_eth_scheduler() will be called every 1ms.
209- TIM_scheduler_Config ();
210218}
211219
212220/**
0 commit comments