本人遇到STM32F767IGTx使用CubeMX ETH_-RMII-LWIP 裸机测试无法正常ping解决方案,且指示灯不亮
使用正点原子STM32F767开发板通过CubeMX 配置ETH-RMII-LWIP
1.原理图
特别注意 ETH_RESET 使用的PD3 正点原理通过pcf8574连接PD3.一定要初始化.
2.时钟配置
3.ETH配置
4.LWIP配置,不使用DHCP
5.配置栈大小
6.main.c
void App_init(void)
{
printf("hello zorb\r\n");
}
/* USER CODE END PM */
void App_process(void)
{
}
int main(void)
{
HAL_Init();
SystemClock_Config();
IIC_Init(); //特别主要一定不要掉了
PCF8574_Init(); //特别主要一定不要掉了 否则不管怎么ping都ping不通
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_LWIP_Init();
while (1)
{
MX_LWIP_Process();
App_process();
}
}
7.lwip.c
void MX_LWIP_Init(void)
{
struct netif *Netif_Init_Flag;
/* IP addresses initialization */
PCF8574_WriteBit(ETH_RESET_IO,1); //硬件复位
delay_ms(100);
PCF8574_WriteBit(ETH_RESET_IO,0); //复位结束
delay_ms(100);
//注意上面PCF8574_WriteBit 硬件复位调用位置,这个位置使用错误指示灯无法点亮,如果pcf8574没有初始化成功,指示灯也不会亮.也ping不通.
IP_ADDRESS[0] = 192;
IP_ADDRESS[1] = 168;
IP_ADDRESS[2] = 1;
IP_ADDRESS[3] = 100;
NETMASK_ADDRESS[0] = 255;
NETMASK_ADDRESS[1] = 255;
NETMASK_ADDRESS[2] = 255;
NETMASK_ADDRESS[3] = 0;
GATEWAY_ADDRESS[0] = 192;
GATEWAY_ADDRESS[1] = 168;
GATEWAY_ADDRESS[2] = 1;
GATEWAY_ADDRESS[3] = 1;
/* Initilialize the LwIP stack without RTOS */
lwip_init();
/* 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) without RTOS */
Netif_Init_Flag = netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, ðernet_input);
/* Registers the default network interface */
if(Netif_Init_Flag == NULL)
{
printf("netif_add_eorr\n");
}else{
netif_set_default(&gnetif);
netif_set_up(&gnetif);
}
}
本人也是初次接触使用cubemx编写lwip,如果有不对的欢迎指出.希望对初学者有所帮助.