我是卓波,很高兴你来看我的博客。

系列文章:

stm32+lwip(一):使用STM32CubeMX生成项目

stm32+lwip(二):UDP测试

stm32+lwip(三):TCP测试

stm32+lwip(四):网页服务器测试

stm32+lwip(五):以太网帧发送测试

STM32CubeMX是一个图形化的配置工具,根据用户配置可以生成相应的代码,可以帮助开发人员摆脱部分底层开发的烦恼。

一、工程配置

本项目使用stm32407开发板,phy芯片为LAN8720A,硬件原理图如下:

根据原理图,STM32CubeMX配置如下:

1:选择外部晶振

2:选择烧写方式和时基

3:选择调试串口

4:选择PHY接口

5:选择LWIP

6:配置时钟

7:调试串口配置

8:以太网配置

PHY地址根据PHYAD0管脚的配置决定:

PHY芯片设置,需根据LAN8720A的芯片手册来配置:

9:LWIP配置

为了方便调试,使用静态IP,同时使能UDP和TCP模块

10:生成工程

将工程使用的堆栈调大点

每个外设单独形成文件

二、调试串口输出

在生成的uart.c文件中增加以下代码:

 /******************************************************************************
* 描述 : 重定向c库函数printf到串口
* 参数 : 无
* 返回 : HAL_OK = 0x00U
HAL_ERROR = 0x01U
HAL_BUSY = 0x02U
HAL_TIMEOUT = 0x03U
******************************************************************************/
int fputc(int ch, FILE *f)
{
return HAL_UART_Transmit(&huart1, (uint8_t *)&ch, , 0xFFFF);
}

然后就可以使用printf函数将调试信息通过串口打印出来。

三、PHY芯片复位

在以太网初始化后,增加PHY芯片复位代码

 HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);
HAL_Delay();
HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET); 

四、创建app文件

 /**
*****************************************************************************
* @file app.c
* @author Zorb
* @version V1.0.0
* @date 2018-09-04
* @brief 应用的实现
*****************************************************************************
* @history
*
* 1. Date:2018-09-04
* Author:Zorb
* Modification:建立文件
*
*****************************************************************************
*/ #include "app.h" /******************************************************************************
* 描述 : 应用的初始化
* 参数 : 无
* 返回 : 无
******************************************************************************/
void App_init(void)
{
printf("hello zorb\r\n");
} /******************************************************************************
* 描述 : 应用程序
* 参数 : 无
* 返回 : 无
******************************************************************************/
void App_process(void)
{ } /******************************** END OF FILE ********************************/

在main.c中增加以下代码

MX_LWIP_Process()的功能说明:

/**
* ----------------------------------------------------------------------
* Function given to help user to continue LwIP Initialization
* Up to user to complete or change this function ...
* Up to user to call this function in main.c in while (1) of main(void)
*-----------------------------------------------------------------------
* Read a received packet from the Ethernet buffers
* Send it to the lwIP stack for handling
* Handle timeouts if LWIP_TIMERS is set and without RTOS
* Handle the llink status if LWIP_NETIF_LINK_CALLBACK is set and without RTOS
*/

添加好app文件后,后续app初始化代码写在App_init()里边,app应用代码写在App_process()。

需要注意的是,本工程没有使用任务系统,因此App_process()里边代码不能阻塞。

五、ping测试

经过上面的工作,基于stm32的lwip工程已经搭建完成,在电脑上面ping一下:

现在已经ping通了,撒花。

六、最后

STM32CubeMX真的很方便,简简单单配置一下,就可以生成我们想要的工程。减少了开发者对底层驱动开发的时间,让开发者更好地将时间投入到应用开发。

github:https://github.com/54zorb/stm32-lwip

版权所有,转载请打赏哟

如果你喜欢我的文章,可以通过微信扫一扫给我打赏哟

stm32+lwip(一):使用STM32CubeMX生成项目的更多相关文章

  1. Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  2. stm32+lwip(五):以太网帧发送测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  3. stm32+lwip(四):网页服务器测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  4. stm32+lwip(三):TCP测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  5. stm32+lwip(二):UDP测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  6. vs2015 生成项目时,提示执行失败,参数错误

    今天vs2015 生成项目时,提示执行失败,参数错误.查了很多资料未解决 后来,发现只有一个项目出现这个问题,其他项目生成正常.怀疑是该项目解决方案的问题 于是将解决项目中的项目移除,逐一生成引用,解 ...

  7. Maven使用archetype迅速生成项目骨架

    archetype意思是"原型",相当于项目模板.archetype是maven的一个插件,相当于模板工具包. 一个十分重要的mvn指令:mvn 插件名:目标名maven自带三个内 ...

  8. Maven之自定义archetype生成项目骨架(一)

      Maven之自定义archetype生成项目骨架(一) 标签: mavennexus插件 2015-07-15 16:40 2443人阅读 评论(0) 收藏 举报  分类: Maven技术(9)  ...

  9. maven3实战之maven使用入门(使用archetype生成项目骨架)

    maven3实战之maven使用入门(使用archetype生成项目骨架) ---------- maven提供了archetype以帮助我们快速勾勒出项目骨架.以Hello World为例,我们使用 ...

随机推荐

  1. solidity语言4

    引用类型(Reference Types) memory 不支持持久保存 storage 保留为变量 复杂类型如arrays和structs,有附加信息,'data location',提示存储在'm ...

  2. vue+node+mongoose踩过的坑

    1.当你在cmd中输入npm run dev的时候,出现这种错误 很有可能是目前的端口被占用了,可以把所有可能用到这个端口号的应用关闭或者你直接改一个新的端口号 修改端口的方法:新打开一个cmd,然后 ...

  3. Twitter Typeahead plugin Example

    原文网址: http://dhtmlexamples.com/2012/02/27/using-the-typeahead-plugin-with-twitter-bootstrap-2-and-jq ...

  4. 如何将BSP应用配置成Fiori Launchpad上的一个tile

    当我们通过WebIDE或者Eclipse的插件Team Provider把一个本地开发好的UI5应用部署到了ABAP Netweaver服务器上之后,我们可以将该UI5应用配置成Fiori launc ...

  5. PCI PCI-X PCI-E介绍

    1.PCI 外设互联标准(或称个人电脑接口,Personal Computer Interface),实际应用中简称PCI(Peripheral Component Interconnect),是一种 ...

  6. python:部分内置函数与匿名函数

    一.内置函数 1,数据类型:int,bool .......... 2,数据结构:dict,list,tuple,set,str 3,reversed--保留原列表,返回一个反序的迭代器 revers ...

  7. 模拟,找次品硬币,Counterfeit Dollar(POJ 1013)

    题目链接:http://poj.org/problem?id=1013 解题报告: 1.由于次品的重量不清楚,用time['L'+1]来记录各个字母被怀疑的次数.为负数则轻,为正数则重. 2.用zer ...

  8. 检查WIFI是否连接

    查看网络连接 查看WiFi连接状态 (连接- -断开)

  9. 字符ASCII转换

    实现效果: 关键知识: 实现代码: private void button1_Click(object sender, EventArgs e) { if (textBox1.Text != stri ...

  10. 【luogu P2298 Mzc和男家丁的游戏】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2298 对于迷宫问题,bfs是比较好的选择. 直接bfs模板 #include <iostream> ...