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