首页 > 其他分享 >【WCH以太网接口系列芯片】STM32+CH390+Lwip协议栈简单应用测试

【WCH以太网接口系列芯片】STM32+CH390+Lwip协议栈简单应用测试

时间:2024-04-03 15:44:23浏览次数:40  
标签:udp Lwip void tcp server STM32 CH390 pcb 以太网

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

 

标签:udp,Lwip,void,tcp,server,STM32,CH390,pcb,以太网
From: https://www.cnblogs.com/sw111/p/18112004

相关文章

  • 【STM32嵌入式系统设计与开发】——16InputCapture(输入捕获应用)
    这里写目录标题STM32资料包:百度网盘下载链接:链接:https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd=8888提取码:8888一、任务描述二、任务实施1、工程文件夹创建2、函数编辑(1)主函数编辑(2)USART1初始化函数(usart1_init())(3)USART数据发送函数(USART1_Send_Data())(4)USART......
  • 巨型帧 && 为什么以太网无法接收大于1500字节的数据包?
    参考:(56封私信/81条消息)为什么以太网无法接收大于1500字节的数据包?-知乎(zhihu.com) 网络数据帧中的(JumboFrame)巨帧、超长帧-CSDN博客 在计算机网络中,巨型帧(英语:jumboframes),又称大型帧,是指有效负载超过IEEE802.3标准所限制的1500字节的以太网帧。通常来说,巨型......
  • 【stm32】USART编码部分--串口数据包
    USART串口数据包【源码放在最后】关于数据包的分类关于数据包的发送如果想要发送Hex数据包,定义一个数组填充数据,然后使用串口模块函数SendArray进行发送如果想要发送文本数据包,写一个字符串然后调用SendString进行发送对于发送数据包很简单,因为发送过程完全是自主......
  • STM32F103系列IIC通讯代码
    CH1--SDA;CH2--SCL。 #include"iic.h"voidIIC_GPIO_Init(void){GPIO_InitTypeDefGPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin......
  • 基于STM32HAL库的FreeRTOS学习(2)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档前言上一篇文章我们介绍了FreeRTOS的基础创建任务函数,这篇我们来介绍FreeRTOS的任务挂起与恢复函数。提示:以下是本篇文章正文内容,下面案例可供参考一、什么是任务挂起与恢复?在了解任务恢复之前,我们要先......
  • stm32cubeide 调试非 0x08000000 地址程序配置
    使用stm32cubeide调试非0x08000000,我们需要一些配置.ld链接脚本条件编译目前如果要修改程序的启动地址需要修改两个地方system_stm32f103xx.c中的VECT_TAB_OFFSET,可通过宏定义开启或者关闭.ld链接脚本,可通过宏进行条件编译,也可以直接修改ld,创建不同的链接脚本文件,创建......
  • Threadx rtos 移植指南(stm32f1)
    Threadx系统移植非常简单,下面记录gnu工具链移植步骤库文件目录.├──cmake#CMakelistfilesforbuildingtheproject├──common#CoreThreadXfiles├──common_modules#CoreThreadXmodul......
  • 基于 STM32U5 片内温度传感器正确测算温度
    1.引言STM32在内部都带有一个温度传感器,STM32U5也不例外。这个位于晶圆上的温度传感器虽然不太适合用来测量外部环境的温度,但是用于监控一下晶圆上的温度也是挺好的,可以防止芯片过温运行。2.问题2.1.问题详情某客户在使用STM32U575ZIT6Q时,使用ADC4对内部温度传......
  • 基于STM32单片机智能PID温度控制系统OLED显示设计定制20-408
    20-408、基于STM32智能温度控制系统设计功能:本设计由STM32F103C8T6单片机核心板电路+OLED液晶显示屏电路+DS18B20温度检测电路组成。产品功能描述:1、OLED液晶屏第一列显示目标温度和加热时间。第二列显示实时温度和制冷时间。2、如果当前温度低于目标温度,则系统开始加热,否......
  • HC-SR04使用指南(STM32)
    基于STM32和HC-SR04模块实现超声波测距功能本文用的单片机是STM32F103C8T6,超声波测距模块是HC-SR04,显示距离是通过上位机显示。HC-SR04硬件概述HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40KHz超声波脉冲。接收器监听发射的脉冲。......