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文件中增加以下代码:
1 /******************************************************************************
2 * 描述 : 重定向c库函数printf到串口
3 * 参数 : 无
4 * 返回 : HAL_OK = 0x00U
5 HAL_ERROR = 0x01U
6 HAL_BUSY = 0x02U
7 HAL_TIMEOUT = 0x03U
8 ******************************************************************************/
9 int fputc(int ch, FILE *f)
10 {
11 return HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
12 }
然后就可以使用printf函数将调试信息通过串口打印出来。
三、PHY芯片复位
在以太网初始化后,增加PHY芯片复位代码
1 HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);
2 HAL_Delay(50);
3 HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET);
四、创建app文件
1 /**
2 *****************************************************************************
3 * @file app.c
4 * @author Zorb
5 * @version V1.0.0
6 * @date 2018-09-04
7 * @brief 应用的实现
8 *****************************************************************************
9 * @history
10 *
11 * 1. Date:2018-09-04
12 * Author:Zorb
13 * Modification:建立文件
14 *
15 *****************************************************************************
16 */
17
18 #include "app.h"
19
20 /******************************************************************************
21 * 描述 : 应用的初始化
22 * 参数 : 无
23 * 返回 : 无
24 ******************************************************************************/
25 void App_init(void)
26 {
27 printf("hello zorb\r\n");
28 }
29
30 /******************************************************************************
31 * 描述 : 应用程序
32 * 参数 : 无
33 * 返回 : 无
34 ******************************************************************************/
35 void App_process(void)
36 {
37
38 }
39
40 /******************************** 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工程已经搭建完成,接入网线,配置静态IP地址,保持与开发板在同一网段:
下载程序,观察NET灯已亮起,使用windows cmd ping一下:
现在已经ping通了,ok,接下来就可以进行各种通信测试啦。
六、最后
STM32CubeMX真的很方便,简简单单配置一下,就可以生成我们想要的工程。减少了开发者对底层驱动开发的时间,让开发者更好地将时间投入到应用开发。
github:https://github.com/54zorb/stm32-lwip
以上文章大部分转载自54zorb,在搭建测试环境中发现子网掩码需要修改为255.255.255.0,如果按照文章描述的255.255.255.255,使用cmd将无法ping通,望各位看官注意。
推荐阅读
-
创建基于ASP.NET core 3.1 的RazorPagesMovie项目(一)-创建和使用默认的模板
-
微项目:一步一步带你使用SpringBoot入门(二)
-
Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)
-
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
-
妈再打我一次在线生成器使用步骤
-
使用Python实现一个简单的项目监控
-
Vue项目中使用better-scroll实现一个轮播图自动播放功能
-
使用PHP把HTML生成PDF文件的几个开源项目介绍
-
不能使用for循环,传入n和m,生成一个长度为n,每一项都是m的数组
-
AI使用形状生成器制作一个穿插LOGO