【WCH乙太網介面系列晶片】STM32+CH390+Lwip協議棧簡單應用測試

sw2222發表於2024-04-03

  本篇文章基於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,
              &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

相關文章