zoukankan      html  css  js  c++  java
  • LWIP初体验修改ST官方demo

    01、硬件说明

    为什么要写这篇文章?STM32的网络应用还是个复杂的外设的,拿到一个板子需要验证网络部分是否正常,硬件设计是否有问题,对于很熟悉LWIP的同学可以直接移植LWIP,验证硬件。但快速且方便的办法是修改ST的官方demo来验证硬件。(ST提供了CubeMX工具,如果使用该工具的话,也很方便,不在本文的考虑范围内)。

    本文的硬件测试环境

    1. 主控:STM32F207VCT6,100管脚的封装

    2. 网络PHY芯片:RTL8201EL,48管脚封装,34和35管脚下拉,也就是芯片地址:0

    3. 使用的网络接口:MII接口

    涉及到的硬件原理图和PCB开源,开源地址

    https://github.com/strongercjd/STM32F207VCT6

    本文涉及到的修改前代码和修改后代码下载地址

    链接:https://pan.baidu.com/s/1dr9MzX_pga2SYWOft4lniw

    提取码:7uqj

    本文目的:本文不会详细讲解LWIP相关内容,只是LWIP的初体验,如果你有一块板子带有网络PHY,需要你测试硬件是否有问题,本文或许对你有帮助。

    02、修改步骤

    ST官方提供了很多demo,UDP,tftp,http,TCP等等,我们修改最常用的TCPSever的demo,代码路径如下:

    图片

    ①是IAR的工程代码,②是Keil的工程代码。

    2.1、修改IAR配置文件

    修改芯片设置(其实不用修改)

    图片

    硬件使用的是SWD模式,如果你使用的硬件是JTAG模式,不需要修改。

    图片

    2.2、修改网络PHY地址

    在stm32f2x7_eth_bsp.h文件中,将DP83848的PHY地址修改为0。

    图片

    2.3、修改硬件IO

    在stm32f2x7_eth_bsp.c中,这部分主要是根据具体硬件修改的,因为ST官方demo使用的是144脚芯片,我们使用100脚芯片,对应的GPIO需要修改。

    图片

    2.2、屏蔽无用的东西和修改IP

    在main.h中,屏蔽USE_LCD宏定义,官方开发板使用了LCD,这里我们不使用。

    图片

    修改IP地址(以本机IP地址为准,修改一个和自己PC在同一网段的空闲IP),再修改网关。

    图片

    2.3、屏蔽其他代码

    在stm32f2x7_eth_bsp.c中

    图片

    屏蔽这一项是因为这是跟芯片相关的,该函数功能:配置物理层产生一个中断的链路状态变化

    demo使用的是DP83848,我们的硬件使用的是RTL8201

    该函数定义

    图片

    PHY_MICR宏定义如下

    图片

    该函数操作的是DP83848的17寄存器,改寄存器属于厂商自定义部分寄存器。

    重点是RTL8201芯片没有该寄存器。这部分内容详见《RTL8201网络芯片讲解》,里面讲解到了这个问题。

    03、效果显示

    3.1、电脑能ping通

    图片

    3.2、客户端能够连接收发数据

    使用PC的TCP客户端,可以连接上STM32F207建立的TCPSever,端口是7。STM32收到数据后,把所有数据返回。

    图片

    04、使用中断方式

    通过上述修改,已经简单将LWIP简单跑起来了,并且建立了TCPSever,但demo中使用的是查询的方式,实际项目中是需要使用中断的,以便快速接收到网络数据。

    首先屏蔽掉main.c中轮询函数。

    图片

    添加网口中断配置,在stm32f2x7_eth.c中增加ETH_IRQ的中断配置。

    图片

    在stm32f2xx_it.c中添加中断服务函数,添加的函数就是刚刚main函数屏蔽的内容。

    图片

    注意,这里采用时候if判断语句,这里其实是有隐患的,如果一次数据大于1500字节,也就是说需要IP分片就是丢包,IP分片内容请看文章《IP协议详解》。我们将if修改成while即可。

    图片

    测试结果,使用ping命令测试

    图片

    PC端使用TCP客户端工具测试STM32建立的TCPsever。

    图片

    05、Keil工程的修改

    主要是修改工程配置,代码修改参考上述IAR修改过程即可。

    修改芯片类型

    图片

    修改调试工具,ST官方代码当然使用STlink了,我使用Jlink。

    图片

    使用Jlink的SWD模式。

    图片

    06、移植TCP客户机代码

    上文我们修改了TCPSever的demo,在很多情况STM32作为TCP客户端连接服务器,下面我们将TCP客户端代码移植到刚才修改好的TCPSever工程中。为了体验一下,在移植好LWIP的基础上,如果要实现TCP客户端,需要哪些函数接口。

    TCP客户端demo代码在ST官方库中位置。

    图片

    demo的代码在中断函数中,TCP作为客户端主动连接服务器的代码在中断函数中,在ST的demo中,中断触发STM32作为客户端去链接服务器。

    图片

    移植完毕,为了方便,把所有函数移植到main.c中,不再放置到中断函数中。

    图片

    分别拷贝tcp_echoclient_connect()、tcp_echoclient_connected()、tcp_echoclient_recv()、tcp_echoclient_connection_close()、tcp_echoclient_send()函数复制过来。

    下面的这些变量也要复制过来

    图片

    复制到main.c中

    图片

    为防止和tcpsever代码变量冲突,把tcp_echoserver.c所有代码全部屏蔽掉,后者将其从工程目录中删除。

    原来文件中的头文件也复制过来

    图片

    把原来main.h的IP信息复制过来

    图片

    把tcp_echoclient_connected函数中一下屏蔽

    图片

    这个时候编译会出错,原因是有些函数调用的错误,

    方法1:调整函数位置

    方法2:添加函数说明

    图片

    修改IP(以实际IP为为主)

    图片

    编译代码,下载到STM32,进行测试:

    ping测试

    图片

    在PC端使用网络调试助手新建TCP服务器,进行客户端测试,有新的客户端上线。

    图片

    为将接收到的数据返回PC,我们在tcp_echoclient_recv函数中加入以下代码

    图片

    收到的数据成功返回

    图片

    本文简单进行了LWIP的初体验,并没有太多技术含量,按照这个方法可以验证新硬件是否正常,如果上述测试全部通过,说明硬件是没有问题。

    点击查看本文所在的专辑,STM32F207网络开发

  • 相关阅读:
    PythonStudy——数据类型总结 Data type summary
    PythonStudy——可变与不可变 Variable and immutable
    PythonStudy——列表操作 List operatio
    PythonStudy——列表的常用操作 List of common operations
    PythonStudy——列表类型 List type
    PythonStudy——字符串扩展方法 String extension method
    PythonStudy——字符串重要方法 String important method
    AWT,Swing,RCP 开发
    JQuery插件机制
    最新知识网站
  • 原文地址:https://www.cnblogs.com/Fireflycjd/p/14687319.html
Copyright © 2011-2022 走看看