Handle link status
This commit is contained in:
parent
35f268d6dc
commit
b2180a2f51
@ -5,11 +5,9 @@ void app() {
|
|||||||
init_LWIP();
|
init_LWIP();
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
// process_LWIP();
|
process_LWIP();
|
||||||
uint32_t regvalue = 0;
|
// GPIO_ToggleBits(GPIOB, GPIO_Pin_7);
|
||||||
HAL_ETH_ReadPHYRegister(getEthStruct(), 1, ®value);
|
delay(400);
|
||||||
delay(500);
|
|
||||||
printf("Test: %d\r\n", regvalue);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,11 +2,6 @@ set(LWIP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lwip/src)
|
|||||||
set(LWIP_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/lwip/src/include)
|
set(LWIP_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/lwip/src/include)
|
||||||
set(LWIP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lwip/src/core)
|
set(LWIP_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lwip/src/core)
|
||||||
|
|
||||||
file(GLOB_RECURSE LWIP_SOURCES
|
|
||||||
${LWIP_SOURCE_DIR}/core/*.c
|
|
||||||
${LWIP_SOURCE_DIR}/netif/*.c
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(bsp STATIC
|
add_library(bsp STATIC
|
||||||
bsp.c
|
bsp.c
|
||||||
lwip/lwip.c
|
lwip/lwip.c
|
||||||
|
24
bsp/bsp.c
24
bsp/bsp.c
@ -1,6 +1,3 @@
|
|||||||
#include "stm32f4xx_gpio.h"
|
|
||||||
#include "stm32f4xx_rcc.h"
|
|
||||||
#include "stm32f4xx_dma.h"
|
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "bsp.h"
|
#include "bsp.h"
|
||||||
#include "lwip.h"
|
#include "lwip.h"
|
||||||
@ -15,6 +12,12 @@ static volatile uint32_t cnt = 0;
|
|||||||
void SysTick_Handler(void)
|
void SysTick_Handler(void)
|
||||||
{
|
{
|
||||||
if (cnt == INTERVAL) {
|
if (cnt == INTERVAL) {
|
||||||
|
|
||||||
|
// uint32_t regvalue = 0;
|
||||||
|
// HAL_ETH_ReadPHYRegister(getEthStruct(), 1, ®value);
|
||||||
|
|
||||||
|
// printf("PHY: %d\r\n", regvalue);
|
||||||
|
|
||||||
GPIO_ToggleBits(GPIOB, GPIO_Pin_14);
|
GPIO_ToggleBits(GPIOB, GPIO_Pin_14);
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
}
|
}
|
||||||
@ -52,7 +55,6 @@ void gpio_init() {
|
|||||||
RCC_AHB1Periph_GPIOG,
|
RCC_AHB1Periph_GPIOG,
|
||||||
ENABLE
|
ENABLE
|
||||||
);
|
);
|
||||||
|
|
||||||
GPIO_InitTypeDef gpio;
|
GPIO_InitTypeDef gpio;
|
||||||
|
|
||||||
GPIO_StructInit(&gpio);
|
GPIO_StructInit(&gpio);
|
||||||
@ -60,7 +62,6 @@ void gpio_init() {
|
|||||||
gpio.GPIO_Pin = led_pins;
|
gpio.GPIO_Pin = led_pins;
|
||||||
GPIO_Init(GPIOB, &gpio);
|
GPIO_Init(GPIOB, &gpio);
|
||||||
GPIO_ResetBits(GPIOB, led_pins);
|
GPIO_ResetBits(GPIOB, led_pins);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void usart_init() {
|
void usart_init() {
|
||||||
@ -106,6 +107,11 @@ void dma_init() {
|
|||||||
|
|
||||||
|
|
||||||
void eth_init() {
|
void eth_init() {
|
||||||
|
|
||||||
|
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACEN, ENABLE);
|
||||||
|
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACRXEN, ENABLE);
|
||||||
|
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACTXEN, ENABLE);
|
||||||
|
|
||||||
GPIO_InitTypeDef gpio;
|
GPIO_InitTypeDef gpio;
|
||||||
|
|
||||||
gpio.GPIO_Mode = GPIO_Mode_AF;
|
gpio.GPIO_Mode = GPIO_Mode_AF;
|
||||||
@ -134,25 +140,21 @@ void eth_init() {
|
|||||||
GPIO_Init(GPIOB, &gpio);
|
GPIO_Init(GPIOB, &gpio);
|
||||||
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH); //RMII TXD1
|
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_ETH); //RMII TXD1
|
||||||
|
|
||||||
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACEN, ENABLE);
|
|
||||||
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACRXEN, ENABLE);
|
|
||||||
RCC_AHB1PeriphClockCmd(RCC_AHB1ENR_ETHMACTXEN, ENABLE);
|
|
||||||
NVIC_SetPriority(ETH_IRQn, 0);
|
NVIC_SetPriority(ETH_IRQn, 0);
|
||||||
NVIC_EnableIRQ(ETH_IRQn);
|
NVIC_EnableIRQ(ETH_IRQn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void board_init() {
|
void board_init() {
|
||||||
uint32_t tick = SystemCoreClock/1000;
|
uint32_t tick = SystemCoreClock/1000 - 1;
|
||||||
SysTick_Config(tick);
|
SysTick_Config(tick);
|
||||||
NVIC_EnableIRQ(SysTick_IRQn);
|
NVIC_EnableIRQ(SysTick_IRQn);
|
||||||
__enable_irq();
|
// __enable_irq();
|
||||||
gpio_init();
|
gpio_init();
|
||||||
usart_init();
|
usart_init();
|
||||||
// dma_init();
|
// dma_init();
|
||||||
eth_init();
|
eth_init();
|
||||||
init_LWIP();
|
init_LWIP();
|
||||||
delay(50); //wait until periph init
|
|
||||||
printf("Controller is started...\r\n");
|
printf("Controller is started...\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
#include "stm32f4xx.h"
|
#include "stm32f4xx.h"
|
||||||
#include "stm32f4xx_usart.h"
|
#include "stm32f4xx_usart.h"
|
||||||
|
#include "stm32f4xx_gpio.h"
|
||||||
|
#include "stm32f4xx_rcc.h"
|
||||||
|
#include "stm32f4xx_dma.h"
|
||||||
void board_init();
|
void board_init();
|
||||||
uint32_t getRegister();
|
uint32_t getRegister();
|
||||||
uint32_t getSysTick();
|
uint32_t getSysTick();
|
||||||
|
@ -290,7 +290,6 @@ static struct pbuf * low_level_input(struct netif *netif)
|
|||||||
/* get received frame */
|
/* get received frame */
|
||||||
if (HAL_ETH_GetReceivedFrame(&heth) != HAL_OK)
|
if (HAL_ETH_GetReceivedFrame(&heth) != HAL_OK)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* Obtain the size of the packet and put it into the "len" variable. */
|
/* Obtain the size of the packet and put it into the "len" variable. */
|
||||||
len = heth.RxFrameInfos.length;
|
len = heth.RxFrameInfos.length;
|
||||||
buffer = (uint8_t *)heth.RxFrameInfos.buffer;
|
buffer = (uint8_t *)heth.RxFrameInfos.buffer;
|
||||||
@ -354,6 +353,30 @@ static struct pbuf * low_level_input(struct netif *netif)
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void check_link_status(struct netif* netif) {
|
||||||
|
uint32_t regvalue = 0;
|
||||||
|
if (HAL_ETH_ReadPHYRegister(&heth, PHY_BSR, ®value) == HAL_OK)
|
||||||
|
{
|
||||||
|
if((regvalue & PHY_LINKED_STATUS)== (uint16_t)RESET)
|
||||||
|
{
|
||||||
|
// Link status = disconnected
|
||||||
|
if (netif_is_link_up(netif))
|
||||||
|
{
|
||||||
|
netif_set_down(netif);
|
||||||
|
printf("unplugged\r\n");
|
||||||
|
netif_set_link_down(netif);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Link status = connected
|
||||||
|
if (!netif_is_link_up(netif))
|
||||||
|
{
|
||||||
|
printf("plugged\r\n");
|
||||||
|
NVIC_SystemReset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function should be called when a packet is ready to be read
|
* This function should be called when a packet is ready to be read
|
||||||
* from the interface. It uses the function low_level_input() that
|
* from the interface. It uses the function low_level_input() that
|
||||||
@ -365,24 +388,25 @@ static struct pbuf * low_level_input(struct netif *netif)
|
|||||||
*/
|
*/
|
||||||
void ethernetif_input(struct netif *netif)
|
void ethernetif_input(struct netif *netif)
|
||||||
{
|
{
|
||||||
err_t err;
|
// err_t err;
|
||||||
struct pbuf *p;
|
// struct pbuf *p;
|
||||||
|
// uint32_t regvalue = 0;
|
||||||
|
// /* move received packet into a new pbuf */
|
||||||
|
// p = low_level_input(netif);
|
||||||
|
netif_set_link_callback(netif, ethernetif_update_config);
|
||||||
|
check_link_status(netif);
|
||||||
|
// /* no packet could be read, silently ignore this */
|
||||||
|
// if (p == NULL) return;
|
||||||
|
|
||||||
/* move received packet into a new pbuf */
|
// // /* entry point to the LwIP stack */
|
||||||
p = low_level_input(netif);
|
// err = netif->input(p, netif);
|
||||||
|
|
||||||
/* no packet could be read, silently ignore this */
|
// if (err != ERR_OK)
|
||||||
if (p == NULL) return;
|
// {
|
||||||
|
// LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
|
||||||
/* entry point to the LwIP stack */
|
// pbuf_free(p);
|
||||||
err = netif->input(p, netif);
|
// p = NULL;
|
||||||
|
// }
|
||||||
if (err != ERR_OK)
|
|
||||||
{
|
|
||||||
LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_input: IP input error\n"));
|
|
||||||
pbuf_free(p);
|
|
||||||
p = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !LWIP_ARP
|
#if !LWIP_ARP
|
||||||
@ -486,9 +510,10 @@ void ethernetif_update_config(struct netif *netif)
|
|||||||
{
|
{
|
||||||
__IO uint32_t tickstart = 0;
|
__IO uint32_t tickstart = 0;
|
||||||
uint32_t regvalue = 0;
|
uint32_t regvalue = 0;
|
||||||
|
|
||||||
if(netif_is_link_up(netif))
|
if(netif_is_link_up(netif))
|
||||||
{
|
{
|
||||||
|
GPIO_SetBits(GPIOB, GPIO_Pin_0);
|
||||||
|
GPIO_SetBits(GPIOB, GPIO_Pin_7);
|
||||||
/* Restart the auto-negotiation */
|
/* Restart the auto-negotiation */
|
||||||
if(heth.Init.AutoNegotiation != ETH_AUTONEGOTIATION_DISABLE)
|
if(heth.Init.AutoNegotiation != ETH_AUTONEGOTIATION_DISABLE)
|
||||||
{
|
{
|
||||||
@ -558,7 +583,9 @@ void ethernetif_update_config(struct netif *netif)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Stop MAC interface */
|
/* Stop MAC interface */
|
||||||
HAL_ETH_Stop(&heth);
|
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
|
||||||
|
GPIO_SetBits(GPIOB, GPIO_Pin_7);
|
||||||
|
// HAL_ETH_Stop(&heth);
|
||||||
}
|
}
|
||||||
|
|
||||||
ethernetif_notify_conn_changed(netif);
|
ethernetif_notify_conn_changed(netif);
|
||||||
|
@ -10,7 +10,7 @@ err_t ethernetif_init(struct netif *netif);
|
|||||||
void ethernetif_input(struct netif *netif);
|
void ethernetif_input(struct netif *netif);
|
||||||
void ethernetif_update_config(struct netif *netif);
|
void ethernetif_update_config(struct netif *netif);
|
||||||
void ethernetif_notify_conn_changed(struct netif *netif);
|
void ethernetif_notify_conn_changed(struct netif *netif);
|
||||||
|
void check_link_status(struct netif* netif);
|
||||||
u32_t sys_jiffies(void);
|
u32_t sys_jiffies(void);
|
||||||
u32_t sys_now(void);
|
u32_t sys_now(void);
|
||||||
ETH_HandleTypeDef* getEthStruct();
|
ETH_HandleTypeDef* getEthStruct();
|
||||||
|
@ -65,6 +65,6 @@ void init_LWIP(void)
|
|||||||
void process_LWIP()
|
void process_LWIP()
|
||||||
{
|
{
|
||||||
ethernetif_input(&gnetif);
|
ethernetif_input(&gnetif);
|
||||||
sys_check_timeouts();
|
// sys_check_timeouts();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
/* LwIP Stack Parameters (modified compared to initialization value in opt.h) -*/
|
/* LwIP Stack Parameters (modified compared to initialization value in opt.h) -*/
|
||||||
/* Parameters set in STM32CubeMX LwIP Configuration GUI -*/
|
/* Parameters set in STM32CubeMX LwIP Configuration GUI -*/
|
||||||
/*----- Value in opt.h for LWIP_DHCP: 0 -----*/
|
/*----- Value in opt.h for LWIP_DHCP: 0 -----*/
|
||||||
#define LWIP_DHCP 1
|
#define LWIP_DHCP 0
|
||||||
/*----- Value in opt.h for NO_SYS: 0 -----*/
|
/*----- Value in opt.h for NO_SYS: 0 -----*/
|
||||||
#define NO_SYS 1
|
#define NO_SYS 1
|
||||||
/*----- Value in opt.h for SYS_LIGHTWEIGHT_PROT: 1 -----*/
|
/*----- Value in opt.h for SYS_LIGHTWEIGHT_PROT: 1 -----*/
|
||||||
@ -128,19 +128,19 @@
|
|||||||
/*----- Value in opt.h for CHECKSUM_CHECK_ICMP6: 1 -----*/
|
/*----- Value in opt.h for CHECKSUM_CHECK_ICMP6: 1 -----*/
|
||||||
#define CHECKSUM_CHECK_ICMP6 0
|
#define CHECKSUM_CHECK_ICMP6 0
|
||||||
/*----- Default Value for ETHARP_DEBUG: LWIP_DBG_OFF ---*/
|
/*----- Default Value for ETHARP_DEBUG: LWIP_DBG_OFF ---*/
|
||||||
#define ETHARP_DEBUG LWIP_DBG_ON
|
#define ETHARP_DEBUG LWIP_DBG_OFF
|
||||||
/*----- Default Value for NETIF_DEBUG: LWIP_DBG_OFF ---*/
|
/*----- Default Value for NETIF_DEBUG: LWIP_DBG_OFF ---*/
|
||||||
#define NETIF_DEBUG LWIP_DBG_ON
|
#define NETIF_DEBUG LWIP_DBG_OFF
|
||||||
/*----- Default Value for PBUF_DEBUG: LWIP_DBG_OFF ---*/
|
/*----- Default Value for PBUF_DEBUG: LWIP_DBG_OFF ---*/
|
||||||
#define PBUF_DEBUG LWIP_DBG_OFF
|
#define PBUF_DEBUG LWIP_DBG_OFF
|
||||||
/*----- Default Value for ICMP_DEBUG: LWIP_DBG_OFF ---*/
|
/*----- Default Value for ICMP_DEBUG: LWIP_DBG_OFF ---*/
|
||||||
#define ICMP_DEBUG LWIP_DBG_ON
|
#define ICMP_DEBUG LWIP_DBG_OFF
|
||||||
/*----- Default Value for SYS_DEBUG: LWIP_DBG_OFF ---*/
|
/*----- Default Value for SYS_DEBUG: LWIP_DBG_OFF ---*/
|
||||||
#define SYS_DEBUG LWIP_DBG_ON
|
#define SYS_DEBUG LWIP_DBG_OFF
|
||||||
/*----- Default Value for UDP_DEBUG: LWIP_DBG_OFF ---*/
|
/*----- Default Value for UDP_DEBUG: LWIP_DBG_OFF ---*/
|
||||||
#define UDP_DEBUG LWIP_DBG_ON
|
#define UDP_DEBUG LWIP_DBG_OFF
|
||||||
/*----- Default Value for DHCP_DEBUG: LWIP_DBG_OFF ---*/
|
/*----- Default Value for DHCP_DEBUG: LWIP_DBG_OFF ---*/
|
||||||
#define DHCP_DEBUG LWIP_DBG_ON
|
#define DHCP_DEBUG LWIP_DBG_OFF
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
#define LWIP_DEBUG 1
|
#define LWIP_DEBUG 1
|
||||||
@ -148,6 +148,8 @@
|
|||||||
#define LWIP_UDP 1
|
#define LWIP_UDP 1
|
||||||
|
|
||||||
#define LWIP_TCP 0
|
#define LWIP_TCP 0
|
||||||
|
|
||||||
|
#define LWIP_NETIF_LINK_CALLBACK 1
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
project(stm32f4_lib C ASM)
|
project(stm32f4_lib C ASM)
|
||||||
|
|
||||||
set(DEVICE_FAMILY STM32F439xx)
|
set(DEVICE_FAMILY STM32F439xx)
|
||||||
get_filename_component(LINKER_SCRIPT src/stm32f439zi_flash.ld ABSOLUTE)
|
# get_filename_component(LINKER_SCRIPT src/stm32f439zi_flash.ld ABSOLUTE)
|
||||||
|
get_filename_component(LINKER_SCRIPT src/STM32F439ZITx_FLASH.ld ABSOLUTE)
|
||||||
|
|
||||||
add_library(stm32f4xx STATIC
|
add_library(stm32f4xx STATIC
|
||||||
src/STM32F4xx_StdPeriph_Driver/misc.c
|
src/STM32F4xx_StdPeriph_Driver/misc.c
|
||||||
@ -38,7 +39,8 @@ add_library(stm32f4xx STATIC
|
|||||||
src/STM32F4xx_StdPeriph_Driver/stm32f4xx_usart.c
|
src/STM32F4xx_StdPeriph_Driver/stm32f4xx_usart.c
|
||||||
# src/STM32F4xx_StdPeriph_Driver/stm32f4xx_wwdg.c
|
# src/STM32F4xx_StdPeriph_Driver/stm32f4xx_wwdg.c
|
||||||
src/system_stm32f4xx.c
|
src/system_stm32f4xx.c
|
||||||
src/startup_stm32f4xx.S
|
# src/startup_stm32f4xx.S
|
||||||
|
src/startup_stm32f439xx.S
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(stm32f4xx PUBLIC
|
target_include_directories(stm32f4xx PUBLIC
|
||||||
@ -50,6 +52,7 @@ target_include_directories(stm32f4xx PUBLIC
|
|||||||
target_compile_definitions(stm32f4xx PUBLIC USE_STDPERIPH_DRIVER)
|
target_compile_definitions(stm32f4xx PUBLIC USE_STDPERIPH_DRIVER)
|
||||||
target_compile_definitions(stm32f4xx PUBLIC ${DEVICE_FAMILY})
|
target_compile_definitions(stm32f4xx PUBLIC ${DEVICE_FAMILY})
|
||||||
target_compile_definitions(stm32f4xx PUBLIC HSE_VALUE=8000000)
|
target_compile_definitions(stm32f4xx PUBLIC HSE_VALUE=8000000)
|
||||||
|
target_compile_definitions(stm32f4xx PUBLIC SYSTEM_CORE_CLOCK=180000000)
|
||||||
target_compile_definitions(stm32f4xx PUBLIC USE_STM324x7I_EVAL)
|
target_compile_definitions(stm32f4xx PUBLIC USE_STM324x7I_EVAL)
|
||||||
|
|
||||||
target_compile_options(stm32f4xx PRIVATE -nostartfiles)
|
target_compile_options(stm32f4xx PRIVATE -nostartfiles)
|
||||||
|
Loading…
Reference in New Issue
Block a user