欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-05 11:05:27
...

系列文章:

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

stm32+lwip(二):UDP测试

stm32+lwip(三):TCP测试

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

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

 

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

一、工程配置

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

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

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

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

1:选择外部晶振

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

2:选择烧写方式和时基

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

3:选择调试串口

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

4:选择PHY接口

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

5:选择LWIP

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

6:配置时钟

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

7:调试串口配置

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

8:以太网配置

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

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

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

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

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

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

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

9:LWIP配置

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

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

10:生成工程

将工程使用的堆栈调大点

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

每个外设单独形成文件

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

二、调试串口输出

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

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

 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 }

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

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

三、PHY芯片复位

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

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

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文件

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

 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 ********************************/

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

在main.c中增加以下代码

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

MX_LWIP_Process()的功能说明: 

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

/**
 * ----------------------------------------------------------------------
 * 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 
 */

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

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

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

五、ping测试

经过上面的工作,基于stm32的lwip工程已经搭建完成,接入网线,配置静态IP地址,保持与开发板在同一网段:

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

下载程序,观察NET灯已亮起,使用windows cmd ping一下:

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

现在已经ping通了,ok,接下来就可以进行各种通信测试啦。

六、最后

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

 

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

 

以上文章大部分转载自54zorb,在搭建测试环境中发现子网掩码需要修改为255.255.255.0,如果按照文章描述的255.255.255.255,使用cmd将无法ping通,望各位看官注意。

相关标签: LWIP