最近正好一个项目要使用到网口,于是就申请了这个开发板,自带网口的,方便前期测试一下,调试还是挺顺利的。 先来看看硬件图纸,网口用到的引脚有下面这些 使用的是RMII方式,LAN8720也只支持这种方式,复位引脚是和MCU的复位连接到一起的,不使用单独的MCU引脚控制,下面进行程序的引脚初始化。
首先编写了一个函数,把所有的外设时钟都在这里初始化了,这个是个人习惯。
和网口引脚有关的是GPIOA,C,G三个端口时钟,还有网络外设的功能时钟要打开,用到的控制引脚申明,这样方便移植 网络引脚设置 RMII接口 * ETH_MDIO -------------------------> PA2 * ETH_MDC --------------------------> PC1 * ETH_RMII_REF_CLK------------------> PA1 * ETH_RMII_CRS_DV ------------------> PA7 * ETH_RMII_RXD0 --------------------> PC4 * ETH_RMII_RXD1 --------------------> PC5 * ETH_RMII_TX_EN -------------------> PG11 * ETH_RMII_TXD0 --------------------> PG13 * ETH_RMII_TXD1 --------------------> PG14
引脚初始化 引脚初始化就完成了 程序的大概流程: 启动--->系统初始化--->网络测试函数--->建立个FREERTOS任务--->lwip初始化使用DHIP方式--->网口芯片初始化--->等待DHIP分配网址--->网络初始化完成后建立一个队列,用于网络数据的接收传递给数据处理任务,然后建立一个TCP服务器的任务,网络数据处理任务,LED闪灯任务这3个任务。 TCP服务器任务就是建立一个TCP块,然后绑定端口,进行端口监听数据,然后等待连接请求,接收数据处理,把数据发送给队列。 网络数据处理任务就是等待队列数据有效,然后判断数据的第一个字节是不是“1”,是的话就回一串数据给客户端。
Main里网络测试函数
网络初始化任务
网络初始化完成后建立3个任务,TCP服务器的任务,网络数据处理任务,LED闪灯任务这3个任务
TCP服务器任务具体内容
数据处理任务 测试效果 MCU收到第一个字符是1的话才回一个字符串,不是1的话不回信息
|