基本架构
stm32网口通信由于单片机资源紧凑,采用lwIP协议栈,是一种阉割版的tcp/ip协议实现,具体网上教程很多,不详细讨论。需要认识到的是,在stm32的网络开发中,由 LwIP(传输层、网络层)+片内eth外设(链路层)+phy芯片(物理层)组成。其中cubemx提供了lwip的实现和部分eth外设(如LAN8742及其家族)的驱动库。
以下是个人理解,欢迎讨论:
在整个网络通信的链接过程中,可以认为phy芯片仅负责信号交换,eth外设管理物理地址和链路层层封装,LwIP负责网络层封装,启动顺序为: phy芯片复位->网络信号识别->phy芯片获取网络信息并与eth交换->eth处理收发消息内容转交给上层LwIP。
也就是说当网线连接PC后,PC可以通过ping单片机IP获得延迟信息,说明从pc打phy到单片机eth的通路正常,此时若出现问题,则是应用层代码存在错误。若ping都无法ping通,则说明eth和phy芯片的配置存在问题。
快捷配置
本次开发使用正点原子北极星H750XB开发板,核心板+拓展板(无屏幕
IDE使用stm32cubeIDE开发,其中自带的cubemx(v1.16)进行配置
FreeRTOS
先打开freeRTOS
RAM足够就把堆空间拉满
给SysClock随便选个基础定时器
ETH外设
根据开发板原理图,开发板使用LAN8720 phy芯片,采用RMII通信,选择mode后注意调整引脚,北极星开发板连接的引脚与默认引脚不同,同时要设置引脚速度到最高,并开启eth全局中断
LwIP协议配置
配置好eth后,LwIP变为可选状态
使能LwIP后,如果想要在没有路由器的情况下直连其他设备,需要在IPv4-DHCP Options中关闭DHCP服务,并手动设置IP地址到与其他设备(如PC)同一网段下,子网掩码255.255.255.0
在Platform