diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index 7003de5..306fc9e 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -14,6 +14,10 @@
"C:/ST/STM32CubeIDE_1.13.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.11.3.rel1.win32_1.1.0.202305231506/tools/arm-none-eabi/include",
"./usrc/",
"./sdk",
+ "Middlewares/Third_Party/LwIP/src/include/",
+ "LWIP/Target/",
+ "LWIP/App/",
+ "Middlewares/Third_Party/LwIP/system/",
"./"
],
"defines": [
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 45563fa..9f4ee3e 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -75,7 +75,12 @@
"stop_token": "cpp",
"thread": "cpp",
"early_ticket.h": "c",
- "chrono": "cpp"
+ "chrono": "cpp",
+ "lwip.h": "c",
+ "opt.h": "c",
+ "debug.h": "c",
+ "lwipopts.h": "c",
+ "arch.h": "c"
},
"files.autoGuessEncoding": false,
"files.encoding": "gbk"
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index a3623bd..7f944fc 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -54,6 +54,9 @@ void MX_GPIO_Init(void)
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOD, GPIO_PIN_3, GPIO_PIN_RESET);
+
/*Configure GPIO pins : PE2 PE3 PE4 PE5
PE6 PE7 PE8 PE9
PE10 PE11 PE12 PE13
@@ -102,16 +105,23 @@ void MX_GPIO_Init(void)
/*Configure GPIO pins : PD8 PD9 PD10 PD11
PD12 PD13 PD14 PD15
- PD0 PD1 PD2 PD3
- PD4 PD5 PD6 PD7 */
+ PD0 PD1 PD2 PD4
+ PD5 PD6 PD7 */
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15
- |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
- |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
+ |GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_4
+ |GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+ /*Configure GPIO pin : PD3 */
+ GPIO_InitStruct.Pin = GPIO_PIN_3;
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
}
/* USER CODE BEGIN 2 */
diff --git a/LWIP/App/lwip.c b/LWIP/App/lwip.c
index 01b431e..f5aa6e5 100644
--- a/LWIP/App/lwip.c
+++ b/LWIP/App/lwip.c
@@ -44,6 +44,9 @@ struct netif gnetif;
ip4_addr_t ipaddr;
ip4_addr_t netmask;
ip4_addr_t gw;
+uint8_t IP_ADDRESS[4];
+uint8_t NETMASK_ADDRESS[4];
+uint8_t GATEWAY_ADDRESS[4];
/* USER CODE BEGIN 2 */
@@ -54,13 +57,30 @@ ip4_addr_t gw;
*/
void MX_LWIP_Init(void)
{
+ /* IP addresses initialization */
+ IP_ADDRESS[0] = 192;
+ IP_ADDRESS[1] = 168;
+ IP_ADDRESS[2] = 8;
+ IP_ADDRESS[3] = 10;
+ NETMASK_ADDRESS[0] = 255;
+ NETMASK_ADDRESS[1] = 255;
+ NETMASK_ADDRESS[2] = 255;
+ NETMASK_ADDRESS[3] = 255;
+ GATEWAY_ADDRESS[0] = 192;
+ GATEWAY_ADDRESS[1] = 168;
+ GATEWAY_ADDRESS[2] = 8;
+ GATEWAY_ADDRESS[3] = 1;
+
+/* USER CODE BEGIN IP_ADDRESSES */
+/* USER CODE END IP_ADDRESSES */
+
/* Initilialize the LwIP stack with RTOS */
tcpip_init( NULL, NULL );
- /* IP addresses initialization with DHCP (IPv4) */
- ipaddr.addr = 0;
- netmask.addr = 0;
- gw.addr = 0;
+ /* IP addresses initialization without DHCP (IPv4) */
+ IP4_ADDR(&ipaddr, IP_ADDRESS[0], IP_ADDRESS[1], IP_ADDRESS[2], IP_ADDRESS[3]);
+ IP4_ADDR(&netmask, NETMASK_ADDRESS[0], NETMASK_ADDRESS[1] , NETMASK_ADDRESS[2], NETMASK_ADDRESS[3]);
+ IP4_ADDR(&gw, GATEWAY_ADDRESS[0], GATEWAY_ADDRESS[1], GATEWAY_ADDRESS[2], GATEWAY_ADDRESS[3]);
/* add the network interface (IPv4/IPv6) with RTOS */
netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
@@ -88,9 +108,6 @@ void MX_LWIP_Init(void)
osThreadCreate (osThread(EthLink), &gnetif);
/* USER CODE END H7_OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */
- /* Start DHCP negotiation for a network interface (IPv4) */
- dhcp_start(&gnetif);
-
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
diff --git a/LWIP/Target/ethernetif.c b/LWIP/Target/ethernetif.c
index 0a98f60..7da73db 100644
--- a/LWIP/Target/ethernetif.c
+++ b/LWIP/Target/ethernetif.c
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * Copyright (c) 2024 STMicroelectronics.
+ * Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
@@ -202,7 +202,7 @@ static void low_level_init(struct netif *netif)
heth.Init.RxBuffLen = 1536;
/* USER CODE BEGIN MACADDRESS */
-
+
/* USER CODE END MACADDRESS */
hal_eth_init_status = HAL_ETH_Init(&heth);
@@ -254,7 +254,7 @@ static void low_level_init(struct netif *netif)
/* USER CODE END OS_THREAD_DEF_CREATE_CMSIS_RTOS_V1 */
/* USER CODE BEGIN PHY_PRE_CONFIG */
-
+
/* USER CODE END PHY_PRE_CONFIG */
/* Set PHY IO functions */
LAN8742_RegisterBusIO(&LAN8742, &LAN8742_IOCtx);
@@ -309,7 +309,7 @@ static void low_level_init(struct netif *netif)
netif_set_link_up(netif);
/* USER CODE BEGIN PHY_POST_CONFIG */
-
+
/* USER CODE END PHY_POST_CONFIG */
}
@@ -321,7 +321,7 @@ static void low_level_init(struct netif *netif)
#endif /* LWIP_ARP || LWIP_ETHERNET */
/* USER CODE BEGIN LOW_LEVEL_INIT */
-
+
/* USER CODE END LOW_LEVEL_INIT */
}
@@ -454,7 +454,7 @@ static err_t low_level_output_arp_off(struct netif *netif, struct pbuf *q, const
errval = ERR_OK;
/* USER CODE BEGIN 5 */
-
+
/* USER CODE END 5 */
return errval;
@@ -546,7 +546,7 @@ void pbuf_free_custom(struct pbuf *p)
* @brief Returns the current time in milliseconds
* when LWIP_TIMERS == 1 and NO_SYS == 1
* @param None
-* @retval Current Time value
+* @retval Time
*/
u32_t sys_now(void)
{
@@ -611,7 +611,11 @@ void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
HAL_NVIC_SetPriority(ETH_IRQn, 5, 0);
HAL_NVIC_EnableIRQ(ETH_IRQn);
/* USER CODE BEGIN ETH_MspInit 1 */
-
+ #define ETH_RST_Pin GPIO_PIN_3
+ #define ETH_RST_GPIO_Port GPIOD
+ HAL_GPIO_WritePin(ETH_RST_GPIO_Port,ETH_RST_Pin,GPIO_PIN_RESET);
+ HAL_Delay(50);
+ HAL_GPIO_WritePin(ETH_RST_GPIO_Port,ETH_RST_Pin,GPIO_PIN_SET);
/* USER CODE END ETH_MspInit 1 */
}
}
@@ -738,7 +742,7 @@ void ethernet_link_thread(void const * argument)
struct netif *netif = (struct netif *) argument;
/* USER CODE BEGIN ETH link init */
-
+ netif->link_callback(netif);
/* USER CODE END ETH link init */
for(;;)
@@ -869,6 +873,17 @@ void HAL_ETH_TxFreeCallback(uint32_t * buff)
}
/* USER CODE BEGIN 8 */
+/**
+ * @brief This function notify user about link status changement.
+ * @param netif: the network interface
+ * @retval None
+ */
+__weak void ethernetif_notify_conn_changed(struct netif *netif)
+{
+ /* NOTE : This is function could be implemented in user file
+ when the callback is needed,
+ */
+}
/* USER CODE END 8 */
diff --git a/LWIP/Target/lwipopts.h b/LWIP/Target/lwipopts.h
index 07d0ff0..7a0b20d 100644
--- a/LWIP/Target/lwipopts.h
+++ b/LWIP/Target/lwipopts.h
@@ -1,13 +1,13 @@
/* USER CODE BEGIN Header */
/**
******************************************************************************
- * File Name : Target/lwipopts.h
+ * File Name : lwipopts.h
* Description : This file overrides LwIP stack default configuration
* done in opt.h file.
******************************************************************************
* @attention
*
- * Copyright (c) 2024 STMicroelectronics.
+ * Copyright (c) 2023 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
@@ -49,12 +49,8 @@
/* LwIP Stack Parameters (modified compared to initialization value in opt.h) -*/
/* Parameters set in STM32CubeMX LwIP Configuration GUI -*/
-/*----- Value in opt.h for LWIP_DHCP: 0 -----*/
-#define LWIP_DHCP 1
/*----- Value in opt.h for MEM_ALIGNMENT: 1 -----*/
#define MEM_ALIGNMENT 4
-/*----- Value in opt.h for MEMP_NUM_SYS_TIMEOUT: (LWIP_TCP + IP_REASSEMBLY + LWIP_ARP + (2*LWIP_DHCP) + LWIP_AUTOIP + LWIP_IGMP + LWIP_DNS + (PPP_SUPPORT*6*MEMP_NUM_PPP_PCB) + (LWIP_IPV6 ? (1 + LWIP_IPV6_REASS + LWIP_IPV6_MLD) : 0)) -*/
-#define MEMP_NUM_SYS_TIMEOUT 5
/*----- Value in opt.h for LWIP_ETHERNET: LWIP_ARP || PPPOE_SUPPORT -*/
#define LWIP_ETHERNET 1
/*----- Value in opt.h for LWIP_DNS_SECURE: (LWIP_DNS_SECURE_RAND_XID | LWIP_DNS_SECURE_NO_MULTIPLE_OUTSTANDING | LWIP_DNS_SECURE_RAND_SRC_PORT) -*/
diff --git a/usrc/device.cpp b/usrc/device.cpp
index 08ad2d5..f028c07 100644
--- a/usrc/device.cpp
+++ b/usrc/device.cpp
@@ -8,9 +8,8 @@ using namespace iflytop;
#define TAG "Device"
void Device::init() {
- xs_gpio_init_as_output(&m_debug_led, PC_DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false);
-
XS_LOGI(TAG, "%s:%s", PC_PROJECT_NAME, PC_VERSION);
+ xs_gpio_init_as_output(&m_debug_led, PC_DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false);
// chip_cfg_t chipcfg = {};
// chipcfg.us_dleay_tim = &PC_SYS_DELAY_US_TIMER;
diff --git a/xsync_stm32 Debug.launch b/xsync_stm32 Debug.launch
index cb5f98f..6e46268 100644
--- a/xsync_stm32 Debug.launch
+++ b/xsync_stm32 Debug.launch
@@ -78,5 +78,6 @@
+
diff --git a/xsync_stm32.ioc b/xsync_stm32.ioc
index 210731f..359f8a8 100644
--- a/xsync_stm32.ioc
+++ b/xsync_stm32.ioc
@@ -35,6 +35,11 @@ File.Version=6
GPIO.groupedBy=Group By Peripherals
KeepUserPlacement=false
LWIP.BSP.number=1
+LWIP.GATEWAY_ADDRESS=192.168.008.001
+LWIP.IPParameters=LWIP_DHCP,IP_ADDRESS,NETMASK_ADDRESS,GATEWAY_ADDRESS
+LWIP.IP_ADDRESS=192.168.008.010
+LWIP.LWIP_DHCP=0
+LWIP.NETMASK_ADDRESS=255.255.255.255
LWIP.Version=v2.1.2_Cube
LWIP0.BSP.STBoard=false
LWIP0.BSP.api=BSP_COMPONENT_DRIVER
@@ -72,16 +77,17 @@ Mcu.Pin11=PA9
Mcu.Pin12=PA10
Mcu.Pin13=PA13
Mcu.Pin14=PA14
-Mcu.Pin15=VP_CRC_VS_CRC
-Mcu.Pin16=VP_FREERTOS_VS_CMSIS_V1
-Mcu.Pin17=VP_LWIP_VS_Enabled
-Mcu.Pin18=VP_RNG_VS_RNG
-Mcu.Pin19=VP_SYS_VS_tim11
+Mcu.Pin15=PD3
+Mcu.Pin16=VP_CRC_VS_CRC
+Mcu.Pin17=VP_FREERTOS_VS_CMSIS_V1
+Mcu.Pin18=VP_LWIP_VS_Enabled
+Mcu.Pin19=VP_RNG_VS_RNG
Mcu.Pin2=PC1
-Mcu.Pin20=VP_TIM1_VS_ClockSourceINT
-Mcu.Pin21=VP_TIM3_VS_ClockSourceINT
-Mcu.Pin22=VP_TIM6_VS_ClockSourceINT
-Mcu.Pin23=VP_TIM7_VS_ClockSourceINT
+Mcu.Pin20=VP_SYS_VS_tim11
+Mcu.Pin21=VP_TIM1_VS_ClockSourceINT
+Mcu.Pin22=VP_TIM3_VS_ClockSourceINT
+Mcu.Pin23=VP_TIM6_VS_ClockSourceINT
+Mcu.Pin24=VP_TIM7_VS_ClockSourceINT
Mcu.Pin3=PA1
Mcu.Pin4=PA2
Mcu.Pin5=PA7
@@ -89,7 +95,7 @@ Mcu.Pin6=PC4
Mcu.Pin7=PC5
Mcu.Pin8=PB11
Mcu.Pin9=PB12
-Mcu.PinsNb=24
+Mcu.PinsNb=25
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407VETx
@@ -143,6 +149,8 @@ PC4.Mode=RMII
PC4.Signal=ETH_RXD0
PC5.Mode=RMII
PC5.Signal=ETH_RXD1
+PD3.Locked=true
+PD3.Signal=GPIO_Output
PH0-OSC_IN.Mode=HSE-External-Oscillator
PH0-OSC_IN.Signal=RCC_OSC_IN
PH1-OSC_OUT.Mode=HSE-External-Oscillator
@@ -178,7 +186,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_RNG_Init-RNG-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true,9-MX_TIM6_Init-TIM6-false-HAL-true,10-MX_TIM1_Init-TIM1-false-HAL-true
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_RNG_Init-RNG-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true,9-MX_TIM6_Init-TIM6-false-HAL-true,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_LWIP_Init-LWIP-false-HAL-false
RCC.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=144000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4