本篇文章基于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) { struct ip4_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
标签:udp,Lwip,void,tcp,server,STM32,CH390,pcb,以太网 From: https://www.cnblogs.com/sw111/p/18112004