本篇文章基于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,&ethernetif_init, &ethernet_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

标签: none

添加新评论