本帖最后由 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板。实验效果如下图所示:
|