前言
专注CMSIS标准接口,封装各类驱动。
由于工作原因,文章会发的比较简单,如果有遇到问题的可以留言,欢迎交流。
今天聊的以太网会稍微复杂一点,里面封装了TCP的服务器和客户端,也封装了UDP协议。
另外今天上传的以太网是基于公司的项目实现的,还没来得及调试STM32F407的板子,后续有空了会补上。
一、ETH移植
以太网我们首先要明白它主要分为两部分,MAC和PHY,绝大多数的芯片是不包含PHY功能的。所以我们需要外部连接一个PHY芯片,在CMSIS中已将主流芯片进行了封装。
开始正题,和前几个系列一样,首先RTE选择,选择ETH MAC(下图11-1) 和 ETH PHY,在PHY选择时要选择对应芯片(下图11-2),同时在network配置中将Interface接口设置为1(下图12-1),同时Socket选择TCP和UDP(下图12-2)。
配置好后加载bsp_cms_eth.c和bsp_cms_eth.h文件
在CMSIS_DRIVER对应的芯片下右键(1),按照原理图定义ETH_PHY_ADDR地址(2,3),PHY_ADDR一定要按照各自项目进行原理图读取,同时定义ETH_PHY_ADDR=项目里的ADDR,不然初始化会失败。
选择RTE_Device.h配置以太网针脚(1)。
代码实现部分很简单,以太网的封装主要包括三部分,TCP服务器、TCP客户端以及UDP。每一种套接字对应相应的初始化方式。在初始化套接字之前,需要对本地以太网进行基本定义,主要包括IP、MASK、GW、以及MAC(1)。其后要定义对应的回调函数(2),该函数会在接收到数据后自动进行调用,在回调函数中,直接复制对应数据,不要做其他任何操作。其后对相应的套接字进行初始化即可(3)。
回调函数可以直接对对应的套接字进行数据复制,其后根据任务流程开启任务线程,在线程中进行数据处理及收发。每一种类型有固定的收发函数。具体内容可以参考代码。
总结
相比LWIP,CMSIS的代码更简洁。同时执行与CAN、串口等方式相同。大家可以下载以下源码研究一下。GitCode
源代码,资源下载(需积分)
下载源码