由于工作之后大部分时间都是在调试FPGA,所以对于MCU这块很久都没有进展了。
昨天就拿了同事画的STM32网络开发板来调试,
调试的过程还是比较顺利的。
硬件:STM32F407ZET6+DP83848+RJ45(带网络变压器)
操作系统:FREEOS
协议栈:LWIP
应用协议:UDP
实现功能:上位机下发一帧数据,STM32可以返回对应的指令信息
调试过程:
我是直接用的cubemx(5.6.1),第一步就是要看板子上的晶振,是多少兆,可能是25兆,也有可能是20兆。
不管多少兆,首先要在cubemx上开启外部晶振,然后就通过时钟树的设置,将所有的时钟总线工作在最高频率,
我是STM32F407,有的总线是84mhz,有的总线是168mhz。
打开ETH配置,选择RMII,确认一下phy的地址,根据硬件来(默认是1),启动接收中断,
选择完成之后可以查看软件默认的配置管脚与硬件原理图的管脚是不是一样的,如果不一样就是要更改到响应的硬件引脚。
更改方式就是用鼠标点击响应的管脚,确认新的管脚后,旧的管脚就自动消失了,相当于软件自动为我们复用了,具体可以
根据STM32F4的芯片手册上来。
启动FREEOS,我是把堆栈设置到了20480B,我其他就没有改。
启动LWIP,设置为静态IP,我把IP设置为192.168.1.109,子网掩码设置为255.255.255.0,网关设置为192.168.1.1.
然后生成代码,烧入板子,并且将PC的IP设置为同一网段,设置完成之后,重启就可以PING通了。
PING通就说明基本的框架搭建起来了,接下来可以编写应用代码与上位机了。
应用代码编写udp服务函数+回调函数,确认远程端口与监听端口就可以了
然后编写上位机,上位机只要知道远程的IP地址(就是单片机的静态IP),远程端口,监听端口,通过调用函数,就可以实现收发了。
感觉与串口的功能差不多,只是网口的速度更快,协议封装的更厉害而已。
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
顺便说一下,W5500,这个芯片什么都封装起来了,你只要用就可以了,一会儿就调试通过了。
如果项目对速度要求不高,那就上W5500。如果项目对速度要求高,需要不同的协议栈,那就上DP83848就可以了。
/*********************************************************************************************************************************************************/