打印
[APM32F4]

【极海APM32F407IG Tiny Board开发板测评】TCP客户端通信

[复制链接]
583|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yinwuqing110 于 2023-7-29 23:05 编辑

        上期借用公司的办公电脑,验证了Keil版本与编译器版本匹配官方提供的SDK例程问题,并在FreeRTOS工程中,体验到了两个独立线程同时运行的效果,一个线程负责LED2不间断闪烁,另一个线程由UART1与UART2构成一个串联通讯,决定LED3亮灭状态。既然Tiny Board集成RJ45网孔,并从板上的硬件资源来看,PHY芯片采用Microchip的LAN8702A,这款芯片应用非常广泛,支持RMII协议。关于这块,板上的部分原理图如下:

      官方SDK中提供了“ETH_TCP_client”例程,该工程建立在“lwip-1.4.1”的框架上。虽然SDK中提供了Eclipse、IAR和MDK三种IDE的工程打开方式,笔者习惯于MDK开发环境,还是采用Keil V5.34.0版本运行该工程示例,见MDK官方都推出Keil 6了,不知道兼容性会不会更好点。
      同样地按照之前步骤,检查工程默认定义的板卡型号。然后编译整个TCP Client工程,会报两处警告,说是有局部变量定义了并没有使用,此处略过。然后仔细阅读工程中的源码,工程大概的意思:上位机(个人电脑)充当TCP_Server端,监听下位机(Tiny Board)发送到指定端口上的信息,上位机(个人电脑)可通过网络调试助手发数据给Tiny Board,而Tiny Board通过按板上的两个按键来控制与上位机的通信连接与断开。
      为了让Tiny Board也运行在个人电脑的局域网下,我们需要手工更改“NETConfig.h”文件下的IP地址宏定义,当然对应的子码掩码,网关都需要改。
#ifndef __NET_CONFIG_H
#define __NET_CONFIG_H

#ifdef __cplusplus
  extern "C" {
#endif

#include "apm32f4xx_eth.h"
#include "netif.h"

/** @addtogroup Examples
  @{
  */

/** @addtogroup ETH_TCP_client
  @{
  */
  
/** @defgroup ETH_TCP_client_Macros Macros
  @{
*/

/** ETH_PHY_ADDRESS */
#define ETH_PHY_ADDRESS       LAN8720A_PHY_ADDRESS

#define COMP_IP_ADDR0               192
#define COMP_IP_ADDR1               168
#define COMP_IP_ADDR2               0
#define COMP_IP_ADDR3               22
#define COMP_PORT                   6000

#define LOCAL_SERVER_PORT     5000

/** Static IP ADDRESS: IP_ADDR0.IP_ADDR1.IP_ADDR2.IP_ADDR3 */
#define IP_ADDR0                    192
#define IP_ADDR1                    168
#define IP_ADDR2                    0
#define IP_ADDR3                    25

/** NETMASK */
#define NETMASK_ADDR0               255
#define NETMASK_ADDR1               255
#define NETMASK_ADDR2               255
#define NETMASK_ADDR3                 0

/** Gateway Address */
#define GW_ADDR0                    192
#define GW_ADDR1                    168
#define GW_ADDR2                    0
#define GW_ADDR3                    1

#define ETH_GET_LINK_STATUS         (ETH_ReadPHYRegister(ETH_PHY_ADDRESS, PHY_BSR) & 0x00000004)

#ifdef __cplusplus
}
#endif

#endif /** __NET_CONFIG_H */

      当然这是直接手动设定IP地址,运行在这个网络中,如果设定的这个IP地址已被使用了,则会产生网络地址冲突,最好采用DHCP方式获取IP地址,后续有空再尝试移植DHCP功能代码。编译完成后便可下载到开发板中,然后是搭好硬件连线,工程中有用到串口1用来实时打印Tiny Board串口1发送的数据。

      这里只需要串口打印Tiny Board发出来的数据,因此不需要接PA10(RX),接入一根与个人电脑同属一个局域网的网线。
      接下来在个人电脑端打开网络调试助手,将模式选择为TCP_Server,端口号设置成代码中定义的6000。按下Tiny Board板上的RST按键后,串口输出相应的提示信息,“按一下KEY1表示连接Server端”,“按一下KEY2表示断开与Server端的连接”,服务器端可发数据到这个端口给Tiny Board板。实验效果如下图所示:

使用特权

评论回复
沙发
forgot| | 2023-7-31 09:41 | 只看该作者
官方这个例程我也跑了,给楼主点赞,来支持一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

1016

帖子

7

粉丝