【WCH以太网接口系列芯片】STM32+CH390+Lwip协议栈简单应用测试
本篇文章基于STM32F103和CH390H芯片进行例程移植及相关注意事项,简单验证TCP\UDP\Ping基础功能。
硬件:STM32F103开发板+沁恒CH390H的评估版图一示,SPI使用接口为:INT->PA0,RST->PA1,CS->PA2,SCK->PA5,MISO->PA6,MOSI->PA7,WOL->PA8。
图一
软件移植:采用的沁恒官方提供的CH390EVT中的Lwip例程进行移植,主要为CH390的驱动和Lwip协议栈部分,移植过程中注意有一个文件名为slipif.c文件会在编译过程中报错(图二),该文件可以删除,正常情况下用不到,如果需要可以重新自定义下。
图二
移植完成后,注意main函数中lwip初始化函数,IP地址为192.168.1.120,子网掩码255.255.255.0,网关为192.168.1.1。
void init_lwip_netif(void)
{structip4_addr ipaddr, netmask, gateway;
IP4_ADDR(&ipaddr, 192, 168, 1, 120);
IP4_ADDR(&netmask, 255, 255, 255, 0);
IP4_ADDR(&gateway, 192, 168, 1, 1);/*Initialize the LwIP stack without RTOS*/lwip_init();/*add the network interface (IPv4/IPv6) without RTOS*/netif_add(&ch390_netif, &ipaddr, &netmask, &gateway, NULL,ðernetif_init, ðernet_input);/*Registers the default network interface*/netif_set_default(&ch390_netif);
netif_set_up(&ch390_netif);
}
------------------------------------------------------------------------------------------------------------------------------------------------
一、Ping测试:
CH390正常初始化后,用网线将CH390和电脑直连,PHY连接正常后D1灯会亮起,若未正常初始化评估版灯微亮,检查SPI接口时序和打印信息是否异常,图三打印信息。
图三
使用电脑CMD命令,ping192.168.1.120地址,图四示:
图四
正常ping通,说明网络连接正常,若出现ping不通,但网口灯已经常亮,建议关闭电脑防火墙,重新复位测试。
------------------------------------------------------------------------------------------------------------------------------------------------
二、TCP连接测试
(1)TCP Client:main函数注意修改tcp_clinet_int函数中的服务器IP地址,即电脑的IP地址为192.168.1.21,服务器端口为1000,本地端口是随机的。
void tcp_client_init(void)
{
ip4_addr_t server_ip;
IP4_ADDR(&server_ip, 192, 168, 1, 21);
tcp_client_pcb=tcp_new();
tcp_connect(tcp_client_pcb, (const ip_addr_t *)&server_ip,
1000, tcp_client_connected);
tcp_err(tcp_client_pcb, tcp_client_error);
}
采用网络测试工具建立TCP服务器,注意IP地址和端口号,建立成功后,会建立连接。程序中是回环测试,通过软件向CH390发送数据后,会进行数据回传,图五示。
图五
(2)TCP Server:注意本地端口为2300,图五示,创建一个TCP客户端连接,目标IP为192.168.1.120,目标端口为2300。
void tcp_server_init(void)
{
tcp_server_pcb=tcp_new_ip_type(IPADDR_TYPE_ANY);
tcp_bind(tcp_server_pcb, IP_ANY_TYPE,2300);
tcp_server_pcb=tcp_listen(tcp_server_pcb);
tcp_accept(tcp_server_pcb, tcp_server_accept);
}
------------------------------------------------------------------------------------------------------------------------------------------------
三、UDP连接测试
UDP模式中:注意本地端口为2300,对端UDP端口为1000。
void udpecho_init(void)
{struct udp_pcb *udp_echo_pcb;
udp_echo_pcb=udp_new();
udp_bind(udp_echo_pcb, IP_ADDR_ANY,2300);
udp_connect(udp_echo_pcb, IP_ADDR_ANY,1000);
udp_recv(udp_echo_pcb, udpecho_recv, NULL);
}
通过软件建立UDP连接,图六示,注意目标端口和本地端口是否和程序设置对应。
以上为STM32+CH390H的应用测试,代码自取连接:
https://files.cnblogs.com/files/blogs/805237/CH390.rar?t=1712129908&download=true