stm32+lwip(一):使用STM32CubeMX生成项目
我是卓波,很高兴你来看我的博客。
系列文章:
stm32+lwip(一):使用STM32CubeMX生成项目
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生成项目的更多相关文章
- Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- stm32+lwip(五):以太网帧发送测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...
- stm32+lwip(四):网页服务器测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...
- stm32+lwip(三):TCP测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...
- stm32+lwip(二):UDP测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...
- vs2015 生成项目时,提示执行失败,参数错误
今天vs2015 生成项目时,提示执行失败,参数错误.查了很多资料未解决 后来,发现只有一个项目出现这个问题,其他项目生成正常.怀疑是该项目解决方案的问题 于是将解决项目中的项目移除,逐一生成引用,解 ...
- Maven使用archetype迅速生成项目骨架
archetype意思是"原型",相当于项目模板.archetype是maven的一个插件,相当于模板工具包. 一个十分重要的mvn指令:mvn 插件名:目标名maven自带三个内 ...
- Maven之自定义archetype生成项目骨架(一)
Maven之自定义archetype生成项目骨架(一) 标签: mavennexus插件 2015-07-15 16:40 2443人阅读 评论(0) 收藏 举报 分类: Maven技术(9) ...
- maven3实战之maven使用入门(使用archetype生成项目骨架)
maven3实战之maven使用入门(使用archetype生成项目骨架) ---------- maven提供了archetype以帮助我们快速勾勒出项目骨架.以Hello World为例,我们使用 ...
随机推荐
- 利用SQL Server Management Studio(SSMS)复制数据库
利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...
- jquery-tags-input 使用经历
源代码里有这么一段,是在tagsInput这里,第一次初始化的时候是正常的,但当第二次初始化的时候就会出现问题,id的值会组合为 id+new Date().getTime() 暂时不清楚作用是什么 ...
- 【[NOI2003]文本编辑器】
题目 发现这样一句话就会导致\(T\) ch[m][0]=++m; 并不是很知道为什么,可能这是某种未定义行为在不同编译器下会有不同后果? 至于这道题就很简单了,几个有关光标位置的操作就用一个变量模拟 ...
- [转]关于VC++ MFC中的空闲Idle处理机制!
关键词: 先根据空闲标志以及消息队列是否为空这两个条件判断当前线程是否处于空闲状态(这个“空闲”的含义同操作系统的含义不同,是MFC自己所谓的“空闲”),如果是,就调用CWinThread::OnId ...
- 调用jquery的resize方法改变div的宽度和高度在IE中不变,在谷歌中可以正常显示
1.jquery代码: 1.1问题的版本: $(function() { haituheight(); $(window).resize(function(){ haituheight(); }); ...
- c# 常见验证邮箱、电话号码、日期等格式
#region 验证邮箱验证邮箱 /**//// <summary> /// 验证邮箱 /// </summary> /// <param name="sour ...
- HDU 1372 Knight Moves(最简单也是最经典的bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...
- HDU1069 Monkey and Banana
HDU1069 Monkey and Banana 题目大意 给定 n 种盒子, 每种盒子无限多个, 需要叠起来, 在上面的盒子的长和宽必须严格小于下面盒子的长和宽, 求最高的高度. 思路 对于每个方 ...
- Vue nodejs商城项目-登录模块
一.登录功能 后端server/routes/users.js var User = require('./../models/users.js'); // 二级路由 // 登录接口 router ...
- 字段中有空的时候 进行逻辑运算,mysql 与 oracle 处理函数IFNULL() 与 nvl() ,选取NULL 值 。
mySQL数据库: SELECT id_p,IFNULL(math,0)+IFNULL(english,0) 总分 from mytest_brian1 Oracle 数据库: select id_ ...






