@@ -161,52 +161,60 @@ static void TIM_scheduler_Config(void)
161
161
162
162
void stm32_eth_init (const uint8_t * mac , const uint8_t * ip , const uint8_t * gw , const uint8_t * netmask )
163
163
{
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
+ }
166
183
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
+ }
170
193
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
+ }
180
203
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 ();
190
206
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 ();
200
209
201
- /* Configure the Network interface */
202
- Netif_Config ();
210
+ initDone = 1 ;
211
+ }
203
212
213
+ /* Reset DHCP if used */
204
214
User_notification (& gnetif );
205
215
216
+ /* Update LwIP stack */
206
217
stm32_eth_scheduler ();
207
-
208
- // stm32_eth_scheduler() will be called every 1ms.
209
- TIM_scheduler_Config ();
210
218
}
211
219
212
220
/**
0 commit comments