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

[复制链接]
1170|1
 楼主| yinwuqing110 发表于 2023-7-29 23:03 | 显示全部楼层 |阅读模式
本帖最后由 yinwuqing110 于 2023-7-29 23:05 编辑

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

  3. #ifdef __cplusplus
  4.   extern "C" {
  5. #endif

  6. #include "apm32f4xx_eth.h"
  7. #include "netif.h"

  8. /** @addtogroup Examples
  9.   @{
  10.   */

  11. /** @addtogroup ETH_TCP_client
  12.   @{
  13.   */
  14.   
  15. /** @defgroup ETH_TCP_client_Macros Macros
  16.   @{
  17. */

  18. /** ETH_PHY_ADDRESS */
  19. #define ETH_PHY_ADDRESS       LAN8720A_PHY_ADDRESS

  20. #define COMP_IP_ADDR0               192
  21. #define COMP_IP_ADDR1               168
  22. #define COMP_IP_ADDR2               0
  23. #define COMP_IP_ADDR3               22
  24. #define COMP_PORT                   6000

  25. #define LOCAL_SERVER_PORT     5000

  26. /** Static IP ADDRESS: IP_ADDR0.IP_ADDR1.IP_ADDR2.IP_ADDR3 */
  27. #define IP_ADDR0                    192
  28. #define IP_ADDR1                    168
  29. #define IP_ADDR2                    0
  30. #define IP_ADDR3                    25

  31. /** NETMASK */
  32. #define NETMASK_ADDR0               255
  33. #define NETMASK_ADDR1               255
  34. #define NETMASK_ADDR2               255
  35. #define NETMASK_ADDR3                 0

  36. /** Gateway Address */
  37. #define GW_ADDR0                    192
  38. #define GW_ADDR1                    168
  39. #define GW_ADDR2                    0
  40. #define GW_ADDR3                    1

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

  42. #ifdef __cplusplus
  43. }
  44. #endif

  45. #endif /** __NET_CONFIG_H */

      当然这是直接手动设定IP地址,运行在这个网络中,如果设定的这个IP地址已被使用了,则会产生网络地址冲突,最好采用DHCP方式获取IP地址,后续有空再尝试移植DHCP功能代码。编译完成后便可下载到开发板中,然后是搭好硬件连线,工程中有用到串口1用来实时打印Tiny Board串口1发送的数据。
串口连线.jpg
      这里只需要串口打印Tiny Board发出来的数据,因此不需要接PA10(RX),接入一根与个人电脑同属一个局域网的网线。
      接下来在个人电脑端打开网络调试助手,将模式选择为TCP_Server,端口号设置成代码中定义的6000。按下Tiny Board板上的RST按键后,串口输出相应的提示信息,“按一下KEY1表示连接Server端”,“按一下KEY2表示断开与Server端的连接”,服务器端可发数据到这个端口给Tiny Board板。实验效果如下图所示:
Client通信演示.gif
forgot 发表于 2023-7-31 09:41 | 显示全部楼层
官方这个例程我也跑了,给楼主点赞,来支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

107

主题

1102

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部