由于本人属于菜鸟中的菜鸟,所以,学习 lwip协议栈及STM32花费不少时间。经过一段时间的学习对于 Stm32F407了解只局限于以太网控制器、中断 、串口、定时器、网口、GPIO、SYSTICK等初步了解。后来 一边学 vb.net 、 一边学 lwip、 一边学硬件 (STM32),去图书馆发现 vb.net语言关于网络通信的太少,但是,发现 c#.net 语言关于网络通信的书籍比较多,于是借了几本C#的书籍。最后磕磕碰碰完成该项目,主要涉及上位机socket(TCP)通信源码编写,下位机STM32网络通信模块软硬件设计。
下面讲讲要点了lwip 在stm32F407上的应用, 在 echo server 例程基础上做了一定的修改,网络通信接受数据改成中断方式(提高其运行效率),发送目前在循环里面(根据实际项目需求可做一定改动),tcp_write() 、tcp_output(),每1024字节调用一次 。 配置的参数: mss = 1500、 send_buf = 6*mss、 twnd = 4096。上位机采用异步接收方式,刚刚试了下10s接收到的数据量为11159KB,约等于1MB/S。
写这篇文章已有时日,今天再次翻开以前写的博客,想想当时啥都不懂,好在最后通过努力网络通信上下位机搞定,也算交差了。
主要注意点
(1)硬件上用的DP83848和STM32F439 ,现在用的是这个版本,其中DP83848 电路设计这块要注意滤波电容、rj45 要与其尽量靠近;
(2)下位机软件lwip 采用的是裸奔,没有现成的接口函数要自己慢慢的调试,里面有个opt.h头文件需要自己配置,例如: mem-size ,还有发送、接收采取中断的方式,,周期执行函数放在定时器任务中运行,提高了一定的效率,不要放在while函数中。另外如: tcp、 udp、 ip、 arp、 mac、 phy、 application 等,各位有时间可以进行深入研究;
(3) 上位机资源最多的就是c#的socket通信,本人的下载资源里面就可看到相关例程。本人采取异步通信方式,接收处理函数和下位机的函数最好联合调试,在调试过程中可用wireshark软件抓数据包,通信分析数据包进而帮助其更好的解决相关问题,该软件亦在本人的下载资源里可搜到。
最后祝大家身体健康、事业顺心、奖金多多!