从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现网络通信
引言
看见名字自己就笑了,标题的长度已经快赶上日本轻小说了,正好最近在追无职转生。
说回正题,上篇文章介绍了如何从零开始使用CubeMX生成一个带有freeRTOS操作系统的程序,嵌入式进阶指南以及必备知识学习路线,朋友们可以去看一下,这篇文章我将开始重头戏,如何在STM32F407上移植lwip实现TCP通信,最终实现一个httpd服务器。
自己写的另外两篇文章
从零开始Cubemx配置STM32搭载freeRTOS实现多路ADC(一)
从零开始使用CubeMX配置STM32使用lwip实现httpd服务器(三)
CubeMX配置STM32实现httpd服务器CGI功能并使用网页控制STM32单片机(四)
CubeMX配置以太网以及LWIP实现一个回环功能(裸机)
实现这个功能需要配置2部分,一部分的EHT也就是以太网的配置,另一部分是lwip协议栈的配置
ETH配置
ETH的配置主要有三个器件,单片机,物理网卡(在本文中我们使用的是LAN8720A芯片)以及网口。在这里面最重要的是物理网卡,单片机ETH的配置主要以物理网卡为主,与其电路连接有关系。LAN8720A的知识主要看这一篇文章 https://blog.csdn.net/sinat_20265495/article/details/79628283?spm=1001.2014.3001.5506

现在开始使用Cubemx配置ETH,在Connectivity选择中选择ETH

MII(Medium Independent Interface)是IEEE802.3u规定的一种介质无关接口,主要作用是连接介质访问控制层(MAC)子层与物理层(PH-Y)之间的标准以太网接口,负责MAC和PHY之间的通信。由于MII需要多达16根信号线,由此产生的I/O口需求及功耗较大,有必要对MII引脚数进行简化,因此提出了RMII(Reduced Medium Independent Interface,精简的介质无关接口),即简化了的MII。更详细的看这篇文章 https://blog.csdn.net/fun_tion/article/details/70270632
采用MII接口,PYH的时钟频率要求25M,不需要与MAC层时钟一致。
采用RMII接口,PYH的时钟频率要求50M,需与MAC层时钟一致,通常从MAC层获取该时钟源。
现在一般都用RMII模式



LWIP配置



接下来生成代码就可以了
在主函数中,添加这两个函数

实现回环代码,新建一个tcpecho.c文件,代码
#include "tcpecho.h"
#include "lwip/netif.h"
#include "lwip/ip.h"
#include "lwip/tcp.h"
#include "lwip/init.h"
#include "netif/etharp.h"
#include "lwip/udp.h"
#include "lwip/pbuf.h"
#include <stdio.h>
#include <string.h>
static err_t tcpecho_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{

本文介绍如何使用CubeMX配置STM32F407,结合FreeRTOS和LWIP实现TCP回环功能。首先配置ETH为RMII模式,然后设置LWIP,通过创建TCPECHO接收和接受函数,实现TCP连接的回环。在FreeRTOS环境下,可以使用熟悉的socket编程,简化网络开发。
&spm=1001.2101.3001.5002&articleId=121976963&d=1&t=3&u=180cc5391968400ea2039fec36d21a53)
2513

被折叠的 条评论
为什么被折叠?



