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